InterpAsm-x86.S revision c4080f6bdeda19901a508cc75f96ac7e07903918
189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This file was generated automatically by gen-mterp.py for 'x86'. 389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * --> DO NOT EDIT <-- 589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/header.S */ 889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 1089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 1189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 1289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * you may not use this file except in compliance with the License. 1389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * You may obtain a copy of the License at 1489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 1589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 1689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 1789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 2089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * See the License for the specific language governing permissions and 2189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * limitations under the License. 2289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 2389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 2489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 32-bit x86 definitions and declarations. 2589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 2689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 2789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 2889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project386 ABI general notes: 2989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 3089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source ProjectCaller save set: 3189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project eax, edx, ecx, st(0)-st(7) 3289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source ProjectCallee save set: 3389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ebx, esi, edi, ebp 3489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source ProjectReturn regs: 3589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 32-bit in eax 3689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 64-bit in edx:eax (low-order 32 in eax) 3789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fp on top of fp stack st(0) 3889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 3989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source ProjectParameters passed on stack, pushed right-to-left. On entry to target, first 4089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Projectparm is at 4(%esp). Traditional entry code is: 4189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 4289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source ProjectfunctEntry: 4389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project push %ebp # save old frame pointer 4489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project mov %ebp,%esp # establish new frame pointer 4589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sub FrameSize,%esp # Allocate storage for spill, locals & outs 4689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 4789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source ProjectOnce past the prologue, arguments are referenced at ((argno + 2)*4)(%ebp) 4889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 4989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source ProjectAlignment of stack not strictly required, but should be for performance. We'll 5089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Projectalign frame sizes to 16-byte multiples. 5189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 5289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source ProjectIf we're not doing variable stack allocation (alloca), the frame pointer can be 5389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Projecteliminated and all arg references adjusted to be esp relative. 5489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 5589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source ProjectMterp notes: 5689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 5789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source ProjectSome key interpreter variables will be assigned to registers. Note that each 5889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Projectwill also have an associated spill location (mostly used useful for those assigned 5989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Projectto callee save registers). 6089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 6189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project nick reg purpose 6289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project rPC edx interpreted program counter, used for fetching instructions 6389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project rFP esi interpreted frame pointer, used for accessing locals and args 6489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project rIBASE edi Base pointer for instruction dispatch computed goto 6589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project rINST bx first 16-bit code of current instruction 6689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project rOPCODE bl opcode portion of instruction word 6789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project rINST_HI bh high byte of instruction word, usually contains src/tgt reg names 6889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 6989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source ProjectNotes: 7089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project o High order 16 bits of ebx must be zero on entry to handler 7189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project o rPC, rFP, rIBASE, rINST/rOPCODE valid on handler entry and exit 7289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project o eax and ecx are scratch, rINST/ebx sometimes scratch 7389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project o rPC is in the caller save set, and will be killed across external calls. Don't 7489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project forget to SPILL/UNSPILL it around call points 7589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 7689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project*/ 7789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 7889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define rPC %edx 7989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define rFP %esi 8089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define rIBASE %edi 8189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define rINST_FULL %ebx 8289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define rINST %bx 8389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define rINST_HI %bh 8489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define rINST_LO %bl 8589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define rOPCODE %bl 8689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 8789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 8889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* Frame diagram while executing dvmMterpStdRun, high to low addresses */ 8989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define IN_ARG0 ( 8) 9089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define CALLER_RP ( 4) 9189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define PREV_FP ( 0) /* <- dvmMterpStdRun ebp */ 9289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* Spill offsets relative to %ebp */ 9389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define EDI_SPILL ( -4) 9489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define ESI_SPILL ( -8) 9589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define EDX_SPILL (-12) /* <- esp following dmMterpStdRun header */ 9689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define rPC_SPILL (-16) 9789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define rFP_SPILL (-20) 9889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define rGLUE_SPILL (-24) 9989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define rIBASE_SPILL (-28) 10089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define rINST_FULL_SPILL (-32) 10189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define TMP_SPILL (-36) 10289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define LOCAL0_OFFSET (-40) 10389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define LOCAL1_OFFSET (-44) 10489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define LOCAL2_OFFSET (-48) 10589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define LOCAL3_OFFSET (-52) 10689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* Out Arg offsets, relative to %sp */ 10789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define OUT_ARG4 ( 16) 10889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define OUT_ARG3 ( 12) 10989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define OUT_ARG2 ( 8) 11089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define OUT_ARG1 ( 4) 11189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define OUT_ARG0 ( 0) /* <- dvmMterpStdRun esp */ 11289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 11389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define SPILL(reg) movl reg##,reg##_SPILL(%ebp) 11489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define UNSPILL(reg) movl reg##_SPILL(%ebp),reg 11589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define SPILL_TMP(reg) movl reg,TMP_SPILL(%ebp) 11689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define UNSPILL_TMP(reg) movl TMP_SPILL(%ebp),reg 11789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 11889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 11989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* save/restore the PC and/or FP from the glue struct */ 12089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define LOAD_PC_FROM_GLUE(_glu) movl offGlue_pc(_glu),rPC 12189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define SAVE_PC_TO_GLUE(_glu) movl rPC,offGlue_pc(_glu) 12289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define LOAD_FP_FROM_GLUE(_glu) movl offGlue_fp(_glu),rFP 12389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define SAVE_FP_TO_GLUE(_glu) movl rFP,offGlue_fp(_glu) 12489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 12589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define GET_GLUE(_reg) movl rGLUE_SPILL(%ebp),_reg 12689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 12789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* The interpreter assumes a properly aligned stack on entry, and 12889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * will preserve 16-byte alignment. 12989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 13089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 13189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 13289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * "export" the PC to the interpreted stack frame, f/b/o future exception 13389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * objects. Must * be done *before* something calls dvmThrowException. 13489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 13589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * In C this is "SAVEAREA_FROM_FP(fp)->xtra.currentPc = pc", i.e. 13689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * fp - sizeof(StackSaveArea) + offsetof(SaveArea, xtra.currentPc) 13789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 13889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * It's okay to do this more than once. 13989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 14089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define EXPORT_PC() \ 14189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC, (-sizeofStackSaveArea + offStackSaveArea_currentPc)(rFP) 14289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 14389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 14489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Given a frame pointer, find the stack save area. 14589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 14689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * In C this is "((StackSaveArea*)(_fp) -1)". 14789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 14889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define SAVEAREA_FROM_FP(_reg, _fpreg) \ 14989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal -sizeofStackSaveArea(_fpreg),_reg 15089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 15189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 15289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Fetch the next instruction from rPC into rINST. Does not advance rPC. 15389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 15489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define FETCH_INST() movzwl (rPC),rINST_FULL 15589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 15689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 15789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Fetch the nth instruction word from rPC into rINST. Does not advance 15889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rPC, and _count is in words 15989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 16089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define FETCH_INST_WORD(_count) movzwl _count*2(rPC),rINST_FULL 16189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 16289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 16389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Fetch instruction word indexed (used for branching). 16489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Index is in instruction word units. 16589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 16689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define FETCH_INST_INDEXED(_reg) movzwl (rPC,_reg,2),rINST_FULL 16789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 16889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 16989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Extract the opcode of the instruction in rINST 17089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 17189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define EXTRACT_OPCODE(_reg) movzx rOPCODE,_reg 17289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 17389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 17489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Advance rPC by instruction count 17589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 17689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define ADVANCE_PC(_count) leal 2*_count(rPC),rPC 17789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 17889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 17989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Advance rPC by branch offset in register 18089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 18189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define ADVANCE_PC_INDEXED(_reg) leal (rPC,_reg,2),rPC 18289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 18389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 18489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Note: assumes opcode previously fetched and in rINST, and 18589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * %eax is killable at this point. 18689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 18789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#if 1 18889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.macro GOTO_NEXT 18989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* For computed next version */ 19089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rOPCODE,%eax 19189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sall $6,%eax 19289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project addl rIBASE,%eax 19389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp *%eax 19489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.endm 19589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#else 19689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* For jump table version */ 19789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.macro GOTO_NEXT 19889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rOPCODE,%eax 19989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp *(rIBASE,%eax,4) 20089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.endm 20189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#endif 20289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 20389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 20489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Get/set the 32-bit value from a Dalvik register. 20589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 20689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define GET_VREG(_reg, _vreg) movl (rFP,_vreg,4),_reg 20789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define SET_VREG(_reg, _vreg) movl _reg,(rFP,_vreg,4) 20889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define GET_VREG_WORD(_reg, _vreg, _offset) movl 4*(_offset)(rFP,_vreg,4),_reg 20989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#define SET_VREG_WORD(_reg, _vreg, _offset) movl _reg,4*(_offset)(rFP,_vreg,4) 21089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 21189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 21289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This is a #include, not a %include, because we want the C pre-processor 21389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * to expand the macros into assembler assignment statements. 21489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 21589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#include "../common/asm-constants.h" 21689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 21789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 21889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 21989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .global dvmAsmInstructionStart 22089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .type dvmAsmInstructionStart, %function 22189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source ProjectdvmAsmInstructionStart = .L_OP_NOP 22289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .text 22389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 22489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 22589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 22689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_NOP: /* 0x00 */ 22789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_NOP.S */ 22889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 22989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 23089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 23189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 23289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 23389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 23489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MOVE: /* 0x01 */ 23589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MOVE.S */ 23689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* for move, move-object, long-to-int */ 23789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB */ 23889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 23989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%al # eax<- A 24089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project shrl $12,rINST_FULL # rINST_FULL<- B 24189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 24289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 24389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 24489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%ecx,%eax) # fp[A]<-fp[B] 24589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 24689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 24789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 24889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 24989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MOVE_FROM16: /* 0x02 */ 25089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MOVE_FROM16.S */ 25189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* for: move/from16, move-object/from16 */ 25289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, vBBBB */ 25389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%eax # eax <= AA 25489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movw 2(rPC),rINST # rINST <= BBBB 25589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG (%ecx,rINST_FULL) # ecx<- fp[BBBB] 25689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 25789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 25889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG (%ecx,%eax) # fp[AA]<- ecx] 25989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 26089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 26189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 26289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 26389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 26489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MOVE_16: /* 0x03 */ 26589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MOVE_16.S */ 26689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* for: move/16, move-object/16 */ 26789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAAAA, vBBBB */ 26889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- BBBB 26989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- AAAA 27089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) 27189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(3) 27289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(3) 27389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%ecx,%eax) 27489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 27589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 27689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 27789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 27889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MOVE_WIDE: /* 0x04 */ 27989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MOVE_WIDE.S */ 28089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* move-wide vA, vB */ 28189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 28289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx <- BA 28389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rinst_FULL<- B 28489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- v[B+0] 28589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rINST_FULL,rINST_FULL,1) # rINST_FULL<- v[B+1] 28689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx <- A 28789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(rINST_FULL,%ecx,1) # v[A+1]<- rINST_FULL 28889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 28989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 29089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[A+0]<- eax 29189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 29289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 29389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 29489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 29589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MOVE_WIDE_FROM16: /* 0x05 */ 29689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MOVE_WIDE_FROM16.S */ 29789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* move-wide/from16 vAA, vBBBB */ 29889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 29989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 30089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%eax # eax<- AAAA 30189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rINST_FULL,%ecx,0) # rINST_FULL<- v[BBBB+0] 30289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # ecx<- v[BBBB+1] 30389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(rINST_FULL,%eax,0) # v[AAAA+0]<- rINST_FULL 30489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 30589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 30689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%ecx,%eax,1) # v[AAAA+1]<- eax 30789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 30889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 30989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 31089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 31189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MOVE_WIDE_16: /* 0x06 */ 31289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MOVE_WIDE_16.S */ 31389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* move-wide/16 vAAAA, vBBBB */ 31489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 31589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- BBBB 31689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- AAAA 31789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rINST_FULL,%ecx,0) # rINST_WORD<- v[BBBB+0] 31889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # ecx<- v[BBBB+1] 31989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(rINST_FULL,%eax,0) # v[AAAA+0]<- rINST_FULL 32089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(3) 32189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(3) 32289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%ecx,%eax,1) # v[AAAA+1]<- ecx 32389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 32489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 32589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 32689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 32789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MOVE_OBJECT: /* 0x07 */ 32889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MOVE_OBJECT.S */ 32989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MOVE.S */ 33089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* for move, move-object, long-to-int */ 33189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB */ 33289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 33389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%al # eax<- A 33489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project shrl $12,rINST_FULL # rINST_FULL<- B 33589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 33689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 33789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 33889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%ecx,%eax) # fp[A]<-fp[B] 33989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 34089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 34189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 34289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 34389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 34489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MOVE_OBJECT_FROM16: /* 0x08 */ 34589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MOVE_OBJECT_FROM16.S */ 34689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MOVE_FROM16.S */ 34789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* for: move/from16, move-object/from16 */ 34889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, vBBBB */ 34989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%eax # eax <= AA 35089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movw 2(rPC),rINST # rINST <= BBBB 35189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG (%ecx,rINST_FULL) # ecx<- fp[BBBB] 35289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 35389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 35489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG (%ecx,%eax) # fp[AA]<- ecx] 35589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 35689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 35789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 35889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 35989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 36089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 36189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MOVE_OBJECT_16: /* 0x09 */ 36289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MOVE_OBJECT_16.S */ 36389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MOVE_16.S */ 36489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* for: move/16, move-object/16 */ 36589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAAAA, vBBBB */ 36689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- BBBB 36789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- AAAA 36889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) 36989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(3) 37089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(3) 37189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%ecx,%eax) 37289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 37389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 37489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 37589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 37689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 37789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MOVE_RESULT: /* 0x0a */ 37889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MOVE_RESULT.S */ 37989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* for: move-result, move-result-object */ 38089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA */ 38189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%eax) # eax<- rGLUE 38289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx<- AA 38389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_retval(%eax),%eax # eax<- glue->retval.l 38489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 38589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 38689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG (%eax,%ecx) # fp[AA]<- retval.l 38789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 38889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 38989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 39089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 39189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MOVE_RESULT_WIDE: /* 0x0b */ 39289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MOVE_RESULT_WIDE.S */ 39389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* move-result-wide vAA */ 39489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 39589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 39689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_retval(%ecx),%eax 39789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 4+offGlue_retval(%ecx),%ecx 39889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[AA+0] <- eax 39989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,1) # v[AA+1] <- ecx 40089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 40189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 40289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 40389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 40489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 40589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 40689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MOVE_RESULT_OBJECT: /* 0x0c */ 40789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MOVE_RESULT_OBJECT.S */ 40889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MOVE_RESULT.S */ 40989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* for: move-result, move-result-object */ 41089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA */ 41189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%eax) # eax<- rGLUE 41289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx<- AA 41389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_retval(%eax),%eax # eax<- glue->retval.l 41489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 41589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 41689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG (%eax,%ecx) # fp[AA]<- retval.l 41789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 41889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 41989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 42089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 42189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 42289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MOVE_EXCEPTION: /* 0x0d */ 42389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MOVE_EXCEPTION.S */ 42489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* move-exception vAA */ 42589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 42689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 42789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_self(%ecx),%ecx # ecx<- glue->self 42889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offThread_exception(%ecx),%eax # eax<- dvmGetException bypass 42989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,rINST_FULL) # fp[AA]<- exception object 43089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 43189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 43289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0,offThread_exception(%ecx) # dvmClearException bypass 43389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 43489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 43589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 43689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 43789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_RETURN_VOID: /* 0x0e */ 43889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_RETURN_VOID.S */ 43989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_returnFromMethod 44089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 44189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 44289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 44389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 44489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_RETURN: /* 0x0f */ 44589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_RETURN.S */ 44689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 44789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Return a 32-bit value. Copies the return value into the "glue" 44889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * structure, then jumps to the return handler. 44989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 45089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: return, return-object 45189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 45289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA */ 45389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 45489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 45589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 45689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,offGlue_retval(%ecx) # retval.i <- AA 45789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_returnFromMethod 45889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 45989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 46089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 46189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_RETURN_WIDE: /* 0x10 */ 46289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_RETURN_WIDE.S */ 46389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 46489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Return a 64-bit value. Copies the return value into the "glue" 46589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * structure, then jumps to the return handler. 46689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 46789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* return-wide vAA */ 46889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 46989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 47089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- v[AA+0] 47189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rINST_FULL,rINST_FULL,1) # rINST_FULL<- v[AA+1] 47289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,offGlue_retval(%ecx) 47389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,4+offGlue_retval(%ecx) 47489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_returnFromMethod 47589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 47689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 47789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 47889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_RETURN_OBJECT: /* 0x11 */ 47989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_RETURN_OBJECT.S */ 48089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_RETURN.S */ 48189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 48289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Return a 32-bit value. Copies the return value into the "glue" 48389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * structure, then jumps to the return handler. 48489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 48589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: return, return-object 48689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 48789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA */ 48889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 48989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 49089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 49189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,offGlue_retval(%ecx) # retval.i <- AA 49289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_returnFromMethod 49389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 49489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 49589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 49689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 49789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_CONST_4: /* 0x12 */ 49889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_CONST_4.S */ 49989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* const/4 vA, #+B */ 50089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movsx rINST_HI,%eax # eax<-ssssssBx 50189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0xf,%ecx 50289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl %eax,%ecx # ecx<- A 50389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 50489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 50589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%eax 50689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 50789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 50889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 50989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 51089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 51189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 51289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_CONST_16: /* 0x13 */ 51389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_CONST_16.S */ 51489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* const/16 vAA, #+BBBB */ 51589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssBBBB 51689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%eax # eax<- AA 51789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 51889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 51989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%ecx,%eax) # vAA<- ssssBBBB 52089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 52189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 52289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 52389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 52489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_CONST: /* 0x14 */ 52589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_CONST.S */ 52689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* const vAA, #+BBBBbbbb */ 52789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 52889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 2(rPC),%eax # grab all 32 bits at once 52989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(3) 53089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(3) 53189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) # vAA<- eax 53289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 53389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 53489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 53589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 53689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_CONST_HIGH16: /* 0x15 */ 53789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_CONST_HIGH16.S */ 53889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* const/high16 vAA, #+BBBB0000 */ 53989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- 0000BBBB 54089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 54189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 54289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 54389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sall $16,%eax # eax<- BBBB0000 54489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) # vAA<- eax 54589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 54689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 54789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 54889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 54989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_CONST_WIDE_16: /* 0x16 */ 55089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_CONST_WIDE_16.S */ 55189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* const-wide/16 vAA, #+BBBB */ 55289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),%eax # eax<- ssssBBBB 55389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 55489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 55589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 55689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cltd # rPC:eax<- ssssssssssssBBBB 55789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) # store msw 55889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 55989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # store lsw 56089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 56189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 56289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 56389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 56489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 56589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_CONST_WIDE_32: /* 0x17 */ 56689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_CONST_WIDE_32.S */ 56789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* const-wide/32 vAA, #+BBBBbbbb */ 56889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 2(rPC),%eax # eax<- BBBBbbbb 56989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 57089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 57189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(3) 57289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cltd # rPC:eax<- ssssssssssssBBBB 57389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) # store msw 57489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 57589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # store lsw 57689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(3) 57789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 57889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 57989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 58089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 58189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_CONST_WIDE: /* 0x18 */ 58289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_CONST_WIDE.S */ 58389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* const-wide vAA, #+HHHHhhhhBBBBbbbb */ 58489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 2(rPC),%eax # eax<- lsw 58589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx <- AA 58689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 6(rPC),rINST_FULL # rINST_FULL<- msw 58789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal (rFP,%ecx,4),%ecx # dst addr 58889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,4(%ecx) 58989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(5) 59089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,(%ecx) 59189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(5) 59289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 59389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 59489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 59589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 59689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 59789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_CONST_WIDE_HIGH16: /* 0x19 */ 59889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_CONST_WIDE_HIGH16.S */ 59989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* const-wide/high16 vAA, #+BBBB000000000000 */ 60089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- 0000BBBB 60189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 60289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 60389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 60489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sall $16,%eax # eax<- BBBB0000 60589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,%ecx,1) # v[AA+1]<- eax 60689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %eax,%eax 60789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[AA+0]<- eax 60889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 60989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 61089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 61189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 61289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 61389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_CONST_STRING: /* 0x1a */ 61489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_CONST_STRING.S */ 61589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 61689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* const/string vAA, String@BBBB */ 61789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 61889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 61989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx# ecx<- glue->methodClassDex 62089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 62189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResStrings(%ecx),%ecx # ecx<- dvmDex->pResStrings 62289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- rResString[BBBB] 62389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%ecx 62489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 62589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # resolved yet? 62689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_CONST_STRING_resolve 62789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) # vAA<- rResString[BBBB] 62889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 62989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 63089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 63189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 63289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 63389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_CONST_STRING_JUMBO: /* 0x1b */ 63489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_CONST_STRING_JUMBO.S */ 63589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 63689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* const/string vAA, String@BBBBBBBB */ 63789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 63889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 2(rPC),%eax # eax<- BBBBBBBB 63989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx# ecx<- glue->methodClassDex 64089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 64189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResStrings(%ecx),%ecx # ecx<- dvmDex->pResStrings 64289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- rResString[BBBB] 64389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%ecx 64489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(3) 64589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # resolved yet? 64689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_CONST_STRING_JUMBO_resolve 64789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) # vAA<- rResString[BBBB] 64889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(3) 64989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 65089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 65189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 65289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 65389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_CONST_CLASS: /* 0x1c */ 65489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_CONST_CLASS.S */ 65589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 65689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* const/class vAA, Class@BBBB */ 65789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 65889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 65989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx# ecx<- glue->methodClassDex 66089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 66189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- dvmDex->pResClasses 66289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- rResClasses[BBBB] 66389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%ecx 66489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 66589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # resolved yet? 66689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_CONST_CLASS_resolve 66789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) # vAA<- rResClasses[BBBB] 66889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 66989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 67089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 67189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 67289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 67389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MONITOR_ENTER: /* 0x1d */ 67489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MONITOR_ENTER.S */ 67589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 67689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Synchronize on an object. 67789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 67889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* monitor-enter vAA */ 67989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 68089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 68189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 68289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_self(%ecx),%ecx # ecx<- glue->self 68389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 68489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null object? 68589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#ifdef WITH_MONITOR_TRACKING 68689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 68789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#endif 68889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_MONITOR_ENTER_continue 68989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_errNullObject 69089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 69189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 69289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 69389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MONITOR_EXIT: /* 0x1e */ 69489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MONITOR_EXIT.S */ 69589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 69689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Unlock an object. 69789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 69889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Exceptions that occur when unlocking a monitor need to appear as 69989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * if they happened at the following instruction. See the Dalvik 70089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * instruction spec. 70189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 70289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* monitor-exit vAA */ 70389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 70489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) 70589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 70689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 70789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null object? 70889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # go if so 70989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_self(%ecx),%ecx # ecx<- glue->self 71089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 71189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 71289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 71389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_MONITOR_EXIT_continue 71489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 71589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 71689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 71789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_CHECK_CAST: /* 0x1f */ 71889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_CHECK_CAST.S */ 71989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 72089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Check to see if a cast from one class to another is allowed. 72189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 72289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* check-cast vAA, class@BBBB */ 72389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 72489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 72589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- vAA (object) 72689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 72789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 72889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rINST_FULL,rINST_FULL # is oject null? 72989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 73089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_CHECK_CAST_okay # null obj, cast always succeeds 73189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved class 73289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offObject_clazz(rINST_FULL),%ecx # ecx<- obj->clazz 73389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # have we resolved this before? 73489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_CHECK_CAST_resolve # no, go do it now 73589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_CHECK_CAST_resolved: 73689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl %eax,%ecx # same class (trivial success)? 73789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_CHECK_CAST_fullcheck # no, do full check 73889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_CHECK_CAST_okay: 73989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 74089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 74189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 74289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 74389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 74489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 74589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INSTANCE_OF: /* 0x20 */ 74689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INSTANCE_OF.S */ 74789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 74889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Check to see if an object reference is an instance of a class. 74989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 75089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Most common situation is a non-null object, being compared against 75189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * an already-resolved class. 75289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 75389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* instance-of vA, vB, class@CCCC */ 75489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 75589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%eax # eax<- B 75689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB (obj) 75789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 75889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # object null? 75989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 76089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 76189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_INSTANCE_OF_store # null obj, not instance, store it 76289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),rPC # rPC<- CCCC 76389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 76489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,rPC,4),%ecx # ecx<- resolved class 76589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- obj->clazz 76689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # have we resolved this before? 76789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_INSTANCE_OF_resolve # not resolved, do it now 76889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INSTANCE_OF_resolved: # eax<- obj->clazz, ecx<- resolved class 76989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl %eax,%ecx # same class (trivial success)? 77089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_INSTANCE_OF_trivial # yes, trivial finish 77189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_INSTANCE_OF_fullcheck # no, do full check 77289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 77389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 77489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 77589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_ARRAY_LENGTH: /* 0x21 */ 77689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_ARRAY_LENGTH.S */ 77789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 77889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Return the length of an array. 77989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 78089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 78189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 78289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,rINST_FULL) # ecx<- vB (object ref) 78389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%al # eax<- A 78489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # is null? 78589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject 78689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 78789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offArrayObject_length(%ecx),%ecx 78889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 78989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%ecx,%eax) 79089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 79189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 79289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 79389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 79489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_NEW_INSTANCE: /* 0x22 */ 79589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_NEW_INSTANCE.S */ 79689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 79789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Create a new instance of a class. 79889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 79989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* new-instance vAA, class@BBBB */ 80089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 80189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 80289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 80389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 80489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 80589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 80689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved class 80789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 80889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # resolved? 80989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_NEW_INSTANCE_resolve # no, go do it 81089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_NEW_INSTANCE_resolved: # on entry, ecx<- class 81189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpb $CLASS_INITIALIZED,offClassObject_status(%ecx) 81289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_NEW_INSTANCE_initialized 81389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_NEW_INSTANCE_needinit 81489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 81589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 81689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 81789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_NEW_ARRAY: /* 0x23 */ 81889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_NEW_ARRAY.S */ 81989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 82089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Allocate an array of objects, specified with the array class 82189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * and a count. 82289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 82389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * The verifier guarantees that this is an array class, so we don't 82489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * check for it here. 82589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 82689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* new-array vA, vB, class@CCCC */ 82789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 828cc05ad238516f1303687aba4a978e24e57c0c07aThe Android Open Source Project EXPORT_PC() 82989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 83089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- CCCC 83189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 83289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved class 83389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%eax 83489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%eax # eax<- B 83589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB (array length) 83689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL 83789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 83889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 83989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project js common_errNegativeArraySize # bail 84089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # already resolved? 84189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_NEW_ARRAY_finish # yes, fast path 84289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_NEW_ARRAY_resolve # resolve now 84389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 84489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 84589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 84689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_FILLED_NEW_ARRAY: /* 0x24 */ 84789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY.S */ 84889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 84989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Create a new array with elements filled from registers. 85089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 85189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: filled-new-array, filled-new-array/range 85289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 85389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 85489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, type@BBBB */ 85589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%eax) 85689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA or BA 85789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%eax),%eax # eax<- pDvmDex 85889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 85989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResClasses(%eax),%eax # eax<- pDvmDex->pResClasses 86089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 86189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved class 86289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 86389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # already resolved? 86489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_continue # yes, continue 86589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project # less frequent path, so we'll redo some work 86689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%eax) 86789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0,OUT_ARG2(%esp) # arg2<- false 86889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- BBBB 86989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 87089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_FILLED_NEW_ARRAY_more 87189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 87289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 87389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 87489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_FILLED_NEW_ARRAY_RANGE: /* 0x25 */ 87589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY_RANGE.S */ 87689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY.S */ 87789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 87889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Create a new array with elements filled from registers. 87989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 88089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: filled-new-array, filled-new-array/range 88189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 88289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 88389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, type@BBBB */ 88489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%eax) 88589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA or BA 88689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%eax),%eax # eax<- pDvmDex 88789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 88889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResClasses(%eax),%eax # eax<- pDvmDex->pResClasses 88989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 89089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved class 89189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 89289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # already resolved? 89389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_RANGE_continue # yes, continue 89489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project # less frequent path, so we'll redo some work 89589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%eax) 89689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0,OUT_ARG2(%esp) # arg2<- false 89789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- BBBB 89889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 89989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_FILLED_NEW_ARRAY_RANGE_more 90089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 90189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 90289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 90389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 90489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_FILL_ARRAY_DATA: /* 0x26 */ 90589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_FILL_ARRAY_DATA.S */ 90689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* fill-array-data vAA, +BBBBBBBB */ 90789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 2(rPC),%ecx # ecx<- BBBBbbbb 90889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 90989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal (rPC,%ecx,2),%ecx # ecx<- PC + BBBBbbbb*2 91089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) 91189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 91289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 91389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) 91489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 91589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmInterpHandleFillArrayData 91689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 91789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(3) 91889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # exception thrown? 91989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_exceptionThrown 92089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(3) 92189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 92289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 92389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 92489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 92589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_THROW: /* 0x27 */ 92689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_THROW.S */ 92789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 92889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Throw an exception object in the current thread. 92989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 93089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* throw vAA */ 93189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 93289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 93389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- exception object 93489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_self(%ecx),%ecx # ecx<- glue->self 93589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null object? 93689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject 93789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,offThread_exception(%ecx) # thread->exception<- obj 93889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 93989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 94089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 94189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 94289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_GOTO: /* 0x28 */ 94389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_GOTO.S */ 94489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 94589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Unconditional branch, 8-bit offset. 94689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 94789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * The branch distance is a signed code-unit offset, which we need to 94889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * double to get a byte offset. 94989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 95089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* goto +AA */ 95189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movsbl rINST_HI,rINST_FULL # ebx<- ssssssAA 95289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rINST_FULL,rINST_FULL # test for <0 95389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project js common_backwardBranch 95489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax 95589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_INDEXED(%eax) 95689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 95789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 95889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 95989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 96089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 96189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_GOTO_16: /* 0x29 */ 96289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_GOTO_16.S */ 96389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 96489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Unconditional branch, 16-bit offset. 96589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 96689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * The branch distance is a signed code-unit offset 96789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 96889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* goto/16 +AAAA */ 96989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),rINST_FULL # rINST_FULL<- ssssAAAA 97089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rINST_FULL,rINST_FULL # test for <0 97189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project js common_backwardBranch 97289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax 97389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_INDEXED(%eax) 97489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 97589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 97689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 97789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 97889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 97989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_GOTO_32: /* 0x2a */ 98089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_GOTO_32.S */ 98189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 98289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Unconditional branch, 32-bit offset. 98389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 98489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * The branch distance is a signed code-unit offset. 98589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 98689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Unlike most opcodes, this one is allowed to branch to itself, so 98789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * our "backward branch" test must be "<=0" instead of "<0". 98889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 98989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* goto/32 AAAAAAAA */ 99089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 2(rPC),rINST_FULL # rINST_FULL<- AAAAAAAA 99189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0,rINST_FULL # test for <= 0 99289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jle common_backwardBranch 99389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax 99489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_INDEXED(%eax) 99589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 99689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 99789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 99889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 99989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 100089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_PACKED_SWITCH: /* 0x2b */ 100189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_PACKED_SWITCH.S */ 100289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 100389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Handle a packed-switch or sparse-switch instruction. In both cases 100489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * we decode it and hand it off to a helper function. 100589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 100689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * We don't really expect backward branches in a switch statement, but 100789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * they're perfectly legal, so we check for them here. 100889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 100989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: packed-switch, sparse-switch 101089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 101189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, +BBBB */ 101289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 101389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 2(rPC),%ecx # ecx<- BBBBbbbb 101489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 101589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal (rPC,%ecx,2),%ecx # ecx<- PC + BBBBbbbb*2 101689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) # ARG1<- vAA 101789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # ARG0<- switchData 101889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 101989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmInterpHandlePackedSwitch 102089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 102189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 102289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,rINST_FULL # set up word offset 102389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jle common_backwardBranch # check on special actions 102489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC_INDEXED(rINST_FULL) 102589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST() 102689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 102789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 102889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 102989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 103089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SPARSE_SWITCH: /* 0x2c */ 103189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SPARSE_SWITCH.S */ 103289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_PACKED_SWITCH.S */ 103389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 103489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Handle a packed-switch or sparse-switch instruction. In both cases 103589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * we decode it and hand it off to a helper function. 103689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 103789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * We don't really expect backward branches in a switch statement, but 103889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * they're perfectly legal, so we check for them here. 103989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 104089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: packed-switch, sparse-switch 104189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 104289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, +BBBB */ 104389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 104489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 2(rPC),%ecx # ecx<- BBBBbbbb 104589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 104689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal (rPC,%ecx,2),%ecx # ecx<- PC + BBBBbbbb*2 104789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) # ARG1<- vAA 104889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # ARG0<- switchData 104989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 105089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmInterpHandleSparseSwitch 105189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 105289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 105389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,rINST_FULL # set up word offset 105489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jle common_backwardBranch # check on special actions 105589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC_INDEXED(rINST_FULL) 105689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST() 105789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 105889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 105989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 106089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 106189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 106289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_CMPL_FLOAT: /* 0x2d */ 106389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_CMPL_FLOAT.S */ 106489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 106589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 106689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 106789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 106889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 0 106989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,%eax,4) 107089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,%ecx,4) 107189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .else 107289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,%eax,4) 107389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,%ecx,4) 107489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 107589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL 107689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %ecx,%ecx 107789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 107889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fnstsw %ax 107989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sahf 108089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax 108189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 108289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jp .LOP_CMPL_FLOAT_isNaN 108389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_CMPL_FLOAT_finish 108489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sbbl %ecx,%ecx 108589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jb .LOP_CMPL_FLOAT_finish 108689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project incl %ecx 108789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_CMPL_FLOAT_finish: 108889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%ecx,%eax) 108989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 109089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 109189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 109289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 109389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 109489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 109589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_CMPG_FLOAT: /* 0x2e */ 109689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_CMPG_FLOAT.S */ 109789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 109889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 109989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 110089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 110189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 0 110289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,%eax,4) 110389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,%ecx,4) 110489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .else 110589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,%eax,4) 110689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,%ecx,4) 110789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 110889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL 110989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %ecx,%ecx 111089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 111189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fnstsw %ax 111289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sahf 111389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax 111489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 111589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jp .LOP_CMPG_FLOAT_isNaN 111689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_CMPG_FLOAT_finish 111789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sbbl %ecx,%ecx 111889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jb .LOP_CMPG_FLOAT_finish 111989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project incl %ecx 112089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_CMPG_FLOAT_finish: 112189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%ecx,%eax) 112289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 112389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 112489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 112589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 112689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 112789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 112889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_CMPL_DOUBLE: /* 0x2f */ 112989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_CMPL_DOUBLE.S */ 113089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 113189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 113289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 113389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 113489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 1 113589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,%eax,4) 113689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,%ecx,4) 113789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .else 113889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,%eax,4) 113989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,%ecx,4) 114089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 114189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL 114289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %ecx,%ecx 114389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 114489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fnstsw %ax 114589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sahf 114689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax 114789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 114889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jp .LOP_CMPL_DOUBLE_isNaN 114989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_CMPL_DOUBLE_finish 115089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sbbl %ecx,%ecx 115189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jb .LOP_CMPL_DOUBLE_finish 115289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project incl %ecx 115389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_CMPL_DOUBLE_finish: 115489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%ecx,%eax) 115589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 115689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 115789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 115889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 115989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 116089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 116189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_CMPG_DOUBLE: /* 0x30 */ 116289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 116389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 116489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 116589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 116689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 1 116789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,%eax,4) 116889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,%ecx,4) 116989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .else 117089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,%eax,4) 117189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,%ecx,4) 117289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 117389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL 117489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %ecx,%ecx 117589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 117689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fnstsw %ax 117789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sahf 117889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax 117989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 118089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jp .LOP_CMPG_DOUBLE_isNaN 118189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_CMPG_DOUBLE_finish 118289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sbbl %ecx,%ecx 118389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jb .LOP_CMPG_DOUBLE_finish 118489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project incl %ecx 118589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_CMPG_DOUBLE_finish: 118689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%ecx,%eax) 118789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 118889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 118989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 119089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 119189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 119289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_CMP_LONG: /* 0x31 */ 119389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_CMP_LONG.S */ 119489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 119589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Compare two 64-bit values. Puts 0, 1, or -1 into the destination 119689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * register based on the results of the comparison. 119789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 119889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* cmp-long vAA, vBB, vCC */ 119989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 120089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 120189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),rPC # rPC<- CC 120289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,%ecx,1) # eax<- v[BB+1] 120389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,0) # ecx<- v[BB+0] 120489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 120589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl 4(rFP,rPC,4),%eax 120689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jl .LOP_CMP_LONG_smaller 120789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jg .LOP_CMP_LONG_bigger 120889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sub (rFP,rPC,4),%ecx 120989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ja .LOP_CMP_LONG_bigger 121089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jb .LOP_CMP_LONG_smaller 121189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 121289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_CMP_LONG_finish 121389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 121489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 121589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 121689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IF_EQ: /* 0x32 */ 121789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IF_EQ.S */ 121889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/bincmp.S */ 121989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 122089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 122189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 122289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for "if-le" you would use "gt". 122389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 122489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 122589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 122689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 122789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 122889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx <- A 122989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 123089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 123189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 123289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 123389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $2,%eax # assume not taken 123489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne 1f 123589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rINST_FULL,rINST_FULL 123689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project js common_backwardBranch 123789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax 123889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project1: 123989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_INDEXED(%eax) 124089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 124189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 124289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 124389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 124489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 124589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 124689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 124789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IF_NE: /* 0x33 */ 124889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IF_NE.S */ 124989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/bincmp.S */ 125089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 125189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 125289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 125389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for "if-le" you would use "gt". 125489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 125589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 125689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 125789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 125889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 125989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx <- A 126089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 126189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 126289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 126389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 126489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $2,%eax # assume not taken 126589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je 1f 126689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rINST_FULL,rINST_FULL 126789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project js common_backwardBranch 126889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax 126989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project1: 127089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_INDEXED(%eax) 127189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 127289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 127389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 127489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 127589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 127689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 127789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 127889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IF_LT: /* 0x34 */ 127989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IF_LT.S */ 128089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/bincmp.S */ 128189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 128289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 128389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 128489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for "if-le" you would use "gt". 128589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 128689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 128789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 128889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 128989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 129089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx <- A 129189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 129289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 129389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 129489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 129589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $2,%eax # assume not taken 129689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jge 1f 129789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rINST_FULL,rINST_FULL 129889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project js common_backwardBranch 129989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax 130089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project1: 130189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_INDEXED(%eax) 130289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 130389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 130489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 130589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 130689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 130789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 130889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 130989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IF_GE: /* 0x35 */ 131089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IF_GE.S */ 131189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/bincmp.S */ 131289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 131389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 131489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 131589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for "if-le" you would use "gt". 131689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 131789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 131889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 131989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 132089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 132189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx <- A 132289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 132389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 132489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 132589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 132689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $2,%eax # assume not taken 132789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jl 1f 132889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rINST_FULL,rINST_FULL 132989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project js common_backwardBranch 133089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax 133189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project1: 133289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_INDEXED(%eax) 133389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 133489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 133589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 133689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 133789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 133889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 133989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 134089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IF_GT: /* 0x36 */ 134189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IF_GT.S */ 134289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/bincmp.S */ 134389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 134489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 134589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 134689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for "if-le" you would use "gt". 134789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 134889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 134989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 135089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 135189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 135289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx <- A 135389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 135489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 135589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 135689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 135789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $2,%eax # assume not taken 135889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jle 1f 135989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rINST_FULL,rINST_FULL 136089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project js common_backwardBranch 136189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax 136289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project1: 136389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_INDEXED(%eax) 136489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 136589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 136689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 136789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 136889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 136989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 137089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 137189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IF_LE: /* 0x37 */ 137289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IF_LE.S */ 137389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/bincmp.S */ 137489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 137589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 137689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 137789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for "if-le" you would use "gt". 137889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 137989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 138089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 138189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 138289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 138389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx <- A 138489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 138589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 138689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 138789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 138889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $2,%eax # assume not taken 138989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jg 1f 139089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rINST_FULL,rINST_FULL 139189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project js common_backwardBranch 139289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax 139389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project1: 139489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_INDEXED(%eax) 139589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 139689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 139789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 139889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 139989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 140089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 140189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 140289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IF_EQZ: /* 0x38 */ 140389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IF_EQZ.S */ 140489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/zcmp.S */ 140589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 140689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 140789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 140889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for "if-le" you would use "gt". 140989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 141089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 141189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 141289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* if-cmp vAA, +BBBB */ 141389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 141489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 141589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 141689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $2,%eax # assume branch not taken 141789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne 1f 141889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rINST_FULL,rINST_FULL 141989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project js common_backwardBranch 142089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax 142189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project1: 142289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_INDEXED(%eax) 142389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 142489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 142589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 142689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 142789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 142889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 142989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 143089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IF_NEZ: /* 0x39 */ 143189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IF_NEZ.S */ 143289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/zcmp.S */ 143389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 143489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 143589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 143689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for "if-le" you would use "gt". 143789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 143889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 143989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 144089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* if-cmp vAA, +BBBB */ 144189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 144289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 144389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 144489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $2,%eax # assume branch not taken 144589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je 1f 144689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rINST_FULL,rINST_FULL 144789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project js common_backwardBranch 144889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax 144989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project1: 145089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_INDEXED(%eax) 145189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 145289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 145389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 145489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 145589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 145689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 145789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 145889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IF_LTZ: /* 0x3a */ 145989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IF_LTZ.S */ 146089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/zcmp.S */ 146189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 146289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 146389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 146489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for "if-le" you would use "gt". 146589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 146689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 146789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 146889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* if-cmp vAA, +BBBB */ 146989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 147089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 147189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 147289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $2,%eax # assume branch not taken 147389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jge 1f 147489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rINST_FULL,rINST_FULL 147589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project js common_backwardBranch 147689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax 147789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project1: 147889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_INDEXED(%eax) 147989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 148089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 148189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 148289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 148389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 148489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 148589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 148689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IF_GEZ: /* 0x3b */ 148789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IF_GEZ.S */ 148889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/zcmp.S */ 148989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 149089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 149189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 149289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for "if-le" you would use "gt". 149389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 149489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 149589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 149689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* if-cmp vAA, +BBBB */ 149789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 149889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 149989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 150089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $2,%eax # assume branch not taken 150189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jl 1f 150289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rINST_FULL,rINST_FULL 150389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project js common_backwardBranch 150489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax 150589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project1: 150689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_INDEXED(%eax) 150789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 150889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 150989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 151089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 151189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 151289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 151389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 151489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IF_GTZ: /* 0x3c */ 151589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IF_GTZ.S */ 151689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/zcmp.S */ 151789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 151889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 151989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 152089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for "if-le" you would use "gt". 152189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 152289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 152389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 152489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* if-cmp vAA, +BBBB */ 152589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 152689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 152789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 152889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $2,%eax # assume branch not taken 152989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jle 1f 153089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rINST_FULL,rINST_FULL 153189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project js common_backwardBranch 153289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax 153389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project1: 153489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_INDEXED(%eax) 153589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 153689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 153789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 153889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 153989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 154089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 154189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 154289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IF_LEZ: /* 0x3d */ 154389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IF_LEZ.S */ 154489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/zcmp.S */ 154589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 154689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 154789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 154889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for "if-le" you would use "gt". 154989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 155089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 155189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 155289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* if-cmp vAA, +BBBB */ 155389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 155489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 155589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 155689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $2,%eax # assume branch not taken 155789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jg 1f 155889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rINST_FULL,rINST_FULL 155989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project js common_backwardBranch 156089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax 156189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project1: 156289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_INDEXED(%eax) 156389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 156489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 156589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 156689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 156789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 156889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 156989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 157089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_3E: /* 0x3e */ 157189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_3E.S */ 157289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 157389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 157489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 157589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 157689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 157789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 157889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_3F: /* 0x3f */ 157989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_3F.S */ 158089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 158189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 158289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 158389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 158489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 158589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 158689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_40: /* 0x40 */ 158789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_40.S */ 158889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 158989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 159089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 159189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 159289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 159389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 159489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_41: /* 0x41 */ 159589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_41.S */ 159689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 159789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 159889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 159989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 160089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 160189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 160289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_42: /* 0x42 */ 160389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_42.S */ 160489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 160589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 160689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 160789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 160889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 160989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 161089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_43: /* 0x43 */ 161189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_43.S */ 161289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 161389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 161489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 161589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 161689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 161789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 161889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_AGET: /* 0x44 */ 161989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_AGET.S */ 162089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 162189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 162289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 162389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 162489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 162589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, vBB, vCC */ 162689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 162789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 162889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 162989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 163089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 163189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null array object? 163289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # bail if so 163389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 163489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jae common_errArrayIndex # index >= length, bail 163589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offArrayObject_contents(%eax,%ecx,4),%eax 163689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%ecx 163789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 163889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 163989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 164089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 164189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 164289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 164389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 164489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 164589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_AGET_WIDE: /* 0x45 */ 164689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_AGET_WIDE.S */ 164789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 164889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Array get, 64 bits. vAA <- vBB[vCC]. 164989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 165089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 165189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, vBB, vCC */ 165289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 165389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 165489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 165589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 165689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 165789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null array object? 165889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # bail if so 165989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 166089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jb .LOP_AGET_WIDE_finish # index < length, OK 166189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_errArrayIndex # index >= length, bail 166289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 166389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 166489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 166589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_AGET_OBJECT: /* 0x46 */ 166689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_AGET_OBJECT.S */ 166789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_AGET.S */ 166889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 166989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 167089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 167189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 167289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 167389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, vBB, vCC */ 167489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 167589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 167689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 167789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 167889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 167989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null array object? 168089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # bail if so 168189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 168289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jae common_errArrayIndex # index >= length, bail 168389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offArrayObject_contents(%eax,%ecx,4),%eax 168489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%ecx 168589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 168689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 168789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 168889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 168989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 169089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 169189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 169289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 169389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 169489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_AGET_BOOLEAN: /* 0x47 */ 169589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_AGET_BOOLEAN.S */ 169689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_AGET.S */ 169789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 169889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 169989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 170089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 170189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 170289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, vBB, vCC */ 170389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 170489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 170589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 170689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 170789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 170889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null array object? 170989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # bail if so 171089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 171189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jae common_errArrayIndex # index >= length, bail 171289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl offArrayObject_contents(%eax,%ecx,1),%eax 171389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%ecx 171489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 171589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 171689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 171789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 171889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 171989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 172089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 172189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 172289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 172389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_AGET_BYTE: /* 0x48 */ 172489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_AGET_BYTE.S */ 172589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_AGET.S */ 172689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 172789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 172889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 172989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 173089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 173189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, vBB, vCC */ 173289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 173389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 173489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 173589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 173689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 173789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null array object? 173889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # bail if so 173989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 174089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jae common_errArrayIndex # index >= length, bail 174189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movsbl offArrayObject_contents(%eax,%ecx,1),%eax 174289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%ecx 174389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 174489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 174589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 174689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 174789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 174889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 174989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 175089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 175189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 175289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_AGET_CHAR: /* 0x49 */ 175389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_AGET_CHAR.S */ 175489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_AGET.S */ 175589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 175689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 175789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 175889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 175989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 176089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, vBB, vCC */ 176189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 176289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 176389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 176489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 176589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 176689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null array object? 176789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # bail if so 176889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 176989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jae common_errArrayIndex # index >= length, bail 177089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl offArrayObject_contents(%eax,%ecx,2),%eax 177189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%ecx 177289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 177389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 177489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 177589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 177689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 177789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 177889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 177989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 178089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 178189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_AGET_SHORT: /* 0x4a */ 178289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_AGET_SHORT.S */ 178389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_AGET.S */ 178489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 178589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 178689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 178789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 178889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 178989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, vBB, vCC */ 179089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 179189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 179289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 179389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 179489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 179589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null array object? 179689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # bail if so 179789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 179889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jae common_errArrayIndex # index >= length, bail 179989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl offArrayObject_contents(%eax,%ecx,2),%eax 180089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%ecx 180189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 180289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 180389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 180489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 180589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 180689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 180789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 180889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 180989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 181089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_APUT: /* 0x4b */ 181189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_APUT.S */ 181289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 181389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 181489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 181589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 181689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 181789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, vBB, vCC */ 181889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 181989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 182089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 182189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 182289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 182389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null array object? 182489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # bail if so 182589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 182689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jae common_errArrayIndex # index >= length, bail 182789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,4),%eax 182889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 182989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 183089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,(%eax) 183189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 183289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 183389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 183489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 183589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 183689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 183789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_APUT_WIDE: /* 0x4c */ 183889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_APUT_WIDE.S */ 183989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 184089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Array put, 64 bits. vBB[vCC]<-vAA. 184189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 184289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 184389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, vBB, vCC */ 184489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 184589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 184689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 184789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 184889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 184989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null array object? 185089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # bail if so 185189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 185289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jb .LOP_APUT_WIDE_finish # index < length, OK 185389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_errArrayIndex # index >= length, bail 185489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 185589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 185689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 185789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_APUT_OBJECT: /* 0x4d */ 185889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_APUT_OBJECT.S */ 185989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 186089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 186189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 186289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 186389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 186489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, vBB, vCC */ 186589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 186689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 186789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 186889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 186989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 187089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- vAA 187189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null array object? 187289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # bail if so 187389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 187489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jb .LOP_APUT_OBJECT_continue 187589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_errArrayIndex # index >= length, bail 187689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 187789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 187889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 187989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_APUT_BOOLEAN: /* 0x4e */ 188089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_APUT_BOOLEAN.S */ 188189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_APUT.S */ 188289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 188389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 188489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 188589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 188689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 188789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, vBB, vCC */ 188889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 188989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 189089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 189189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 189289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 189389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null array object? 189489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # bail if so 189589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 189689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jae common_errArrayIndex # index >= length, bail 189789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,1),%eax 189889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 189989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 190089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movb %cl,(%eax) 190189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 190289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 190389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 190489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 190589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 190689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 190789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 190889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_APUT_BYTE: /* 0x4f */ 190989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_APUT_BYTE.S */ 191089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_APUT.S */ 191189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 191289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 191389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 191489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 191589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 191689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, vBB, vCC */ 191789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 191889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 191989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 192089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 192189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 192289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null array object? 192389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # bail if so 192489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 192589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jae common_errArrayIndex # index >= length, bail 192689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,1),%eax 192789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 192889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 192989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movb %cl,(%eax) 193089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 193189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 193289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 193389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 193489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 193589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 193689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 193789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_APUT_CHAR: /* 0x50 */ 193889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_APUT_CHAR.S */ 193989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_APUT.S */ 194089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 194189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 194289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 194389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 194489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 194589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, vBB, vCC */ 194689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 194789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 194889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 194989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 195089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 195189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null array object? 195289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # bail if so 195389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 195489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jae common_errArrayIndex # index >= length, bail 195589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,2),%eax 195689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 195789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 195889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movw %cx,(%eax) 195989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 196089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 196189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 196289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 196389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 196489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 196589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 196689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_APUT_SHORT: /* 0x51 */ 196789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_APUT_SHORT.S */ 196889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_APUT.S */ 196989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 197089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 197189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 197289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 197389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 197489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, vBB, vCC */ 197589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 197689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 197789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 197889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 197989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 198089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null array object? 198189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # bail if so 198289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 198389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jae common_errArrayIndex # index >= length, bail 198489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,2),%eax 198589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 198689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 198789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movw %cx,(%eax) 198889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 198989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 199089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 199189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 199289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 199389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 199489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 199589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IGET: /* 0x52 */ 199689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IGET.S */ 199789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 199889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit instance field get. 199989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 200089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 200189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 200289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB, field@CCCC */ 200389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 200489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rIBASE) # need another reg 200589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 200689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 200789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 200889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 200989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 201089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 201189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 201289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 201389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 201489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # is resolved entry null? 201589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IGET_finish # no, already resolved 201689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 201789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(rIBASE) 201889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_IGET_resolve 201989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 202089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 202189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 202289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IGET_WIDE: /* 0x53 */ 202389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IGET_WIDE.S */ 202489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 202589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 64-bit instance field get. 202689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 202789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 202889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB, field@CCCC */ 202989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 203089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rIBASE) # need another reg 203189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 203289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 203389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 203489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 203589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 203689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 203789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 203889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 203989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 204089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # is resolved entry null? 204189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IGET_WIDE_finish # no, already resolved 204289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 204389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(rIBASE) 204489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_IGET_WIDE_resolve 204589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 204689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 204789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 204889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IGET_OBJECT: /* 0x54 */ 204989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IGET_OBJECT.S */ 205089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IGET.S */ 205189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 205289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit instance field get. 205389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 205489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 205589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 205689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB, field@CCCC */ 205789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 205889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rIBASE) # need another reg 205989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 206089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 206189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 206289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 206389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 206489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 206589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 206689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 206789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 206889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # is resolved entry null? 206989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IGET_OBJECT_finish # no, already resolved 207089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 207189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(rIBASE) 207289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_IGET_OBJECT_resolve 207389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 207489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 207589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 207689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 207789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IGET_BOOLEAN: /* 0x55 */ 207889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IGET_BOOLEAN.S */ 207989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IGET.S */ 208089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 208189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit instance field get. 208289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 208389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 208489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 208589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB, field@CCCC */ 208689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 208789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rIBASE) # need another reg 208889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 208989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 209089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 209189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 209289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 209389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 209489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 209589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 209689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 209789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # is resolved entry null? 209889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IGET_BOOLEAN_finish # no, already resolved 209989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 210089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(rIBASE) 210189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_IGET_BOOLEAN_resolve 210289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 210389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 210489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 210589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 210689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IGET_BYTE: /* 0x56 */ 210789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IGET_BYTE.S */ 210889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IGET.S */ 210989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 211089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit instance field get. 211189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 211289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 211389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 211489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB, field@CCCC */ 211589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 211689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rIBASE) # need another reg 211789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 211889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 211989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 212089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 212189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 212289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 212389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 212489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 212589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 212689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # is resolved entry null? 212789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IGET_BYTE_finish # no, already resolved 212889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 212989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(rIBASE) 213089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_IGET_BYTE_resolve 213189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 213289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 213389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 213489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 213589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IGET_CHAR: /* 0x57 */ 213689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IGET_CHAR.S */ 213789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IGET.S */ 213889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 213989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit instance field get. 214089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 214189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 214289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 214389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB, field@CCCC */ 214489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 214589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rIBASE) # need another reg 214689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 214789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 214889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 214989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 215089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 215189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 215289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 215389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 215489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 215589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # is resolved entry null? 215689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IGET_CHAR_finish # no, already resolved 215789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 215889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(rIBASE) 215989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_IGET_CHAR_resolve 216089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 216189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 216289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 216389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 216489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IGET_SHORT: /* 0x58 */ 216589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IGET_SHORT.S */ 216689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IGET.S */ 216789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 216889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit instance field get. 216989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 217089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 217189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 217289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB, field@CCCC */ 217389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 217489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rIBASE) # need another reg 217589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 217689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 217789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 217889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 217989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 218089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 218189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 218289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 218389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 218489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # is resolved entry null? 218589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IGET_SHORT_finish # no, already resolved 218689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 218789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(rIBASE) 218889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_IGET_SHORT_resolve 218989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 219089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 219189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 219289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 219389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IPUT: /* 0x59 */ 219489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IPUT.S */ 219589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 219689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 219789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit instance field put. 219889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 219989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 220089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 220189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB, field@CCCC */ 220289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 220389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rIBASE) # need another reg 220489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 220589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 220689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 220789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 220889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 220989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 221089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 221189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 221289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 221389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # is resolved entry null? 221489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IPUT_finish # no, already resolved 221589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 221689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(rIBASE) 221789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_IPUT_resolve 221889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 221989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 222089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 222189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IPUT_WIDE: /* 0x5a */ 222289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IPUT_WIDE.S */ 222389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 222489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 64-bit instance field put. 222589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 222689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 222789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB, field@CCCC */ 222889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 222989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rIBASE) # need another reg 223089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 223189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 223289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 223389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 223489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 223589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 223689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 223789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 223889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 223989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # is resolved entry null? 224089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IPUT_WIDE_finish # no, already resolved 224189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 224289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(rIBASE) 224389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_IPUT_WIDE_resolve 224489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 224589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 224689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 224789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IPUT_OBJECT: /* 0x5b */ 224889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IPUT_OBJECT.S */ 224989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IPUT.S */ 225089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 225189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 225289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit instance field put. 225389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 225489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 225589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 225689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB, field@CCCC */ 225789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 225889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rIBASE) # need another reg 225989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 226089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 226189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 226289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 226389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 226489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 226589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 226689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 226789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 226889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # is resolved entry null? 226989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IPUT_OBJECT_finish # no, already resolved 227089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 227189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(rIBASE) 227289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_IPUT_OBJECT_resolve 227389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 227489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 227589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 227689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 227789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IPUT_BOOLEAN: /* 0x5c */ 227889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IPUT_BOOLEAN.S */ 227989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IPUT.S */ 228089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 228189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 228289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit instance field put. 228389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 228489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 228589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 228689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB, field@CCCC */ 228789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 228889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rIBASE) # need another reg 228989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 229089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 229189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 229289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 229389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 229489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 229589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 229689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 229789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 229889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # is resolved entry null? 229989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IPUT_BOOLEAN_finish # no, already resolved 230089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 230189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(rIBASE) 230289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_IPUT_BOOLEAN_resolve 230389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 230489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 230589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 230689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 230789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IPUT_BYTE: /* 0x5d */ 230889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IPUT_BYTE.S */ 230989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IPUT.S */ 231089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 231189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 231289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit instance field put. 231389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 231489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 231589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 231689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB, field@CCCC */ 231789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 231889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rIBASE) # need another reg 231989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 232089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 232189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 232289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 232389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 232489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 232589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 232689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 232789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 232889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # is resolved entry null? 232989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IPUT_BYTE_finish # no, already resolved 233089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 233189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(rIBASE) 233289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_IPUT_BYTE_resolve 233389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 233489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 233589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 233689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 233789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IPUT_CHAR: /* 0x5e */ 233889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IPUT_CHAR.S */ 233989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IPUT.S */ 234089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 234189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 234289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit instance field put. 234389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 234489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 234589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 234689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB, field@CCCC */ 234789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 234889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rIBASE) # need another reg 234989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 235089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 235189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 235289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 235389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 235489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 235589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 235689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 235789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 235889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # is resolved entry null? 235989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IPUT_CHAR_finish # no, already resolved 236089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 236189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(rIBASE) 236289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_IPUT_CHAR_resolve 236389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 236489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 236589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 236689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 236789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IPUT_SHORT: /* 0x5f */ 236889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IPUT_SHORT.S */ 236989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IPUT.S */ 237089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 237189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 237289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit instance field put. 237389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 237489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 237589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 237689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB, field@CCCC */ 237789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 237889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rIBASE) # need another reg 237989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 238089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 238189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 238289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 238389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 238489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 238589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 238689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 238789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 238889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # is resolved entry null? 238989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IPUT_SHORT_finish # no, already resolved 239089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 239189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(rIBASE) 239289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_IPUT_SHORT_resolve 239389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 239489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 239589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 239689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 239789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SGET: /* 0x60 */ 239889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SGET.S */ 239989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 240089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit SGET handler. 240189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 240289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 240389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 240489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, field@BBBB */ 240589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 240689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 240789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 240889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 240989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 241089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # resolved entry null? 241189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_SGET_resolve # if not, make it so 241289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SGET_finish: # field ptr in eax 241389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offStaticField_value(%eax),%eax 241489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 241589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 241689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 241789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 241889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 241989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 242089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 242189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 242289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SGET_WIDE: /* 0x61 */ 242389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SGET_WIDE.S */ 242489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 242589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 64-bit SGET handler. 242689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 242789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 242889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* sget-wide vAA, field@BBBB */ 242989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 243089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 243189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 243289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 243389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 243489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # resolved entry null? 243589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_SGET_WIDE_resolve # if not, make it so 243689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SGET_WIDE_finish: # field ptr in eax 243789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offStaticField_value(%eax),%ecx # ecx<- lsw 243889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 4+offStaticField_value(%eax),%eax # eax<- msw 243989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 244089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,0) 244189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) 244289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 244389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 244489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 244589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 244689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 244789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 244889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SGET_OBJECT: /* 0x62 */ 244989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SGET_OBJECT.S */ 245089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SGET.S */ 245189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 245289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit SGET handler. 245389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 245489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 245589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 245689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, field@BBBB */ 245789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 245889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 245989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 246089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 246189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 246289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # resolved entry null? 246389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_SGET_OBJECT_resolve # if not, make it so 246489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SGET_OBJECT_finish: # field ptr in eax 246589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offStaticField_value(%eax),%eax 246689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 246789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 246889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 246989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 247089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 247189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 247289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 247389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 247489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 247589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SGET_BOOLEAN: /* 0x63 */ 247689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SGET_BOOLEAN.S */ 247789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SGET.S */ 247889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 247989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit SGET handler. 248089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 248189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 248289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 248389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, field@BBBB */ 248489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 248589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 248689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 248789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 248889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 248989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # resolved entry null? 249089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_SGET_BOOLEAN_resolve # if not, make it so 249189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SGET_BOOLEAN_finish: # field ptr in eax 249289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offStaticField_value(%eax),%eax 249389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 249489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 249589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 249689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 249789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 249889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 249989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 250089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 250189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 250289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SGET_BYTE: /* 0x64 */ 250389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SGET_BYTE.S */ 250489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SGET.S */ 250589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 250689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit SGET handler. 250789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 250889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 250989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 251089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, field@BBBB */ 251189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 251289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 251389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 251489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 251589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 251689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # resolved entry null? 251789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_SGET_BYTE_resolve # if not, make it so 251889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SGET_BYTE_finish: # field ptr in eax 251989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offStaticField_value(%eax),%eax 252089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 252189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 252289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 252389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 252489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 252589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 252689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 252789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 252889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 252989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SGET_CHAR: /* 0x65 */ 253089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SGET_CHAR.S */ 253189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SGET.S */ 253289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 253389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit SGET handler. 253489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 253589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 253689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 253789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, field@BBBB */ 253889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 253989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 254089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 254189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 254289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 254389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # resolved entry null? 254489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_SGET_CHAR_resolve # if not, make it so 254589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SGET_CHAR_finish: # field ptr in eax 254689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offStaticField_value(%eax),%eax 254789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 254889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 254989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 255089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 255189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 255289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 255389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 255489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 255589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 255689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SGET_SHORT: /* 0x66 */ 255789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SGET_SHORT.S */ 255889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SGET.S */ 255989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 256089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit SGET handler. 256189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 256289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 256389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 256489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, field@BBBB */ 256589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 256689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 256789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 256889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 256989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 257089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # resolved entry null? 257189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_SGET_SHORT_resolve # if not, make it so 257289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SGET_SHORT_finish: # field ptr in eax 257389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offStaticField_value(%eax),%eax 257489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 257589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 257689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 257789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 257889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 257989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 258089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 258189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 258289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 258389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SPUT: /* 0x67 */ 258489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SPUT.S */ 258589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 258689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit SPUT handler. 258789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 258889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 258989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 259089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, field@BBBB */ 259189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 259289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 259389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 259489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 259589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 259689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # resolved entry null? 259789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_SPUT_resolve # if not, make it so 259889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SPUT_finish: # field ptr in eax 259989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 260089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) 260189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 260289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,offStaticField_value(%eax) 260389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 260489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 260589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 260689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 260789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 260889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SPUT_WIDE: /* 0x68 */ 260989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SPUT_WIDE.S */ 261089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 261189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit SPUT handler. 261289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 261389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 261489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 261589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, field@BBBB */ 261689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 261789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 261889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 261989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 262089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 262189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # resolved entry null? 262289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_SPUT_WIDE_resolve # if not, make it so 262389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SPUT_WIDE_finish: # field ptr in eax 262489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 262589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rINST_FULL,%ecx,0) # rINST_FULL<- lsw 262689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # ecx<- msw 262789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,offStaticField_value(%eax) 262889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 262989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 263089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,4+offStaticField_value(%eax) 263189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 263289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 263389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 263489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 263589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SPUT_OBJECT: /* 0x69 */ 263689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SPUT_OBJECT.S */ 263789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SPUT.S */ 263889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 263989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit SPUT handler. 264089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 264189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 264289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 264389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, field@BBBB */ 264489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 264589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 264689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 264789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 264889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 264989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # resolved entry null? 265089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_SPUT_OBJECT_resolve # if not, make it so 265189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SPUT_OBJECT_finish: # field ptr in eax 265289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 265389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) 265489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 265589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,offStaticField_value(%eax) 265689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 265789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 265889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 265989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 266089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 266189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 266289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SPUT_BOOLEAN: /* 0x6a */ 266389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SPUT_BOOLEAN.S */ 266489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SPUT.S */ 266589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 266689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit SPUT handler. 266789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 266889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 266989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 267089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, field@BBBB */ 267189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 267289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 267389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 267489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 267589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 267689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # resolved entry null? 267789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_SPUT_BOOLEAN_resolve # if not, make it so 267889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SPUT_BOOLEAN_finish: # field ptr in eax 267989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 268089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) 268189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 268289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,offStaticField_value(%eax) 268389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 268489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 268589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 268689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 268789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 268889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 268989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SPUT_BYTE: /* 0x6b */ 269089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SPUT_BYTE.S */ 269189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SPUT.S */ 269289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 269389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit SPUT handler. 269489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 269589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 269689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 269789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, field@BBBB */ 269889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 269989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 270089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 270189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 270289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 270389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # resolved entry null? 270489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_SPUT_BYTE_resolve # if not, make it so 270589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SPUT_BYTE_finish: # field ptr in eax 270689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 270789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) 270889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 270989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,offStaticField_value(%eax) 271089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 271189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 271289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 271389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 271489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 271589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 271689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SPUT_CHAR: /* 0x6c */ 271789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SPUT_CHAR.S */ 271889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SPUT.S */ 271989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 272089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit SPUT handler. 272189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 272289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 272389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 272489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, field@BBBB */ 272589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 272689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 272789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 272889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 272989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 273089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # resolved entry null? 273189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_SPUT_CHAR_resolve # if not, make it so 273289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SPUT_CHAR_finish: # field ptr in eax 273389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 273489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) 273589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 273689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,offStaticField_value(%eax) 273789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 273889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 273989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 274089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 274189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 274289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 274389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SPUT_SHORT: /* 0x6d */ 274489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SPUT_SHORT.S */ 274589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SPUT.S */ 274689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 274789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * General 32-bit SPUT handler. 274889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 274989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 275089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 275189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, field@BBBB */ 275289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 275389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 275489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 275589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 275689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 275789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # resolved entry null? 275889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_SPUT_SHORT_resolve # if not, make it so 275989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SPUT_SHORT_finish: # field ptr in eax 276089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 276189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) 276289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 276389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,offStaticField_value(%eax) 276489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 276589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 276689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 276789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 276889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 276989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 277089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INVOKE_VIRTUAL: /* 0x6e */ 277189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL.S */ 277289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 277389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 277489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Handle a virtual method call. 277589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 277689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: invoke-virtual, invoke-virtual/range 277789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 277889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 277989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 278089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%eax) 278189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 278289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%eax),%eax # eax<- pDvmDex 278389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 278489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResMethods(%eax),%eax # eax<- pDvmDex->pResMethods 278589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved baseMethod 278689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # already resolved? 278789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_continue # yes, continue 278889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%eax) 278989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 279089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 279189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 279289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_INVOKE_VIRTUAL_more 279389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 279489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 279589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 279689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INVOKE_SUPER: /* 0x6f */ 279789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_SUPER.S */ 279889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 279989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Handle a "super" method call. 280089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 280189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: invoke-super, invoke-super/range 280289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 280389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 280489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 280589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(rINST_FULL) 280689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 280789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(rINST_FULL),%ecx # ecx<- pDvmDex 280889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 280989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 281089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved baseMethod 281189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(rINST_FULL),%eax # eax<- method 281289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 4(rPC),rINST_FULL # rINST_FULL<- GFED or CCCC 281389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if (!0) 281489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl $0xf,rINST_FULL # rINST_FULL<- D (or stays CCCC) 281589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 281689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- "this" ptr 281789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rINST_FULL,rINST_FULL # null "this"? 281889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # yes, throw 281989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 282089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # already resolved? 282189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_INVOKE_SUPER_continue # yes - go on 282289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_INVOKE_SUPER_resolve 282389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 282489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 282589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 282689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INVOKE_DIRECT: /* 0x70 */ 282789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT.S */ 282889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 282989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Handle a direct method call. 283089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 283189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * (We could defer the "is 'this' pointer null" test to the common 283289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * method invocation code, and use a flag to indicate that static 283389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * calls don't count. If we do this as part of copying the arguments 283489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * out we could avoiding loading the first arg twice.) 283589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 283689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: invoke-direct, invoke-direct/range 283789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 283889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 283989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 284089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 284189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 284289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 284389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 284489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 284589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 284689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 4(rPC),rPC # rPC<- GFED or CCCC 284789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 284889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if (!0) 284989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl $0xf,rPC # rPC<- D (or stays CCCC) 285089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 285189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # already resolved? 285289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,rPC) # ecx<- "this" ptr 285389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_INVOKE_DIRECT_resolve # not resolved, do it now 285489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INVOKE_DIRECT_finish: 285589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 285689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # null "this"? 2857c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodNoRange # no, continue on 285889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_errNullObject 285989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 286089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 286189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 286289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INVOKE_STATIC: /* 0x71 */ 286389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_STATIC.S */ 286489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 286589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Handle a static method call. 286689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 286789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: invoke-static, invoke-static/range 286889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 286989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 287089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 287189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 287289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 287389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 287489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 287589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 287689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 287789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 2878c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodNoRange 287989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 288089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 288189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax 288289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx# ecx<- method->clazz 288389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 288489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- clazz 288589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_INVOKE_STATIC_continue 288689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 288789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 288889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 288989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INVOKE_INTERFACE: /* 0x72 */ 289089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE.S */ 289189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 289289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Handle an interface method call. 289389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 289489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: invoke-interface, invoke-interface/range 289589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 289689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 289789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 289889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 289989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 290089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if (!0) 290189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 290289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 290389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- "this" 290489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 290589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null this? 290689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # yes, fail 290789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offObject_clazz(%eax),%eax# eax<- thisPtr->clazz 290889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- class 290989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- methodClassDex 291089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- method 291189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG3(%esp) # arg3<- dex 291289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 291389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG2(%esp) # arg2<- method 291489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 291589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 291689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_INVOKE_INTERFACE_continue 291789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 291889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 291989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 292089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_73: /* 0x73 */ 292189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_73.S */ 292289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 292389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 292489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 292589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 292689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 292789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 292889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INVOKE_VIRTUAL_RANGE: /* 0x74 */ 292989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_RANGE.S */ 293089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL.S */ 293189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 293289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 293389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Handle a virtual method call. 293489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 293589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: invoke-virtual, invoke-virtual/range 293689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 293789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 293889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 293989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%eax) 294089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 294189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%eax),%eax # eax<- pDvmDex 294289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 294389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResMethods(%eax),%eax # eax<- pDvmDex->pResMethods 294489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved baseMethod 294589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # already resolved? 294689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_RANGE_continue # yes, continue 294789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%eax) 294889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 294989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 295089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 295189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_INVOKE_VIRTUAL_RANGE_more 295289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 295389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 295489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 295589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 295689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INVOKE_SUPER_RANGE: /* 0x75 */ 295789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_RANGE.S */ 295889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_SUPER.S */ 295989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 296089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Handle a "super" method call. 296189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 296289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: invoke-super, invoke-super/range 296389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 296489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 296589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 296689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(rINST_FULL) 296789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 296889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(rINST_FULL),%ecx # ecx<- pDvmDex 296989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 297089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 297189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved baseMethod 297289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(rINST_FULL),%eax # eax<- method 297389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 4(rPC),rINST_FULL # rINST_FULL<- GFED or CCCC 297489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if (!1) 297589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl $0xf,rINST_FULL # rINST_FULL<- D (or stays CCCC) 297689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 297789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- "this" ptr 297889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rINST_FULL,rINST_FULL # null "this"? 297989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # yes, throw 298089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 298189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # already resolved? 298289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_INVOKE_SUPER_RANGE_continue # yes - go on 298389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_INVOKE_SUPER_RANGE_resolve 298489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 298589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 298689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 298789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 298889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INVOKE_DIRECT_RANGE: /* 0x76 */ 298989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT_RANGE.S */ 299089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT.S */ 299189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 299289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Handle a direct method call. 299389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 299489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * (We could defer the "is 'this' pointer null" test to the common 299589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * method invocation code, and use a flag to indicate that static 299689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * calls don't count. If we do this as part of copying the arguments 299789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * out we could avoiding loading the first arg twice.) 299889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 299989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: invoke-direct, invoke-direct/range 300089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 300189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 300289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 300389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 300489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 300589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 300689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 300789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 300889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 300989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 4(rPC),rPC # rPC<- GFED or CCCC 301089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 301189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if (!1) 301289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl $0xf,rPC # rPC<- D (or stays CCCC) 301389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 301489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # already resolved? 301589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,rPC) # ecx<- "this" ptr 301689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_INVOKE_DIRECT_RANGE_resolve # not resolved, do it now 301789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INVOKE_DIRECT_RANGE_finish: 301889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 301989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # null "this"? 3020c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodRange # no, continue on 302189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_errNullObject 302289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 302389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 302489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 302589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 302689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INVOKE_STATIC_RANGE: /* 0x77 */ 302789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_STATIC_RANGE.S */ 302889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_STATIC.S */ 302989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 303089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Handle a static method call. 303189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 303289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: invoke-static, invoke-static/range 303389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 303489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 303589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 303689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 303789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 303889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 303989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 304089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 304189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 304289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 3043c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodRange 304489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 304589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 304689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax 304789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx# ecx<- method->clazz 304889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 304989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- clazz 305089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_INVOKE_STATIC_RANGE_continue 305189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 305289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 305389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 305489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 305589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INVOKE_INTERFACE_RANGE: /* 0x78 */ 305689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE_RANGE.S */ 305789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE.S */ 305889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 305989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Handle an interface method call. 306089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 306189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: invoke-interface, invoke-interface/range 306289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 306389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 306489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 306589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 306689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 306789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if (!1) 306889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 306989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 307089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- "this" 307189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 307289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null this? 307389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # yes, fail 307489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offObject_clazz(%eax),%eax# eax<- thisPtr->clazz 307589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- class 307689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- methodClassDex 307789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- method 307889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG3(%esp) # arg3<- dex 307989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 308089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG2(%esp) # arg2<- method 308189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 308289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 308389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_INVOKE_INTERFACE_RANGE_continue 308489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 308589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 308689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 308789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 308889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_79: /* 0x79 */ 308989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_79.S */ 309089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 309189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 309289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 309389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 309489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 309589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 309689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_7A: /* 0x7a */ 309789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_7A.S */ 309889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 309989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 310089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 310189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 310289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 310389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 310489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_NEG_INT: /* 0x7b */ 310589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_NEG_INT.S */ 310689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unop.S */ 310789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 310889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 310989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * specifies an instruction that performs "result = op eax". 311089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 311189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* unop vA, vB */ 311289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 311389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 311489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 311589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 311689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 311789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 311889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 311989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 312089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project negl %eax 312189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 312289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 312389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 312489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 312589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 312689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 312789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_NOT_INT: /* 0x7c */ 312889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_NOT_INT.S */ 312989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unop.S */ 313089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 313189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 313289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * specifies an instruction that performs "result = op eax". 313389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 313489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* unop vA, vB */ 313589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 313689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 313789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 313889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 313989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 314089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 31414c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project 31424c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project 31434c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project notl %eax 314489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 314589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 314689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 314789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 314889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 314989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 315089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_NEG_LONG: /* 0x7d */ 315189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_NEG_LONG.S */ 315289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* unop vA, vB */ 315389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 315489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 315589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # ecx<- BA 315689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 315789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 315889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # ecx<- v[B+1] 315989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project negl %eax 316089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project adcl $0,%ecx 316189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project negl %ecx 316289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[A+0]<- eax 316389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,1) # v[A+1]<- ecx 316489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 316589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 316689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 316789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 316889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 316989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 317089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_NOT_LONG: /* 0x7e */ 317189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_NOT_LONG.S */ 317289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* unop vA, vB */ 317389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 317489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 317589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # ecx<- BA 317689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 317789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 317889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # ecx<- v[B+1] 31794c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project notl %eax 31804c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project notl %ecx 318189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[A+0]<- eax 318289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,1) # v[A+1]<- ecx 318389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 318489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 318589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 318689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 318789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 318889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 318989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_NEG_FLOAT: /* 0x7f */ 319089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_NEG_FLOAT.S */ 319189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/fpcvt.S */ 319289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 319389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit FP conversion operation. 319489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 319589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* unop vA, vB */ 319689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 319789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 319889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 319989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 320089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 320189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 320289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fchs 320389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstps (rFP,%ecx,4) # vA<- %st0 320489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 320589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 320689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 320789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 320889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 320989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_NEG_DOUBLE: /* 0x80 */ 321089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_NEG_DOUBLE.S */ 321189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/fpcvt.S */ 321289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 321389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit FP conversion operation. 321489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 321589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* unop vA, vB */ 321689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 321789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 321889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 321989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 322089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 322189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 322289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fchs 322389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstpl (rFP,%ecx,4) # vA<- %st0 322489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 322589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 322689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 322789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 322889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 322989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INT_TO_LONG: /* 0x81 */ 323089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INT_TO_LONG.S */ 323189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* int to long vA, vB */ 323289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- +A 323389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 323489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 323589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) # will step on edx later 323689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 323789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cltd # edx:eax<- sssssssBBBBBBBB 323889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%edx,%ecx,1) # v[A+1]<- edx/rPC 323989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 324089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[A+0]<- %eax 324189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 324289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 324389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 324489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 324589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 324689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 324789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INT_TO_FLOAT: /* 0x82 */ 324889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INT_TO_FLOAT.S */ 324989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/fpcvt.S */ 325089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 325189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit FP conversion operation. 325289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 325389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* unop vA, vB */ 325489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 325589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 325689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fildl (rFP,rINST_FULL,4) # %st0<- vB 325789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 325889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 325989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 326089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 326189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstps (rFP,%ecx,4) # vA<- %st0 326289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 326389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 326489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 326589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 326689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 326789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INT_TO_DOUBLE: /* 0x83 */ 326889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INT_TO_DOUBLE.S */ 326989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/fpcvt.S */ 327089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 327189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit FP conversion operation. 327289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 327389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* unop vA, vB */ 327489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 327589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 327689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fildl (rFP,rINST_FULL,4) # %st0<- vB 327789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 327889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 327989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 328089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 328189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstpl (rFP,%ecx,4) # vA<- %st0 328289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 328389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 328489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 328589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 328689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 328789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_LONG_TO_INT: /* 0x84 */ 328889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_LONG_TO_INT.S */ 328989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* we ignore the high word, making this equivalent to a 32-bit reg move */ 329089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MOVE.S */ 329189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* for move, move-object, long-to-int */ 329289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB */ 329389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 329489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%al # eax<- A 329589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project shrl $12,rINST_FULL # rINST_FULL<- B 329689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 329789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 329889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 329989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%ecx,%eax) # fp[A]<-fp[B] 330089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 330189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 330289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 330389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 330489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 330589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_LONG_TO_FLOAT: /* 0x85 */ 330689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_LONG_TO_FLOAT.S */ 330789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/fpcvt.S */ 330889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 330989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit FP conversion operation. 331089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 331189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* unop vA, vB */ 331289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 331389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 331489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fildll (rFP,rINST_FULL,4) # %st0<- vB 331589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 331689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 331789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 331889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 331989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstps (rFP,%ecx,4) # vA<- %st0 332089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 332189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 332289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 332389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 332489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 332589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_LONG_TO_DOUBLE: /* 0x86 */ 332689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_LONG_TO_DOUBLE.S */ 332789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/fpcvt.S */ 332889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 332989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit FP conversion operation. 333089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 333189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* unop vA, vB */ 333289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 333389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 333489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fildll (rFP,rINST_FULL,4) # %st0<- vB 333589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 333689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 333789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 333889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 333989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstpl (rFP,%ecx,4) # vA<- %st0 334089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 334189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 334289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 334389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 334489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 334589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_FLOAT_TO_INT: /* 0x87 */ 334689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_FLOAT_TO_INT.S */ 334789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/cvtfp_int.S */ 334889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* On fp to int conversions, Java requires that 334989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 335089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 335189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 335289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 335389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * to play some games. 335489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 335589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* float/double to int/long vA, vB */ 335689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 335789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 335889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 0 335989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 336089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .else 336189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 336289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 336389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ftst 336489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 336589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 336689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movb $0xc,%ah 336789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 336889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 336989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 337089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 337189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 0 337289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 337389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .else 337489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 337589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 337689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 337789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_FLOAT_TO_INT_continue 337889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 337989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 338089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 338189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 338289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_FLOAT_TO_LONG: /* 0x88 */ 338389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_FLOAT_TO_LONG.S */ 338489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/cvtfp_int.S */ 338589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* On fp to int conversions, Java requires that 338689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 338789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 338889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 338989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 339089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * to play some games. 339189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 339289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* float/double to int/long vA, vB */ 339389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 339489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 339589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 0 339689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 339789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .else 339889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 339989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 340089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ftst 340189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 340289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 340389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movb $0xc,%ah 340489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 340589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 340689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 340789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 340889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 1 340989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 341089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .else 341189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 341289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 341389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 341489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_FLOAT_TO_LONG_continue 341589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 341689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 341789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 341889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 341989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_FLOAT_TO_DOUBLE: /* 0x89 */ 342089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_FLOAT_TO_DOUBLE.S */ 342189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/fpcvt.S */ 342289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 342389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit FP conversion operation. 342489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 342589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* unop vA, vB */ 342689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 342789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 342889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 342989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 343089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 343189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 343289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 343389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstpl (rFP,%ecx,4) # vA<- %st0 343489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 343589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 343689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 343789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 343889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 343989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_DOUBLE_TO_INT: /* 0x8a */ 344089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_DOUBLE_TO_INT.S */ 344189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/cvtfp_int.S */ 344289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* On fp to int conversions, Java requires that 344389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 344489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 344589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 344689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 344789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * to play some games. 344889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 344989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* float/double to int/long vA, vB */ 345089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 345189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 345289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 1 345389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 345489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .else 345589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 345689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 345789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ftst 345889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 345989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 346089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movb $0xc,%ah 346189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 346289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 346389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 346489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 346589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 0 346689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 346789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .else 346889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 346989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 347089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 347189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_DOUBLE_TO_INT_continue 347289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 347389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 347489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 347589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 347689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_DOUBLE_TO_LONG: /* 0x8b */ 347789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_DOUBLE_TO_LONG.S */ 347889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/cvtfp_int.S */ 347989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* On fp to int conversions, Java requires that 348089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 348189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 348289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 348389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 348489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * to play some games. 348589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 348689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* float/double to int/long vA, vB */ 348789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 348889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 348989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 1 349089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 349189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .else 349289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 349389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 349489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ftst 349589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 349689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 349789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movb $0xc,%ah 349889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 349989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 350089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 350189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 350289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 1 350389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 350489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .else 350589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 350689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 350789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 350889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_DOUBLE_TO_LONG_continue 350989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 351089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 351189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 351289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 351389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_DOUBLE_TO_FLOAT: /* 0x8c */ 351489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_DOUBLE_TO_FLOAT.S */ 351589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/fpcvt.S */ 351689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 351789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit FP conversion operation. 351889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 351989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* unop vA, vB */ 352089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 352189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 352289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 352389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 352489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 352589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 352689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 352789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstps (rFP,%ecx,4) # vA<- %st0 352889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 352989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 353089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 353189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 353289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 353389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INT_TO_BYTE: /* 0x8d */ 353489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INT_TO_BYTE.S */ 353589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unop.S */ 353689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 353789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 353889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * specifies an instruction that performs "result = op eax". 353989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 354089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* unop vA, vB */ 354189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 354289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 354389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 354489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 354589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 354689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 354789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 354889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 354989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movsbl %al,%eax 355089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 355189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 355289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 355389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 355489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 355589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 355689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INT_TO_CHAR: /* 0x8e */ 355789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INT_TO_CHAR.S */ 355889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unop.S */ 355989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 356089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 356189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * specifies an instruction that performs "result = op eax". 356289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 356389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* unop vA, vB */ 356489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 356589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 356689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 356789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 356889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 356989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 357089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 357189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 357289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl %ax,%eax 357389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 357489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 357589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 357689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 357789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 357889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 357989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INT_TO_SHORT: /* 0x8f */ 358089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INT_TO_SHORT.S */ 358189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unop.S */ 358289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 358389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 358489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * specifies an instruction that performs "result = op eax". 358589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 358689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* unop vA, vB */ 358789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 358889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 358989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 359089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 359189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 359289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 359389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 359489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 359589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl %ax,%eax 359689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 359789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 359889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 359989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 360089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 360189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 360289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_ADD_INT: /* 0x90 */ 360389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_ADD_INT.S */ 360489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binop.S */ 360589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 360689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 360789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 360889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 360989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than eax, you can override "result".) 361089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 361189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 361289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 361389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 361489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 361589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 361689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 361789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 361889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project addl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 361989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 362089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 362189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 362289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 362389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 362489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 362589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 362689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 362789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 362889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 362989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SUB_INT: /* 0x91 */ 363089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SUB_INT.S */ 363189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binop.S */ 363289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 363389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 363489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 363589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 363689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than eax, you can override "result".) 363789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 363889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 363989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 364089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 364189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 364289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 364389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 364489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 364589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project subl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 364689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 364789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 364889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 364989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 365089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 365189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 365289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 365389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 365489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 365589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 365689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MUL_INT: /* 0x92 */ 365789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MUL_INT.S */ 365889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 365989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 32-bit binary multiplication. 366089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 366189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* mul vAA, vBB, vCC */ 366289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 366389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 366489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 366589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 366689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project imull (rFP,%ecx,4),%eax # trashes rPC/edx 366789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 366889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 366989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 367089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 367189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 367289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 367389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 367489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 367589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 367689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_DIV_INT: /* 0x93 */ 367789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_DIV_INT.S */ 367889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/bindiv.S */ 367989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 368089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 368189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 368289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * op1=-1. 368389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 368489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 368589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 368689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 368789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 368889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 368989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 369089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0,%ecx 369189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errDivideByZero 369289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $-1,%ecx 369389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_DIV_INT_continue_div 369489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0x80000000,%eax 369589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_DIV_INT_continue_div 369689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0x80000000,%eax 369789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_DIV_INT_finish_div 369889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 369989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 370089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 370189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 370289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 370389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_REM_INT: /* 0x94 */ 370489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_REM_INT.S */ 370589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/bindiv.S */ 370689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 370789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 370889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 370989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * op1=-1. 371089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 371189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 371289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 371389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 371489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 371589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 371689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 371789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0,%ecx 371889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errDivideByZero 371989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $-1,%ecx 372089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_REM_INT_continue_div 372189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0x80000000,%eax 372289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_REM_INT_continue_div 372389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0,%edx 372489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_REM_INT_finish_div 372589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 372689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 372789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 372889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 372989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 373089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_AND_INT: /* 0x95 */ 373189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_AND_INT.S */ 373289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binop.S */ 373389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 373489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 373589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 373689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 373789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than eax, you can override "result".) 373889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 373989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 374089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 374189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 374289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 374389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 374489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 374589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 374689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 374789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 374889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 374989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 375089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 375189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 375289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 375389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 375489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 375589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 375689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 375789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_OR_INT: /* 0x96 */ 375889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_OR_INT.S */ 375989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binop.S */ 376089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 376189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 376289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 376389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 376489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than eax, you can override "result".) 376589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 376689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 376789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 376889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 376989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 377089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 377189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 377289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 377389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project orl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 377489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 377589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 377689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 377789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 377889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 377989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 378089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 378189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 378289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 378389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 378489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_XOR_INT: /* 0x97 */ 378589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_XOR_INT.S */ 378689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binop.S */ 378789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 378889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 378989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 379089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 379189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than eax, you can override "result".) 379289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 379389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 379489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 379589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 379689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 379789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 379889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 379989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 380089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 380189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 380289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 380389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 380489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 380589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 380689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 380789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 380889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 380989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 381089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 381189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SHL_INT: /* 0x98 */ 381289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SHL_INT.S */ 381389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binop1.S */ 381489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 381589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary operation in which both operands loaded to 381689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * registers (op0 in eax, op1 in ecx). 381789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 381889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 381989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 382089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 382189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 382289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 382389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sall %cl,%eax # ex: addl %ecx,%eax 382489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # tmp<- AA 382589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 382689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 382789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 382889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 382989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 383089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 383189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 383289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 383389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SHR_INT: /* 0x99 */ 383489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SHR_INT.S */ 383589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binop1.S */ 383689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 383789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary operation in which both operands loaded to 383889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * registers (op0 in eax, op1 in ecx). 383989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 384089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 384189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 384289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 384389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 384489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 384589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl %cl,%eax # ex: addl %ecx,%eax 384689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # tmp<- AA 384789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 384889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 384989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 385089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 385189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 385289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 385389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 385489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 385589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_USHR_INT: /* 0x9a */ 385689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_USHR_INT.S */ 385789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binop1.S */ 385889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 385989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary operation in which both operands loaded to 386089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * registers (op0 in eax, op1 in ecx). 386189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 386289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 386389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 386489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 386589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 386689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 386789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project shrl %cl,%eax # ex: addl %ecx,%eax 386889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # tmp<- AA 386989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 387089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 387189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 387289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 387389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 387489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 387589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 387689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 387789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_ADD_LONG: /* 0x9b */ 387889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_ADD_LONG.S */ 387989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopWide.S */ 388089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 388189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 64-bit binary operation. 388289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 388389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 388489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 388589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 388689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 388789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 388889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) # rPC<- v[BB+0] 388989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) # eax<- v[BB+1] 389089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project addl (rFP,%ecx,4),rPC # ex: addl (rFP,%ecx,4),rPC 389189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project adcl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 389289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 389389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(rPC,rINST_FULL,0) # v[AA+0] <- rPC 389489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 389589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[AA+1] <- eax 389689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 389789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 389889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 389989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 390089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 390189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 390289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 390389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SUB_LONG: /* 0x9c */ 390489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SUB_LONG.S */ 390589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopWide.S */ 390689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 390789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 64-bit binary operation. 390889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 390989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 391089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 391189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 391289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 391389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 391489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) # rPC<- v[BB+0] 391589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) # eax<- v[BB+1] 391689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project subl (rFP,%ecx,4),rPC # ex: addl (rFP,%ecx,4),rPC 391789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sbbl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 391889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 391989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(rPC,rINST_FULL,0) # v[AA+0] <- rPC 392089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 392189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[AA+1] <- eax 392289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 392389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 392489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 392589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 392689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 392789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 392889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 392989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MUL_LONG: /* 0x9d */ 393089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MUL_LONG.S */ 393189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 393289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Signed 64-bit integer multiply. 393389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 393489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * We could definately use more free registers for 393589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * this code. We must spill rPC (edx) because it 393689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * is used by imul. We'll also spill rINST (ebx), 393789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * giving us eax, ebc, ecx and edx as computational 393889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * temps. On top of that, we'll spill rIBASE (edi) 393989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for use as the vB pointer and rFP (esi) for use 394089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * as the vC pointer. Yuck. 394189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 394289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* mul-long vAA, vBB, vCC */ 394389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- B 394489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- C 394589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 394689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rIBASE) 394789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rFP) 394889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rINST_FULL) 394989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal (rFP,%eax,4),rIBASE # rIBASE<- &v[B] 395089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal (rFP,%ecx,4),rFP # rFP<- &v[C] 395189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 4(rIBASE),%ecx # ecx<- Bmsw 395289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project imull (rFP),%ecx # ecx<- (Bmsw*Clsw) 395389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 4(rFP),%eax # eax<- Cmsw 395489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project imull (rIBASE),%eax # eax<- (Cmsw*Blsw) 395589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project addl %eax,%ecx # ecx<- (Bmsw*Clsw)+(Cmsw*Blsw) 395689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (rFP),%eax # eax<- Clsw 395789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project mull (rIBASE) # eax<- (Clsw*Alsw) 395889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rINST_FULL) 395989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rFP) 396089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_MUL_LONG_continue 396189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 396289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 396389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 396489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_DIV_LONG: /* 0x9e */ 396589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_DIV_LONG.S */ 396689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* div vAA, vBB, vCC */ 396789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 396889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 396989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 397089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) 397189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) 397289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG2(%esp) 397389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 397489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_DIV_LONG_check_zero 397589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $-1,%eax 397689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_DIV_LONG_check_neg1 397789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DIV_LONG_notSpecial: 397889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rPC,%ecx,0) 397989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) 398089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DIV_LONG_notSpecial1: 398189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG3(%esp) 398289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG0(%esp) 398389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 398489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_DIV_LONG_continue 398589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 398689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 398789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 398889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_REM_LONG: /* 0x9f */ 398989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_REM_LONG.S */ 399089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_DIV_LONG.S */ 399189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* div vAA, vBB, vCC */ 399289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 399389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 399489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 399589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) 399689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) 399789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG2(%esp) 399889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 399989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_REM_LONG_check_zero 400089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $-1,%eax 400189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_REM_LONG_check_neg1 400289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_REM_LONG_notSpecial: 400389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rPC,%ecx,0) 400489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) 400589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_REM_LONG_notSpecial1: 400689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG3(%esp) 400789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG0(%esp) 400889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 400989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_REM_LONG_continue 401089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 401189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 401289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 401389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 401489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_AND_LONG: /* 0xa0 */ 401589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_AND_LONG.S */ 401689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopWide.S */ 401789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 401889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 64-bit binary operation. 401989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 402089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 402189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 402289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 402389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 402489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 402589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) # rPC<- v[BB+0] 402689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) # eax<- v[BB+1] 402789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl (rFP,%ecx,4),rPC # ex: addl (rFP,%ecx,4),rPC 402889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 402989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 403089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(rPC,rINST_FULL,0) # v[AA+0] <- rPC 403189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 403289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[AA+1] <- eax 403389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 403489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 403589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 403689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 403789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 403889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 403989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 404089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_OR_LONG: /* 0xa1 */ 404189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_OR_LONG.S */ 404289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopWide.S */ 404389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 404489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 64-bit binary operation. 404589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 404689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 404789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 404889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 404989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 405089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 405189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) # rPC<- v[BB+0] 405289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) # eax<- v[BB+1] 405389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project orl (rFP,%ecx,4),rPC # ex: addl (rFP,%ecx,4),rPC 405489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project orl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 405589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 405689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(rPC,rINST_FULL,0) # v[AA+0] <- rPC 405789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 405889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[AA+1] <- eax 405989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 406089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 406189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 406289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 406389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 406489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 406589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 406689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_XOR_LONG: /* 0xa2 */ 406789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_XOR_LONG.S */ 406889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopWide.S */ 406989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 407089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 64-bit binary operation. 407189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 407289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 407389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 407489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 407589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 407689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 407789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) # rPC<- v[BB+0] 407889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) # eax<- v[BB+1] 407989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl (rFP,%ecx,4),rPC # ex: addl (rFP,%ecx,4),rPC 408089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 408189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 408289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(rPC,rINST_FULL,0) # v[AA+0] <- rPC 408389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 408489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[AA+1] <- eax 408589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 408689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 408789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 408889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 408989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 409089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 409189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 409289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SHL_LONG: /* 0xa3 */ 409389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SHL_LONG.S */ 409489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 409589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 409689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 409789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 409889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 6 bits of the shift distance. x86 shifts automatically mask off 409989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31 410089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * case specially. 410189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 410289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* shl-long vAA, vBB, vCC */ 410389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* ecx gets shift count */ 410489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* Need to spill edx */ 410589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* rINST gets AA */ 410689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 410789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 410889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) # spill edx 410989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%edx,%eax,1) # ecx<- v[BB+1] 411089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG (%ecx,%ecx) # ecx<- vCC 411189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,%eax,0) # eax<- v[BB+0] 411289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project shldl %eax,%edx 411389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sall %cl,%eax 411489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testb $32,%cl 411589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je 2f 411689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,%edx 411789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %eax,%eax 411889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project2: 411989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx 412089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%edx,%ecx,1) # v[AA+1]<- %edx 412189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 412289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 412389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_SHL_LONG_finish 412489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 412589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 412689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 412789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SHR_LONG: /* 0xa4 */ 412889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SHR_LONG.S */ 412989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 413089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 413189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 413289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 413389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 6 bits of the shift distance. x86 shifts automatically mask off 413489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31 413589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * case specially. 413689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 413789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* shr-long vAA, vBB, vCC */ 413889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* ecx gets shift count */ 413989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* Need to spill edx */ 414089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* rINST gets AA */ 414189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 414289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 414389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) # spill edx 414489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%edx,%eax,1) # edx<- v[BB+1] 414589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG (%ecx,%ecx) # ecx<- vCC 414689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,%eax,0) # eax<- v[BB+0] 414789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project shrdl %edx,%eax 414889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl %cl,%edx 414989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testb $32,%cl 415089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je 2f 415189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %edx,%eax 415289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $31,%edx 415389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project2: 415489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx 415589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%edx,%ecx,1) # v[AA+1]<- edx 415689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 415789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 415889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_SHR_LONG_finish 415989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 416089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 416189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 416289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_USHR_LONG: /* 0xa5 */ 416389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_USHR_LONG.S */ 416489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 416589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 416689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 416789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 416889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 6 bits of the shift distance. x86 shifts automatically mask off 416989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31 417089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * case specially. 417189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 417289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* shr-long vAA, vBB, vCC */ 417389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* ecx gets shift count */ 417489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* Need to spill edx */ 417589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* rINST gets AA */ 417689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 417789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 417889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) # spill edx 417989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%edx,%eax,1) # edx<- v[BB+1] 418089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG (%ecx,%ecx) # ecx<- vCC 418189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,%eax,0) # eax<- v[BB+0] 418289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project shrdl %edx,%eax 418389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project shrl %cl,%edx 418489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testb $32,%cl 418589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je 2f 418689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %edx,%eax 418789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %edx,%edx 418889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project2: 418989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx 419089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%edx,%ecx,1) # v[BB+1]<- edx 419189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 419289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_USHR_LONG_finish 419389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 419489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 419589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 419689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_ADD_FLOAT: /* 0xa6 */ 419789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_ADD_FLOAT.S */ 419889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binflop.S */ 419989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 420089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary float operation. 420189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 420289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 420389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 420489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 420589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 420689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 420789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 420889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fadds (rFP,%ecx,4) # ex: faddp 420989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 421089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 421189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 421289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 421389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 421489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 421589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 421689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 421789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 421889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 421989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SUB_FLOAT: /* 0xa7 */ 422089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SUB_FLOAT.S */ 422189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binflop.S */ 422289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 422389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary float operation. 422489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 422589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 422689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 422789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 422889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 422989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 423089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 423189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fsubs (rFP,%ecx,4) # ex: faddp 423289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 423389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 423489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 423589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 423689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 423789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 423889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 423989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 424089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 424189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 424289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MUL_FLOAT: /* 0xa8 */ 424389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MUL_FLOAT.S */ 424489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binflop.S */ 424589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 424689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary float operation. 424789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 424889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 424989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 425089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 425189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 425289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 425389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 425489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fmuls (rFP,%ecx,4) # ex: faddp 425589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 425689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 425789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 425889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 425989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 426089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 426189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 426289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 426389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 426489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 426589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_DIV_FLOAT: /* 0xa9 */ 426689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_DIV_FLOAT.S */ 426789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binflop.S */ 426889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 426989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary float operation. 427089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 427189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 427289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 427389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 427489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 427589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 427689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 427789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fdivs (rFP,%ecx,4) # ex: faddp 427889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 427989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 428089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 428189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 428289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 428389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 428489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 428589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 428689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 428789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 428889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_REM_FLOAT: /* 0xaa */ 428989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_REM_FLOAT.S */ 429089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* rem_float vAA, vBB, vCC */ 429189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 429289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 429389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,%ecx,4) # vCC to fp stack 429489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 429589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 429689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 429789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project1: 42984c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project fprem 429989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstsw %ax 430089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sahf 430189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jp 1b 430289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstp %st(1) 430389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 430489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 430589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 430689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 430789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 430889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 430989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_ADD_DOUBLE: /* 0xab */ 431089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_ADD_DOUBLE.S */ 431189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binflop.S */ 431289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 431389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary float operation. 431489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 431589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 431689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 431789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 431889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 431989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 432089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 432189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project faddl (rFP,%ecx,4) # ex: faddp 432289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 432389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 432489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 432589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 432689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 432789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 432889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 432989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 433089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 433189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 433289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SUB_DOUBLE: /* 0xac */ 433389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SUB_DOUBLE.S */ 433489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binflop.S */ 433589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 433689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary float operation. 433789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 433889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 433989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 434089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 434189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 434289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 434389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 434489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fsubl (rFP,%ecx,4) # ex: faddp 434589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 434689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 434789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 434889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 434989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 435089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 435189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 435289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 435389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 435489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 435589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MUL_DOUBLE: /* 0xad */ 435689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MUL_DOUBLE.S */ 435789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binflop.S */ 435889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 435989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary float operation. 436089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 436189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 436289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 436389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 436489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 436589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 436689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 436789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fmull (rFP,%ecx,4) # ex: faddp 436889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 436989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 437089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 437189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 437289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 437389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 437489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 437589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 437689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 437789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 437889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_DIV_DOUBLE: /* 0xae */ 437989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_DIV_DOUBLE.S */ 438089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binflop.S */ 438189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 438289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary float operation. 438389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 438489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 438589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 438689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop vAA, vBB, vCC */ 438789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 438889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 438989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 439089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fdivl (rFP,%ecx,4) # ex: faddp 439189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 439289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 439389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 439489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 439589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 439689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 439789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 439889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 439989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 440089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 440189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_REM_DOUBLE: /* 0xaf */ 440289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_REM_DOUBLE.S */ 440389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* rem_float vAA, vBB, vCC */ 440489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 440589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 440689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,%ecx,4) # vCC to fp stack 440789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 440889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 440989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 441089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project1: 44114c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project fprem 441289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstsw %ax 441389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sahf 441489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jp 1b 441589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstp %st(1) 441689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 441789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 441889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 441989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 442089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 442189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 442289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_ADD_INT_2ADDR: /* 0xb0 */ 442389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_ADD_INT_2ADDR.S */ 442489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binop2addr.S */ 442589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 442689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 442789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 442889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 442989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than r0, you can override "result".) 443089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 443189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 443289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 443389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 443489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 443589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 443689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 443789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 443889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 443989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/2addr vA, vB */ 444089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 444189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 444289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 444389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 444489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 444589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project addl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 444689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 444789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 444889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 444989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 445089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 445189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 445289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SUB_INT_2ADDR: /* 0xb1 */ 445389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SUB_INT_2ADDR.S */ 445489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binop2addr.S */ 445589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 445689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 445789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 445889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 445989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than r0, you can override "result".) 446089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 446189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 446289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 446389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 446489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 446589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 446689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 446789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 446889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 446989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/2addr vA, vB */ 447089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 447189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 447289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 447389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 447489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 447589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project subl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 447689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 447789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 447889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 447989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 448089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 448189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 448289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MUL_INT_2ADDR: /* 0xb2 */ 448389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MUL_INT_2ADDR.S */ 448489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* mul vA, vB */ 448589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 448689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 448789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 448889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 448989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 449089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project imull (rFP,%ecx,4),%eax 449189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 449289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 449389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 449489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 449589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 449689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 449789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 449889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 449989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_DIV_INT_2ADDR: /* 0xb3 */ 450089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_DIV_INT_2ADDR.S */ 450189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/bindiv2addr.S */ 450289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 450389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 450489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * op1=-1. 450589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 450689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* div/rem/2addr vA, vB */ 450789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 450889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 450989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 451089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 451189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 451289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vBB 451389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 451489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0,%ecx 451589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errDivideByZero 451689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $-1,%ecx 451789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_DIV_INT_2ADDR_continue_div2addr 451889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0x80000000,%eax 451989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_DIV_INT_2ADDR_continue_div2addr 452089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0x80000000,%eax 452189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_DIV_INT_2ADDR_finish_div2addr 452289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 452389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 452489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 452589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 452689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 452789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_REM_INT_2ADDR: /* 0xb4 */ 452889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_REM_INT_2ADDR.S */ 452989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/bindiv2addr.S */ 453089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 453189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 453289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * op1=-1. 453389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 453489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* div/rem/2addr vA, vB */ 453589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 453689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 453789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 453889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 453989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 454089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vBB 454189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 454289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0,%ecx 454389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errDivideByZero 454489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $-1,%ecx 454589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_REM_INT_2ADDR_continue_div2addr 454689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0x80000000,%eax 454789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_REM_INT_2ADDR_continue_div2addr 454889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0,%edx 454989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_REM_INT_2ADDR_finish_div2addr 455089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 455189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 455289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 455389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 455489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 455589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_AND_INT_2ADDR: /* 0xb5 */ 455689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_AND_INT_2ADDR.S */ 455789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binop2addr.S */ 455889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 455989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 456089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 456189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 456289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than r0, you can override "result".) 456389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 456489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 456589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 456689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 456789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 456889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 456989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 457089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 457189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 457289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/2addr vA, vB */ 457389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 457489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 457589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 457689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 457789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 457889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 457989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 458089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 458189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 458289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 458389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 458489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 458589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_OR_INT_2ADDR: /* 0xb6 */ 458689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_OR_INT_2ADDR.S */ 458789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binop2addr.S */ 458889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 458989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 459089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 459189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 459289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than r0, you can override "result".) 459389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 459489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 459589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 459689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 459789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 459889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 459989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 460089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 460189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 460289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/2addr vA, vB */ 460389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 460489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 460589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 460689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 460789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 460889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project orl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 460989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 461089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 461189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 461289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 461389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 461489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 461589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_XOR_INT_2ADDR: /* 0xb7 */ 461689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_XOR_INT_2ADDR.S */ 461789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binop2addr.S */ 461889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 461989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 462089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 462189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 462289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than r0, you can override "result".) 462389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 462489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 462589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 462689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 462789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 462889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 462989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 463089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 463189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 463289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/2addr vA, vB */ 463389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 463489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 463589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 463689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 463789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 463889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 463989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 464089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 464189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 464289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 464389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 464489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 464589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SHL_INT_2ADDR: /* 0xb8 */ 464689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SHL_INT_2ADDR.S */ 464789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/shop2addr.S */ 464889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 464989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit "shift/2addr" operation. 465089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 465189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* shift/2addr vA, vB */ 465289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 465389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 465489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 465589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 465689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 465789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 465889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sall %cl,%eax # ex: sarl %cl,%eax 465989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,rINST_FULL) 466089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 466189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 466289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 466389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 466489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 466589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 466689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 466789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 466889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SHR_INT_2ADDR: /* 0xb9 */ 466989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SHR_INT_2ADDR.S */ 467089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/shop2addr.S */ 467189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 467289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit "shift/2addr" operation. 467389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 467489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* shift/2addr vA, vB */ 467589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 467689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 467789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 467889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 467989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 468089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 468189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl %cl,%eax # ex: sarl %cl,%eax 468289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,rINST_FULL) 468389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 468489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 468589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 468689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 468789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 468889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 468989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 469089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 469189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_USHR_INT_2ADDR: /* 0xba */ 469289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_USHR_INT_2ADDR.S */ 469389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/shop2addr.S */ 469489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 469589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit "shift/2addr" operation. 469689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 469789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* shift/2addr vA, vB */ 469889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 469989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 470089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 470189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 470289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 470389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 470489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project shrl %cl,%eax # ex: sarl %cl,%eax 470589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,rINST_FULL) 470689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 470789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 470889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 470989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 471089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 471189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 471289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 471389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 471489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_ADD_LONG_2ADDR: /* 0xbb */ 471589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_ADD_LONG_2ADDR.S */ 471689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopWide2addr.S */ 471789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 471889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 64-bit binary operation. 471989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 472089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/2addr vA, vB */ 472189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 472289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 472389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 472489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # eax<- v[B+1] 472589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 472689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xF,rINST_LO # rINST_FULL<- A 472789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project addl %eax,(rFP,rINST_FULL,4) # example: addl %eax,(rFP,rINST_FULL,4) 472889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project adcl %ecx,4(rFP,rINST_FULL,4) # example: adcl %ecx,4(rFP,rINST_FULL,4) 472989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 473089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 473189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 473289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 473389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 473489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 473589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 473689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SUB_LONG_2ADDR: /* 0xbc */ 473789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SUB_LONG_2ADDR.S */ 473889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopWide2addr.S */ 473989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 474089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 64-bit binary operation. 474189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 474289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/2addr vA, vB */ 474389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 474489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 474589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 474689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # eax<- v[B+1] 474789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 474889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xF,rINST_LO # rINST_FULL<- A 474989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project subl %eax,(rFP,rINST_FULL,4) # example: addl %eax,(rFP,rINST_FULL,4) 475089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sbbl %ecx,4(rFP,rINST_FULL,4) # example: adcl %ecx,4(rFP,rINST_FULL,4) 475189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 475289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 475389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 475489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 475589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 475689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 475789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 475889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MUL_LONG_2ADDR: /* 0xbd */ 475989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MUL_LONG_2ADDR.S */ 476089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 476189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Signed 64-bit integer multiply, 2-addr version 476289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 476389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * We could definately use more free registers for 476489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * this code. We must spill rPC (edx) because it 476589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * is used by imul. We'll also spill rINST (ebx), 476689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * giving us eax, ebc, ecx and edx as computational 476789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * temps. On top of that, we'll spill rIBASE (edi) 476889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for use as the vA pointer and rFP (esi) for use 476989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * as the vB pointer. Yuck. 477089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 477189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* mul-long/2addr vA, vB */ 477289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 477389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%al # eax<- A 477489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 477589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 477689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rIBASE) 477789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rFP) 477889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal (rFP,%eax,4),rIBASE # rIBASE<- &v[A] 477989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal (rFP,rINST_FULL,4),rFP # rFP<- &v[B] 478089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 4(rIBASE),%ecx # ecx<- Amsw 478189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project imull (rFP),%ecx # ecx<- (Amsw*Blsw) 478289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 4(rFP),%eax # eax<- Bmsw 478389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project imull (rIBASE),%eax # eax<- (Bmsw*Alsw) 478489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project addl %eax,%ecx # ecx<- (Amsw*Blsw)+(Bmsw*Alsw) 478589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (rFP),%eax # eax<- Blsw 478689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project mull (rIBASE) # eax<- (Blsw*Alsw) 478789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_MUL_LONG_2ADDR_continue 478889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 478989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 479089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 479189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_DIV_LONG_2ADDR: /* 0xbe */ 479289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_DIV_LONG_2ADDR.S */ 479389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* div/2addr vA, vB */ 479489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%eax 479589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project shrl $4,%eax # eax<- B 479689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL 479789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 479889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 479989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) 480089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) 480189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG2(%esp) 480289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 480389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_DIV_LONG_2ADDR_check_zero 480489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $-1,%eax 480589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_DIV_LONG_2ADDR_check_neg1 480689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DIV_LONG_2ADDR_notSpecial: 480789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rPC,rINST_FULL,0) 480889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,1) 480989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DIV_LONG_2ADDR_notSpecial1: 481089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_DIV_LONG_2ADDR_continue 481189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 481289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 481389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 481489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_REM_LONG_2ADDR: /* 0xbf */ 481589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_REM_LONG_2ADDR.S */ 481689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_DIV_LONG_2ADDR.S */ 481789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* div/2addr vA, vB */ 481889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%eax 481989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project shrl $4,%eax # eax<- B 482089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL 482189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 482289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 482389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) 482489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) 482589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG2(%esp) 482689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 482789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_REM_LONG_2ADDR_check_zero 482889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $-1,%eax 482989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_REM_LONG_2ADDR_check_neg1 483089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_REM_LONG_2ADDR_notSpecial: 483189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rPC,rINST_FULL,0) 483289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,1) 483389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_REM_LONG_2ADDR_notSpecial1: 483489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_REM_LONG_2ADDR_continue 483589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 483689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 483789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 483889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 483989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_AND_LONG_2ADDR: /* 0xc0 */ 484089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_AND_LONG_2ADDR.S */ 484189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopWide2addr.S */ 484289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 484389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 64-bit binary operation. 484489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 484589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/2addr vA, vB */ 484689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 484789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 484889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 484989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # eax<- v[B+1] 485089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 485189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xF,rINST_LO # rINST_FULL<- A 485289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl %eax,(rFP,rINST_FULL,4) # example: addl %eax,(rFP,rINST_FULL,4) 485389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl %ecx,4(rFP,rINST_FULL,4) # example: adcl %ecx,4(rFP,rINST_FULL,4) 485489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 485589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 485689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 485789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 485889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 485989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 486089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 486189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_OR_LONG_2ADDR: /* 0xc1 */ 486289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_OR_LONG_2ADDR.S */ 486389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopWide2addr.S */ 486489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 486589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 64-bit binary operation. 486689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 486789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/2addr vA, vB */ 486889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 486989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 487089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 487189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # eax<- v[B+1] 487289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 487389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xF,rINST_LO # rINST_FULL<- A 487489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project orl %eax,(rFP,rINST_FULL,4) # example: addl %eax,(rFP,rINST_FULL,4) 487589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project orl %ecx,4(rFP,rINST_FULL,4) # example: adcl %ecx,4(rFP,rINST_FULL,4) 487689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 487789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 487889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 487989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 488089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 488189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 488289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 488389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_XOR_LONG_2ADDR: /* 0xc2 */ 488489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_XOR_LONG_2ADDR.S */ 488589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopWide2addr.S */ 488689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 488789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 64-bit binary operation. 488889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 488989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/2addr vA, vB */ 489089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 489189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 489289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 489389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # eax<- v[B+1] 489489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 489589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xF,rINST_LO # rINST_FULL<- A 489689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %eax,(rFP,rINST_FULL,4) # example: addl %eax,(rFP,rINST_FULL,4) 489789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %ecx,4(rFP,rINST_FULL,4) # example: adcl %ecx,4(rFP,rINST_FULL,4) 489889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 489989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 490089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 490189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 490289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 490389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 490489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 490589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SHL_LONG_2ADDR: /* 0xc3 */ 490689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SHL_LONG_2ADDR.S */ 490789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 490889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 490989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 32-bit shift distance. 491089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 491189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* shl-long/2addr vA, vB */ 491289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* ecx gets shift count */ 491389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* Need to spill edx */ 491489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* rINST gets AA */ 491589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 491689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_HI<- BA 491789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 491889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- v[AA+0] 491989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 492089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 492189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%edx,rINST_FULL,1) # edx<- v[AA+1] 492289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- vBB 492389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project shldl %eax,%edx 492489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sall %cl,%eax 492589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testb $32,%cl 492689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je 2f 492789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,%edx 492889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %eax,%eax 492989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project2: 493089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%edx,rINST_FULL,1) # v[AA+1]<- edx 493189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 493289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_SHL_LONG_2ADDR_finish 493389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 493489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 493589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 493689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SHR_LONG_2ADDR: /* 0xc4 */ 493789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SHR_LONG_2ADDR.S */ 493889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 493989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 494089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 32-bit shift distance. 494189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 494289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* shl-long/2addr vA, vB */ 494389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* ecx gets shift count */ 494489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* Need to spill edx */ 494589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* rINST gets AA */ 494689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 494789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_HI<- BA 494889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 494989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- v[AA+0] 495089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 495189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 495289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%edx,rINST_FULL,1) # edx<- v[AA+1] 495389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- vBB 495489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project shrdl %edx,%eax 495589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl %cl,%edx 495689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testb $32,%cl 495789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je 2f 495889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %edx,%eax 495989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $31,%edx 496089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project2: 496189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%edx,rINST_FULL,1) # v[AA+1]<- edx 496289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 496389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_SHR_LONG_2ADDR_finish 496489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 496589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 496689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 496789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_USHR_LONG_2ADDR: /* 0xc5 */ 496889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_USHR_LONG_2ADDR.S */ 496989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 497089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 497189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 32-bit shift distance. 497289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 497389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* shl-long/2addr vA, vB */ 497489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* ecx gets shift count */ 497589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* Need to spill edx */ 497689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* rINST gets AA */ 497789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 497889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_HI<- BA 497989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 498089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- v[AA+0] 498189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 498289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 498389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%edx,rINST_FULL,1) # edx<- v[AA+1] 498489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- vBB 498589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project shrdl %edx,%eax 498689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project shrl %cl,%edx 498789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testb $32,%cl 498889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je 2f 498989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %edx,%eax 499089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %edx,%edx 499189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project2: 499289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%edx,rINST_FULL,1) # v[AA+1]<- edx 499389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 499489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_USHR_LONG_2ADDR_finish 499589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 499689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 499789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 499889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_ADD_FLOAT_2ADDR: /* 0xc6 */ 499989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_ADD_FLOAT_2ADDR.S */ 500089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binflop2addr.S */ 500189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 500289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary float operation. 500389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 500489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 500589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 500689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 500789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/2addr vA, vB */ 500889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 500989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 501089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 501189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 501289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fadds (rFP,rINST_FULL,4) # ex: faddp 501389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 501489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 501589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 501689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 501789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 501889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 501989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 502089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 502189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SUB_FLOAT_2ADDR: /* 0xc7 */ 502289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SUB_FLOAT_2ADDR.S */ 502389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binflop2addr.S */ 502489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 502589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary float operation. 502689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 502789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 502889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 502989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 503089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/2addr vA, vB */ 503189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 503289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 503389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 503489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 503589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fsubs (rFP,rINST_FULL,4) # ex: faddp 503689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 503789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 503889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 503989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 504089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 504189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 504289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 504389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 504489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MUL_FLOAT_2ADDR: /* 0xc8 */ 504589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MUL_FLOAT_2ADDR.S */ 504689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binflop2addr.S */ 504789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 504889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary float operation. 504989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 505089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 505189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 505289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 505389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/2addr vA, vB */ 505489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 505589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 505689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 505789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 505889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fmuls (rFP,rINST_FULL,4) # ex: faddp 505989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 506089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 506189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 506289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 506389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 506489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 506589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 506689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 506789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_DIV_FLOAT_2ADDR: /* 0xc9 */ 506889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_DIV_FLOAT_2ADDR.S */ 506989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binflop2addr.S */ 507089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 507189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary float operation. 507289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 507389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 507489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 507589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 507689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/2addr vA, vB */ 507789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 507889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 507989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 508089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 508189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fdivs (rFP,rINST_FULL,4) # ex: faddp 508289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 508389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 508489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 508589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 508689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 508789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 508889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 508989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 509089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_REM_FLOAT_2ADDR: /* 0xca */ 509189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_REM_FLOAT_2ADDR.S */ 509289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* rem_float/2addr vA, vB */ 509389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 509489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 509589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,rINST_FULL,4) # vBB to fp stack 509689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 509789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 509889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 509989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project1: 51004c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project fprem 510189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstsw %ax 510289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sahf 510389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jp 1b 510489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstp %st(1) 510589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 510689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 510789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 510889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 510989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 511089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 511189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_ADD_DOUBLE_2ADDR: /* 0xcb */ 511289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_ADD_DOUBLE_2ADDR.S */ 511389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binflop2addr.S */ 511489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 511589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary float operation. 511689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 511789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 511889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 511989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 512089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/2addr vA, vB */ 512189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 512289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 512389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 512489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 512589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project faddl (rFP,rINST_FULL,4) # ex: faddp 512689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 512789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 512889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 512989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 513089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 513189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 513289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 513389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 513489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SUB_DOUBLE_2ADDR: /* 0xcc */ 513589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SUB_DOUBLE_2ADDR.S */ 513689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binflop2addr.S */ 513789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 513889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary float operation. 513989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 514089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 514189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 514289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 514389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/2addr vA, vB */ 514489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 514589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 514689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 514789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 514889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fsubl (rFP,rINST_FULL,4) # ex: faddp 514989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 515089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 515189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 515289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 515389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 515489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 515589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 515689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 515789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MUL_DOUBLE_2ADDR: /* 0xcd */ 515889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MUL_DOUBLE_2ADDR.S */ 515989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binflop2addr.S */ 516089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 516189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary float operation. 516289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 516389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 516489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 516589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 516689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/2addr vA, vB */ 516789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 516889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 516989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 517089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 517189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fmull (rFP,rINST_FULL,4) # ex: faddp 517289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 517389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 517489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 517589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 517689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 517789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 517889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 517989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 518089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_DIV_DOUBLE_2ADDR: /* 0xce */ 518189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_DIV_DOUBLE_2ADDR.S */ 518289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binflop2addr.S */ 518389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 518489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit binary float operation. 518589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 518689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 518789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 518889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 518989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/2addr vA, vB */ 519089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 519189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 519289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 519389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 519489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fdivl (rFP,rINST_FULL,4) # ex: faddp 519589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 519689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 519789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 519889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 519989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 520089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 520189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 520289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 520389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_REM_DOUBLE_2ADDR: /* 0xcf */ 520489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_REM_DOUBLE_2ADDR.S */ 520589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* rem_float/2addr vA, vB */ 520689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 520789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 520889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,rINST_FULL,4) # vBB to fp stack 520989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecx<- A 521089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 521189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 521289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project1: 52134c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project fprem 521489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstsw %ax 521589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sahf 521689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jp 1b 521789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstp %st(1) 521889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 521989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 522089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 522189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 522289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 522389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 522489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_ADD_INT_LIT16: /* 0xd0 */ 522589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_ADD_INT_LIT16.S */ 522689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopLit16.S */ 522789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 522889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 522989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 523089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 523189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than eax, you can override "result".) 523289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 523389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int/lit16, rsub-int, 523489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 523589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 523689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 523789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 523889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%eax # eax<- B 523989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 524089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 524189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 524289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 52434c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project addl %ecx,%eax # for example: addl %ecx, %eax 524489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,rINST_FULL) 524589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 524689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 524789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 524889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 524989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 525089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 525189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 525289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_RSUB_INT: /* 0xd1 */ 525389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_RSUB_INT.S */ 52544c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project/* File: x86/binopLit16.S */ 525589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 52564c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 52574c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 52584c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project * This could be an x86 instruction or a function call. (If the result 52594c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project * comes back in a register other than eax, you can override "result".) 52604c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project * 52614c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project * For: add-int/lit16, rsub-int, 52624c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 526389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 52644c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 52654c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 52664c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project sarl $4,%eax # eax<- B 52674c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 52684c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 52694c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 52704c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 52714c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project subl %eax,%ecx # for example: addl %ecx, %eax 52724c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project SET_VREG(%ecx,rINST_FULL) 527389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 527489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 527589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 527689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 527789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 527889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 527989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 528089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MUL_INT_LIT16: /* 0xd2 */ 528189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MUL_INT_LIT16.S */ 528289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* mul/lit16 vA, vB, #+CCCC */ 528389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* Need A in rINST_FULL, ssssCCCC in ecx, vB in eax */ 528489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 528589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%eax # eax<- B 528689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 528789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 528889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 528989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 529089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 529189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project imull %ecx,%eax # trashes rPC 529289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 529389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,rINST_FULL) 529489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 529589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 529689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 529789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 529889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 529989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 530089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_DIV_INT_LIT16: /* 0xd3 */ 530189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_DIV_INT_LIT16.S */ 530289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/bindivLit16.S */ 530389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 530489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 530589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * op1=-1. 530689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 530789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* div/rem/lit16 vA, vB, #+CCCC */ 530889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* Need A in rINST_FULL, ssssCCCC in ecx, vB in eax */ 530989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 531089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%eax # eax<- B 531189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 531289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 531389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 531489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 531589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 531689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0,%ecx 531789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errDivideByZero 531889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $-1,%ecx 531989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_DIV_INT_LIT16_continue_div 532089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0x80000000,%eax 532189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_DIV_INT_LIT16_continue_div 532289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0x80000000,%eax 532389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_DIV_INT_LIT16_finish_div 532489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 532589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 532689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 532789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 532889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 532989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_REM_INT_LIT16: /* 0xd4 */ 533089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_REM_INT_LIT16.S */ 533189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/bindivLit16.S */ 533289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 533389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 533489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * op1=-1. 533589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 533689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* div/rem/lit16 vA, vB, #+CCCC */ 533789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* Need A in rINST_FULL, ssssCCCC in ecx, vB in eax */ 533889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 533989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%eax # eax<- B 534089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 534189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 534289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 534389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 534489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 534589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0,%ecx 534689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errDivideByZero 534789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $-1,%ecx 534889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_REM_INT_LIT16_continue_div 534989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0x80000000,%eax 535089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_REM_INT_LIT16_continue_div 535189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0,%edx 535289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_REM_INT_LIT16_finish_div 535389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 535489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 535589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 535689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 535789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 535889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_AND_INT_LIT16: /* 0xd5 */ 535989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_AND_INT_LIT16.S */ 536089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopLit16.S */ 536189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 536289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 536389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 536489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 536589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than eax, you can override "result".) 536689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 536789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int/lit16, rsub-int, 536889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 536989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 537089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 537189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 537289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%eax # eax<- B 537389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 537489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 537589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 537689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 53774c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project andl %ecx,%eax # for example: addl %ecx, %eax 537889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,rINST_FULL) 537989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 538089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 538189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 538289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 538389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 538489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 538589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 538689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_OR_INT_LIT16: /* 0xd6 */ 538789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_OR_INT_LIT16.S */ 538889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopLit16.S */ 538989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 539089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 539189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 539289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 539389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than eax, you can override "result".) 539489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 539589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int/lit16, rsub-int, 539689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 539789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 539889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 539989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 540089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%eax # eax<- B 540189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 540289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 540389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 540489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 54054c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project orl %ecx,%eax # for example: addl %ecx, %eax 540689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,rINST_FULL) 540789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 540889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 540989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 541089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 541189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 541289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 541389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 541489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 541589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_XOR_INT_LIT16: /* 0xd7 */ 541689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_XOR_INT_LIT16.S */ 541789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopLit16.S */ 541889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 541989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 542089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 542189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 542289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than eax, you can override "result".) 542389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 542489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int/lit16, rsub-int, 542589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 542689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 542789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 542889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 542989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%eax # eax<- B 543089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 543189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 543289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 543389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 54344c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project xor %ecx,%eax # for example: addl %ecx, %eax 543589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,rINST_FULL) 543689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 543789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 543889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 543989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 544089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 544189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 544289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 544389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_ADD_INT_LIT8: /* 0xd8 */ 544489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_ADD_INT_LIT8.S */ 544589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopLit8.S */ 544689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 544789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 544889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 544989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 545089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than r0, you can override "result".) 545189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 545289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 545389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 545489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 545589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 545689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 545789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 545889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 545989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 546089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 546189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project addl %ecx,%eax # ex: addl %ecx,%eax 546289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG (%eax,rINST_FULL) 546389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 546489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 546589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 546689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 546789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 546889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 546989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 547089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_RSUB_INT_LIT8: /* 0xd9 */ 547189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_RSUB_INT_LIT8.S */ 547289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopLit8.S */ 547389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 547489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 547589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 547689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 547789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than r0, you can override "result".) 547889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 547989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 548089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 548189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 548289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 548389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 548489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 548589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 548689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 548789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 548889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project subl %eax,%ecx # ex: addl %ecx,%eax 548989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG (%ecx,rINST_FULL) 549089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 549189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 549289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 549389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 549489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 549589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 549689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 549789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_MUL_INT_LIT8: /* 0xda */ 549889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_MUL_INT_LIT8.S */ 549989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* mul/lit8 vAA, vBB, #+CC */ 550089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 550189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 550289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 550389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 550489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 550589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project imull %ecx,%eax # trashes rPC 550689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 550789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG (%eax,rINST_FULL) 550889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 550989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 551089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 551189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 551289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 551389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 551489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 551589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_DIV_INT_LIT8: /* 0xdb */ 551689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_DIV_INT_LIT8.S */ 551789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/bindivLit8.S */ 551889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 551989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 32-bit div/rem "lit8" binary operation. Handles special case of 552089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * op0=minint & op1=-1 552189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 552289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* div/rem/lit8 vAA, vBB, #+CC */ 552389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 552489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 552589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 552689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 552789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 552889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0,%ecx 552989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errDivideByZero 553089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0x80000000,%eax 553189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_DIV_INT_LIT8_continue_div 553289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $-1,%ecx 553389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_DIV_INT_LIT8_continue_div 553489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0x80000000,%eax 553589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_DIV_INT_LIT8_finish_div 553689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 553789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 553889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 553989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 554089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 554189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_REM_INT_LIT8: /* 0xdc */ 554289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_REM_INT_LIT8.S */ 554389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/bindivLit8.S */ 554489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 554589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 32-bit div/rem "lit8" binary operation. Handles special case of 554689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * op0=minint & op1=-1 554789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 554889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* div/rem/lit8 vAA, vBB, #+CC */ 554989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 555089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 555189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 555289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 555389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 555489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0,%ecx 555589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errDivideByZero 555689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0x80000000,%eax 555789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_REM_INT_LIT8_continue_div 555889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $-1,%ecx 555989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_REM_INT_LIT8_continue_div 556089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0,%edx 556189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_REM_INT_LIT8_finish_div 556289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 556389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 556489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 556589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 556689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 556789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_AND_INT_LIT8: /* 0xdd */ 556889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_AND_INT_LIT8.S */ 556989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopLit8.S */ 557089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 557189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 557289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 557389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 557489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than r0, you can override "result".) 557589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 557689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 557789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 557889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 557989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 558089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 558189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 558289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 558389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 558489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 558589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl %ecx,%eax # ex: addl %ecx,%eax 558689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG (%eax,rINST_FULL) 558789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 558889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 558989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 559089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 559189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 559289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 559389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 559489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_OR_INT_LIT8: /* 0xde */ 559589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_OR_INT_LIT8.S */ 559689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopLit8.S */ 559789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 559889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 559989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 560089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 560189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than r0, you can override "result".) 560289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 560389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 560489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 560589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 560689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 560789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 560889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 560989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 561089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 561189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 561289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project orl %ecx,%eax # ex: addl %ecx,%eax 561389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG (%eax,rINST_FULL) 561489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 561589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 561689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 561789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 561889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 561989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 562089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 562189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 562289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_XOR_INT_LIT8: /* 0xdf */ 562389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_XOR_INT_LIT8.S */ 562489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopLit8.S */ 562589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 562689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 562789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 562889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 562989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than r0, you can override "result".) 563089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 563189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 563289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 563389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 563489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 563589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 563689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 563789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 563889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 563989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 564089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xor %ecx,%eax # ex: addl %ecx,%eax 564189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG (%eax,rINST_FULL) 564289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 564389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 564489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 564589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 564689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 564789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 564889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 564989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SHL_INT_LIT8: /* 0xe0 */ 565089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SHL_INT_LIT8.S */ 565189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopLit8.S */ 565289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 565389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 565489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 565589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 565689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than r0, you can override "result".) 565789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 565889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 565989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 566089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 566189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 566289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 566389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 566489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 566589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 566689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 566789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sall %cl,%eax # ex: addl %ecx,%eax 566889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG (%eax,rINST_FULL) 566989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 567089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 567189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 567289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 567389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 567489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 567589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 567689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_SHR_INT_LIT8: /* 0xe1 */ 567789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_SHR_INT_LIT8.S */ 567889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopLit8.S */ 567989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 568089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 568189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 568289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 568389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than r0, you can override "result".) 568489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 568589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 568689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 568789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 568889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 568989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 569089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 569189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 569289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 569389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 569489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl %cl,%eax # ex: addl %ecx,%eax 569589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG (%eax,rINST_FULL) 569689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 569789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 569889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 569989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 570089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 570189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 570289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 570389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_USHR_INT_LIT8: /* 0xe2 */ 570489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_USHR_INT_LIT8.S */ 570589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/binopLit8.S */ 570689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 570789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 570889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 570989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 571089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * comes back in a register other than r0, you can override "result".) 571189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 571289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 571389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 571489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 571589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 571689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 571789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 571889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 571989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 572089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 572189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project shrl %cl,%eax # ex: addl %ecx,%eax 572289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG (%eax,rINST_FULL) 572389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 572489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 572589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 572689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 572789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 572889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 572989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 573089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_E3: /* 0xe3 */ 573189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_E3.S */ 573289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 573389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 573489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 573589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 573689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 573789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 573889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_E4: /* 0xe4 */ 573989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_E4.S */ 574089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 574189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 574289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 574389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 574489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 574589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 574689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_E5: /* 0xe5 */ 574789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_E5.S */ 574889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 574989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 575089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 575189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 575289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 575389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 575489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_E6: /* 0xe6 */ 575589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_E6.S */ 575689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 575789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 575889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 575989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 576089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 576189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 576289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_E7: /* 0xe7 */ 576389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_E7.S */ 576489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 576589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 576689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 576789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 576889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 576989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 577089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_E8: /* 0xe8 */ 577189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_E8.S */ 577289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 577389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 577489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 577589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 577689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 577789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 577889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_E9: /* 0xe9 */ 577989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_E9.S */ 578089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 578189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 578289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 578389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 578489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 578589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 578689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_EA: /* 0xea */ 578789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_EA.S */ 578889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 578989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 579089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 579189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 579289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 579389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 579489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_EB: /* 0xeb */ 579589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_EB.S */ 579689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 579789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 579889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 579989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 580089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 580189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 580289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_EC: /* 0xec */ 580389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_EC.S */ 580489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 580589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 580689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 580789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 580889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 580989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 581089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_ED: /* 0xed */ 581189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_ED.S */ 581289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 581389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 581489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 581589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 581689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 581789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 581889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_EXECUTE_INLINE: /* 0xee */ 581989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_EXECUTE_INLINE.S */ 582089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 582189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Execute a "native inline" instruction. 582289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 582389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * We will be calling through a function table: 582489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 582589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * (*gDvmInlineOpsTable[opIndex].func)(arg0, arg1, arg2, arg3, pResult) 582689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 582789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 582889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* [opt] execute-inline vAA, {vC, vD, vE, vF}, inline@BBBB */ 582989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 583089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 583189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 583289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal offGlue_retval(%ecx),%ecx # ecx<- & glue->retval 583389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG4(%esp) 583489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- arg count (0-4) 583589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 583689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call .LOP_EXECUTE_INLINE_continue # make call; will return after 583789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 583889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # successful? 583989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(3) 584089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_exceptionThrown # no, handle exception 584189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(3) 584289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 584389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 584489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 584589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 584689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_EF: /* 0xef */ 584789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_EF.S */ 584889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 584989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 585089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 585189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 585289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 585389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 585489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INVOKE_DIRECT_EMPTY: /* 0xf0 */ 585589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT_EMPTY.S */ 585689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 585789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * invoke-direct-empty is a no-op in a "standard" interpreter. 585889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 585989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(3) 586089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(3) 586189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 586289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 586389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 586489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 586589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_F1: /* 0xf1 */ 586689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_F1.S */ 586789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 586889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 586989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 587089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 587189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 587289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 587389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IGET_QUICK: /* 0xf2 */ 587489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IGET_QUICK.S */ 587589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* For: iget-quick, iget-object-quick */ 587689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB, offset@CCCC */ 587789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 587889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 587989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 588089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 588189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0,%ecx # is object null? 588289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject 588389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,1),%eax 588489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx 588589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 588689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 588789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # rINST_FULL<- A 588889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG (%eax,%ecx) # fp[A]<- result 588989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 589089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 589189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 589289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 589389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IGET_WIDE_QUICK: /* 0xf3 */ 589489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IGET_WIDE_QUICK.S */ 589589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* For: iget-wide-quick */ 589689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB, offset@CCCC */ 589789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 589889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 589989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 590089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 590189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0,%ecx # is object null? 590289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject 590389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal (%ecx,%eax,1),%eax # eax<- address of 64-bit source 590489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax),%ecx # ecx<- lsw 590589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 4(%eax),%eax # eax<- msw 590689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL 590789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 590889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,0) # v[A+0]<- lsw 590989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[A+1]<- msw 591089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 591189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 591289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 591389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 591489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 591589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 591689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IGET_OBJECT_QUICK: /* 0xf4 */ 591789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IGET_OBJECT_QUICK.S */ 591889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IGET_QUICK.S */ 591989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* For: iget-quick, iget-object-quick */ 592089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB, offset@CCCC */ 592189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 592289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 592389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 592489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 592589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0,%ecx # is object null? 592689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject 592789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,1),%eax 592889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx 592989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 593089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 593189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # rINST_FULL<- A 593289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG (%eax,%ecx) # fp[A]<- result 593389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 593489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 593589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 593689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 593789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 593889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IPUT_QUICK: /* 0xf5 */ 593989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IPUT_QUICK.S */ 594089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* For: iput-quick, iput-object-quick */ 594189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB, offset@CCCC */ 594289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 594389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 594489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 594589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL 594689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 594789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 594889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 594989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # is object null? 595089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject 595189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,(%ecx,%eax,1) 595289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 595389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 595489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 595589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 595689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 595789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 595889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IPUT_WIDE_QUICK: /* 0xf6 */ 595989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IPUT_WIDE_QUICK.S */ 596089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* For: iput-wide-quick */ 596189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB, offset@CCCC */ 596289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 596389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 596489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 596589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 596689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # is object null? 596789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject 596889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal (%ecx,%eax,1),%ecx # ecx<- Address of 64-bit target 596989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL 597089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 597189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- lsw 597289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rINST_FULL,rINST_FULL,1) # rINST_FULL<- msw 597389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,(%ecx) 597489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,4(%ecx) 597589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 597689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 597789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 597889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 597989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 598089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 598189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_IPUT_OBJECT_QUICK: /* 0xf7 */ 598289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IPUT_OBJECT_QUICK.S */ 598389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_IPUT_QUICK.S */ 598489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* For: iput-quick, iput-object-quick */ 598589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vA, vB, offset@CCCC */ 598689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 598789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%ecx # ecx<- B 598889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 598989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL 599089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 599189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 599289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 599389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # is object null? 599489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject 599589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,(%ecx,%eax,1) 599689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 599789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 599889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 599989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 600089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 600189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 600289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 600389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INVOKE_VIRTUAL_QUICK: /* 0xf8 */ 600489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK.S */ 600589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 600689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Handle an optimized virtual method call. 600789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 600889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: [opt] invoke-virtual-quick, invoke-virtual-quick/range 600989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 601089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 601189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 601289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 601389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 601489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if (!0) 601589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 601689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 601789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vC ("this" ptr) 601889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null? 601989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # yep, throw exception 602089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- thisPtr->clazz 602189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- thisPtr->clazz->vtable 602289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() # might throw later - get ready 602389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[BBBB] 6024c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 6025c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 602689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 602789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 602889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 602989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 603089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INVOKE_VIRTUAL_QUICK_RANGE: /* 0xf9 */ 603189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK_RANGE.S */ 603289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK.S */ 603389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 603489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Handle an optimized virtual method call. 603589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 603689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: [opt] invoke-virtual-quick, invoke-virtual-quick/range 603789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 603889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 603989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 604089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 604189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 604289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if (!1) 604389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 604489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 604589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vC ("this" ptr) 604689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null? 604789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # yep, throw exception 604889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- thisPtr->clazz 604989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- thisPtr->clazz->vtable 605089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() # might throw later - get ready 605189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[BBBB] 6052c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 6053c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 605489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 605589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 605689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 605789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 605889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 605989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INVOKE_SUPER_QUICK: /* 0xfa */ 606089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK.S */ 606189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 606289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Handle an optimized "super" method call. 606389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 606489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: [opt] invoke-super-quick, invoke-super-quick/range 606589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 606689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 606789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 606889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 606989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 4(rPC),%eax # eax<- GFED or CCCC 607089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 607189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if (!0) 607289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl $0xf,%eax # eax<- D (or stays CCCC) 607389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 607489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 607589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- "this" 607689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offClassObject_super(%ecx),%ecx # ecx<- method->clazz->super 607789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null "this"? 607889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # "this" is null, throw exception 607989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 608089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- vtable 608189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 608289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- super->vtable[BBBB] 6083c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 608489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 608589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 608689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 608789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 608889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_INVOKE_SUPER_QUICK_RANGE: /* 0xfb */ 608989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK_RANGE.S */ 609089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK.S */ 609189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 609289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Handle an optimized "super" method call. 609389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 609489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: [opt] invoke-super-quick, invoke-super-quick/range 609589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 609689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 609789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 609889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 609989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 4(rPC),%eax # eax<- GFED or CCCC 610089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 610189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if (!1) 610289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl $0xf,%eax # eax<- D (or stays CCCC) 610389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 610489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 610589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- "this" 610689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offClassObject_super(%ecx),%ecx # ecx<- method->clazz->super 610789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null "this"? 610889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # "this" is null, throw exception 610989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 611089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- vtable 611189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 611289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- super->vtable[BBBB] 6113c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 611489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 611589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 611689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 611789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 611889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 611989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_FC: /* 0xfc */ 612089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_FC.S */ 612189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 612289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 612389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 612489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 612589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 612689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 612789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_FD: /* 0xfd */ 612889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_FD.S */ 612989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 613089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 613189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 613289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 613389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 613489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 613589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_FE: /* 0xfe */ 613689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_FE.S */ 613789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 613889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 613989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 614089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 614189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* ------------------------------ */ 614289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 614389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L_OP_UNUSED_FF: /* 0xff */ 614489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/OP_UNUSED_FF.S */ 614589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/unused.S */ 614689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_abort 614789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 614889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 614989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 615089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 64 615189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .size dvmAsmInstructionStart, .-dvmAsmInstructionStart 615289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .global dvmAsmInstructionEnd 615389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source ProjectdvmAsmInstructionEnd: 615489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 615589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 615689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * =========================================================================== 615789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Sister implementations 615889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * =========================================================================== 615989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 616089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .global dvmAsmSisterStart 616189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .type dvmAsmSisterStart, %function 616289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .text 616389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .balign 4 616489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source ProjectdvmAsmSisterStart: 616589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 616689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_CONST_STRING */ 616789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 616889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* This is the less common path, so we'll redo some work 616989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project here rather than force spills on the common path */ 617089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_CONST_STRING_resolve: 617189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%eax) 617289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,rINST_FULL # rINST_FULL<- AA 617389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 617489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 617589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 617689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%eax),%eax 617789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 617889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 617989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) 618089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveString # go resolve 618189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 618289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # failed? 618389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_exceptionThrown 618489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,rINST_FULL) 618589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 618689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 618789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 618889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 618989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 619089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_CONST_STRING_JUMBO */ 619189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 619289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* This is the less common path, so we'll redo some work 619389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project here rather than force spills on the common path */ 619489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_CONST_STRING_JUMBO_resolve: 619589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%eax) 619689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,rINST_FULL # rINST_FULL<- AA 619789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 619889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 619989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 2(rPC),%ecx # ecx<- BBBBBBBB 620089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%eax),%eax 620189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 620289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 620389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) 620489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveString # go resolve 620589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 620689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # failed? 620789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_exceptionThrown 620889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,rINST_FULL) 620989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(3) 621089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(3) 621189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 621289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 621389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 621489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_CONST_CLASS */ 621589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 621689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* This is the less common path, so we'll redo some work 621789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project here rather than force spills on the common path */ 621889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_CONST_CLASS_resolve: 621989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%eax) 622089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,rINST_FULL # rINST_FULL<- AA 622189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 622289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 622389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $1,OUT_ARG2(%esp) # true 622489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 622589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%eax),%eax 622689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 622789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 622889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) 622989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveClass # go resolve 623089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 623189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # failed? 623289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_exceptionThrown 623389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,rINST_FULL) 623489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 623589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 623689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 623789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 623889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 623989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_MONITOR_ENTER */ 624089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 624189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_MONITOR_ENTER_continue: 624289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) # have to - caller save 624389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 624489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 624589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmLockObject # dvmLockObject(self,object) 624689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 624789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#ifdef WITH_DEADLOCK_PREDICTION 624889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 624989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlueSelf(%ecx),%ecx # ecx<- glue->self 625089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offThread_exception(%ecx),%eax 625189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 625289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne common_exceptionThrown 625389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#endif 625489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 625589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 625689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 625789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_MONITOR_EXIT */ 625889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 625989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_MONITOR_EXIT_continue: 626089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmUnlockObject # unlock(self,obj) 626189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 626289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 626389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # success? 626489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_exceptionThrown # no, exception pending 626589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 626689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 626789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 626889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_CHECK_CAST */ 626989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 627089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 627189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Trivial test failed, need to perform full check. This is common. 627289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds obj->clazz 627389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds class resolved from BBBB 627489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL holds object 627589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 627689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_CHECK_CAST_fullcheck: 627789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 627889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 627989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 628089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmInstanceofNonTrivial # eax<- boolean result 628189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 628289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # failed? 628389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_CHECK_CAST_okay # no, success 628489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 628589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project # A cast has failed. We need to throw a ClassCastException with the 628689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project # class of the object that failed to be cast. 628789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 628889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offObject_clazz(rINST_FULL),%ecx # ecx<- obj->clazz 628989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $.LstrClassCastException,%eax 629089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offClassObject_descriptor(%ecx),%ecx 629189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- message 629289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- obj->clazz->descriptor 629389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 629489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmThrowExceptionWithClassMessage 629589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 629689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 629789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 629889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 629989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Resolution required. This is the least-likely path, and we're 630089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * going to have to recreate some data. 630189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 630289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL holds object 630389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 630489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_CHECK_CAST_resolve: 630589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 630689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 630789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 630889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 630989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 631089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- metho->clazz 631189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0,OUT_ARG2(%esp) # arg2<- false 631289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- method->clazz 631389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 631489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveClass # eax<- resolved ClassObject ptr 631589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 631689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # got null? 631789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_exceptionThrown # yes, handle exception 631889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offObject_clazz(rINST_FULL),%ecx # ecx<- obj->clazz 631989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_CHECK_CAST_resolved # pick up where we left off 632089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 632189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_INSTANCE_OF */ 632289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 632389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 632489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Trivial test failed, need to perform full check. This is common. 632589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds obj->clazz 632689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds class resolved from BBBB 632789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_HI has BA 632889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rPC already spilled 632989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 633089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INSTANCE_OF_fullcheck: 633189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) 633289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 633389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmInstanceofNonTrivial # eax<- boolean result 633489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project # fall through to OP_INSTANCE_OF_store 633589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 633689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 633789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds boolean result 633889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_HI holds BA 633989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 634089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INSTANCE_OF_store: 634189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 634289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 634389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 634489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecl<- A 634589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 634689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) # vA<- eax 634789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 634889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 634989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 635089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Trivial test succeeded, save and bail. 635189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * r9 holds A 635289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 635389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INSTANCE_OF_trivial: 635489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 635589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 635689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 635789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andb $0xf,%cl # ecl<- A 635889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 635989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $1,%eax 636089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) # vA<- true 636189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 636289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 636389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 636489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Resolution required. This is the least-likely path. 636589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 636689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rPC holds BBBB 636789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_HI holds BA 636889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 636989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INSTANCE_OF_resolve: 637089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG1(%esp) # arg1<- BBBB 637189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 637289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 637389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx 637489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $1,OUT_ARG2(%esp) # arg2<- true 637589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 637689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 637789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- method->clazz 637889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveClass # eax<- resolved ClassObject ptr 637989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 638089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # success? 638189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_exceptionThrown # no, handle exception 638289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* Now, we need to sync up with fast path. We need eax to 638389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * hold the obj->clazz, and ecx to hold the resolved class 638489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 638589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,%ecx # ecx<- resolved class 638689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 638789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,%eax # eax<- B 638889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB (obj) 638989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- obj->clazz 639089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_INSTANCE_OF_resolved 639189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 639289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 639389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_NEW_INSTANCE */ 639489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 639589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_NEW_INSTANCE_initialized: # on entry, ecx<- class 639689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl $(ACC_INTERFACE|ACC_ABSTRACT),offClassObject_accessFlags(%ecx) 639789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $ALLOC_DONT_TRACK,OUT_ARG1(%esp) 639889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_NEW_INSTANCE_abstract 639989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_NEW_INSTANCE_finish: # ecx=class 640089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 640189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmAllocObject # eax<- new object 640289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 640389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%ecx 640489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 640589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # success? 640689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_exceptionThrown # no, bail out 640789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 640889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 640989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 641089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 641189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 641289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Class initialization required. 641389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 641489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds class object 641589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 641689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_NEW_INSTANCE_needinit: 641789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%ecx) # save object 641889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 641989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmInitClass # initialize class 642089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%ecx) # restore object 642189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # success? 642289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_NEW_INSTANCE_initialized # success, continue 642389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) # failed, restore PC 642489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown # go deal with init exception 642589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 642689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 642789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Resolution required. This is the least-likely path. 642889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 642989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 643089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_NEW_INSTANCE_resolve: 643189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 643289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax 643389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 643489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 643589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 643689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0,OUT_ARG2(%esp) 643789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 643889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveClass # call(clazz,off,flags) 643989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,%ecx # ecx<- resolved ClassObject ptr 644089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # success? 644189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_NEW_INSTANCE_resolved # good to go 644289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 644389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown # no, handle exception 644489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 644589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 644689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * We can't instantiate an abstract class or interface, so throw an 644789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * InstantiationError with the class descriptor as the message. 644889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 644989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds class object 645089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 645189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_NEW_INSTANCE_abstract: 645289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offClassObject_descriptor(%ecx),%eax 64534c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project movl $.LstrInstantiationError,OUT_ARG0(%esp) 64544c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project movl %eax,OUT_ARG1(%esp) 645589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmThrowExceptionWithClassMessage 645689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 645789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 645889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 645989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 646089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 646189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 646289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_NEW_ARRAY */ 646389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 646489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 646589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Resolve class. (This is an uncommon case.) 646689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds class (null here) 646789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds array length (vB) 646889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 646989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_NEW_ARRAY_resolve: 647089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 647189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%eax) # save array length 647289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 647389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- CCCC 647489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 647589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 647689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0,OUT_ARG2(%esp) 647789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 647889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 647989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveClass # eax<- call(clazz,ref,flag) 648089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 648189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,%ecx 648289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%eax) 648389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # successful resolution? 648489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_exceptionThrown # no, bail. 648589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project# fall through to OP_NEW_ARRAY_finish 648689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 648789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 648889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Finish allocation 648989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 649089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds class 649189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds array length (vB) 649289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 649389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_NEW_ARRAY_finish: 649489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 649589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 649689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $ALLOC_DONT_TRACK,OUT_ARG2(%esp) 649789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 649889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmAllocArrayByClass # eax<- call(clazz,length,flags) 649989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 650089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # failed? 650189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_exceptionThrown # yup - go handle 650289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%ecx 650389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 650489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 650589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 650689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 650789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 650889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 650989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_FILLED_NEW_ARRAY */ 651089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 651189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_FILLED_NEW_ARRAY_more: 651289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 651389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- clazz 651489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveClass # eax<- call(clazz,ref,flag) 651589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 651689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null? 651789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_exceptionThrown # yes, handle it 651889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 651989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project # note: fall through to .LOP_FILLED_NEW_ARRAY_continue 652089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 652189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 652289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * On entry: 652389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds array class [r0] 652489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL holds AA or BB [r10] 652589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx is scratch 652689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rPC is valid, but has been spilled 652789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 652889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_FILLED_NEW_ARRAY_continue: 652989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offClassObject_descriptor(%eax),%ecx # ecx<- arrayClass->descriptor 653089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $ALLOC_DONT_TRACK,OUT_ARG2(%esp) # arg2<- flags 653189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 1(%ecx),%ecx # ecx<- descriptor[1] 653289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- typeCh 653389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpb $'I',%cl # supported? 653489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_notimpl # no, not handled yet 653589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if (!0) 653689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(rINST_FULL) # save copy, need "B" later 653789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,rINST_FULL 653889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 653989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,OUT_ARG1(%esp) # arg1<- A or AA (length) 654089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmAllocPrimitiveArray # eax<- call(typeCh, length, flags) 654189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 654289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 654389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # alloc successful? 654489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_exceptionThrown # no, handle exception 654589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,offGlue_retval(%ecx) # retval.l<- new array 654689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- FEDC or CCCC 654789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal offArrayObject_contents(%eax),%eax # eax<- newArray->contents 654889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 654989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* at this point: 655089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax is pointer to tgt 655189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL is length 655289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx is FEDC or CCCC 655389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * TMP_SPILL is BA 655489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rPC is valid, but spilled 655589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * We now need to copy values from registers into the array 655689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 655789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 655889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 0 655989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project # set up src pointer 656089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rFP) # esi 656189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rIBASE) # edi 656289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,%edi # set up dst ptr 656389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal (rFP,%ecx,4),%esi # set up src ptr 656489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%ecx # load count register 656589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(3) 656689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project rep 656789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movsd 656889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 656989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rFP) 657089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .else 657189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rINST_FULL,rINST_FULL 657289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je 4f 657389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(rPC) 65744c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project andl $0x0f,rPC # rPC<- 0000000A 65754c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project sall $16,rPC # rPC<- 000A0000 65764c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project orl %ecx,rPC # rpc<- 000AFEDC 657789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project3: 657889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0xf,%ecx 657989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl rPC,%ecx # ecx<- next reg to load 658089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) 658189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project shrl $4,rPC 658289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal 4(%eax),%eax 658389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,-4(%eax) 658489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sub $1,rINST_FULL 658589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne 3b 658689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project4: 658789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 658889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(3) 658989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 659089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 659189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(3) 659289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 659389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 659489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 659589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 659689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Throw an exception indicating that we have not implemented this 659789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * mode of filled-new-array. 659889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 659989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_FILLED_NEW_ARRAY_notimpl: 660089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $.LstrInternalError,%eax 660189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) 660289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $.LstrFilledNewArrayNotImpl,%eax 660389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 660489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmThrowException 660589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 660689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 660789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 660889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 660989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_FILLED_NEW_ARRAY_RANGE */ 661089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 661189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_FILLED_NEW_ARRAY_RANGE_more: 661289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 661389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- clazz 661489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveClass # eax<- call(clazz,ref,flag) 661589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 661689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # null? 661789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_exceptionThrown # yes, handle it 661889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 661989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project # note: fall through to .LOP_FILLED_NEW_ARRAY_RANGE_continue 662089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 662189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 662289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * On entry: 662389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds array class [r0] 662489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL holds AA or BB [r10] 662589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx is scratch 662689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rPC is valid, but has been spilled 662789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 662889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_FILLED_NEW_ARRAY_RANGE_continue: 662989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offClassObject_descriptor(%eax),%ecx # ecx<- arrayClass->descriptor 663089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $ALLOC_DONT_TRACK,OUT_ARG2(%esp) # arg2<- flags 663189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl 1(%ecx),%ecx # ecx<- descriptor[1] 663289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- typeCh 663389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpb $'I',%cl # supported? 663489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_RANGE_notimpl # no, not handled yet 663589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if (!1) 663689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(rINST_FULL) # save copy, need "B" later 663789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,rINST_FULL 663889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 663989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,OUT_ARG1(%esp) # arg1<- A or AA (length) 664089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmAllocPrimitiveArray # eax<- call(typeCh, length, flags) 664189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 664289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 664389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # alloc successful? 664489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_exceptionThrown # no, handle exception 664589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,offGlue_retval(%ecx) # retval.l<- new array 664689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- FEDC or CCCC 664789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal offArrayObject_contents(%eax),%eax # eax<- newArray->contents 664889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 664989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* at this point: 665089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax is pointer to tgt 665189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL is length 665289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx is FEDC or CCCC 665389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * TMP_SPILL is BA 665489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rPC is valid, but spilled 665589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * We now need to copy values from registers into the array 665689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 665789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 665889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 1 665989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project # set up src pointer 666089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rFP) # esi 666189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rIBASE) # edi 666289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,%edi # set up dst ptr 666389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal (rFP,%ecx,4),%esi # set up src ptr 666489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%ecx # load count register 666589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(3) 666689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project rep 666789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movsd 666889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 666989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rFP) 667089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .else 667189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rINST_FULL,rINST_FULL 667289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je 4f 667389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(rPC) 66744c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project andl $0x0f,rPC # rPC<- 0000000A 66754c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project sall $16,rPC # rPC<- 000A0000 66764c1a2915e40eceeb68dbc323d28b8bf8763af83bThe Android Open Source Project orl %ecx,rPC # rpc<- 000AFEDC 667789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project3: 667889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0xf,%ecx 667989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl rPC,%ecx # ecx<- next reg to load 668089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) 668189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project shrl $4,rPC 668289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal 4(%eax),%eax 668389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,-4(%eax) 668489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sub $1,rINST_FULL 668589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne 3b 668689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project4: 668789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 668889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(3) 668989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 669089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 669189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(3) 669289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 669389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 669489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 669589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 669689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Throw an exception indicating that we have not implemented this 669789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * mode of filled-new-array. 669889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 669989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_FILLED_NEW_ARRAY_RANGE_notimpl: 670089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $.LstrInternalError,%eax 670189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) 670289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $.LstrFilledNewArrayNotImpl,%eax 670389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 670489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmThrowException 670589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 670689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 670789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 670889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 670989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_CMPL_FLOAT */ 671089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 671189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_CMPL_FLOAT_isNaN: 671289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $-1,%ecx 671389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_CMPL_FLOAT_finish 671489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 671589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_CMPG_FLOAT */ 671689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 671789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_CMPG_FLOAT_isNaN: 671889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $1,%ecx 671989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_CMPG_FLOAT_finish 672089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 672189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_CMPL_DOUBLE */ 672289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 672389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_CMPL_DOUBLE_isNaN: 672489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $-1,%ecx 672589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_CMPL_DOUBLE_finish 672689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 672789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_CMPG_DOUBLE */ 672889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 672989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_CMPG_DOUBLE_isNaN: 673089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $1,%ecx 673189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_CMPG_DOUBLE_finish 673289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 673389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_CMP_LONG */ 673489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 673589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_CMP_LONG_bigger: 673689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 673789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $1,%ecx 673889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_CMP_LONG_finish 673989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_CMP_LONG_smaller: 674089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 674189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $-1,%ecx 674289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_CMP_LONG_finish: 674389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%ecx,rINST_FULL) 674489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 674589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 674689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 674789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 674889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_AGET_WIDE */ 674989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 675089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_AGET_WIDE_finish: 675189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,8),%eax 675289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax),%ecx 675389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 4(%eax),%eax 675489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,0) 675589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) 675689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 675789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 675889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 675989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 676089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 676189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_APUT_WIDE */ 676289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 676389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_APUT_WIDE_finish: 676489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,8),%eax 676589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,0) 676689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rINST_FULL,rINST_FULL,1) 676789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,4(%eax) 676889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 676989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,(%eax) 677089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 677189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 677289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 677389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 677489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_APUT_OBJECT */ 677589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 677689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* On entry: 677789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax<- array object 677889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx<- index 677989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL<- vAA 678089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 678189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_APUT_OBJECT_continue: 678289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,4),%ecx 678389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rINST_FULL,rINST_FULL # storing null reference? 678489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_APUT_OBJECT_skip_check 678589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 678689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%ecx) 678789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- arrayObj->clazz 678889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offObject_clazz(rINST_FULL),%ecx # ecx<- obj->clazz 678989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 679089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 679189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmCanPutArrayElement # test object type vs. array type 679289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 679389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%ecx) 679489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 679589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errArrayStore 679689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 679789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_APUT_OBJECT_skip_check: 679889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,(%ecx) 679989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 680089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 680189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 680289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 680389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 680489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_IGET */ 680589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 680689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 680789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IGET_resolve: 680889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 680989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 681089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 681189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 681289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 681389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 681489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 681589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 681689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%ecx) 681789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 681889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 681989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IGET_finish 682089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 682189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 682289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IGET_finish: 682389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 682489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Currently: 682589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds resolved field 682689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds object 682789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 682889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL holds A 682989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 683089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 683189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 683289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # object null? 683389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # object was null 683489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 683589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax # eax<- A 683689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 683789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%ecx,%eax) 683889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 683989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 684089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 684189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 684289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_IGET_WIDE */ 684389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 684489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 684589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IGET_WIDE_resolve: 684689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 684789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 684889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 684989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 685089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 685189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 685289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 685389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 685489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%ecx) 685589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 685689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 685789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IGET_WIDE_finish 685889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 685989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 686089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IGET_WIDE_finish: 686189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 686289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Currently: 686389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds resolved field 686489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds object 686589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 686689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL holds A 686789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 686889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 686989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 687089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # object null? 687189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # object was null 687289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal (%ecx,%eax,1),%eax # eax<- address of field 687389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax),%ecx # ecx<- lsw 687489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 4(%eax),%eax # eax<- msw 687589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,0) 687689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) 687789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 687889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 687989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 688089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 688189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 688289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_IGET_OBJECT */ 688389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 688489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 688589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IGET_OBJECT_resolve: 688689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 688789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 688889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 688989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 689089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 689189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 689289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 689389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 689489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%ecx) 689589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 689689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 689789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IGET_OBJECT_finish 689889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 689989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 690089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IGET_OBJECT_finish: 690189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 690289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Currently: 690389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds resolved field 690489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds object 690589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 690689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL holds A 690789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 690889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 690989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 691089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # object null? 691189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # object was null 691289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 691389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax # eax<- A 691489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 691589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%ecx,%eax) 691689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 691789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 691889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 691989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 692089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_IGET_BOOLEAN */ 692189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 692289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 692389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IGET_BOOLEAN_resolve: 692489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 692589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 692689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 692789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 692889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 692989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 693089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 693189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 693289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%ecx) 693389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 693489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 693589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IGET_BOOLEAN_finish 693689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 693789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 693889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IGET_BOOLEAN_finish: 693989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 694089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Currently: 694189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds resolved field 694289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds object 694389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 694489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL holds A 694589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 694689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 694789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 694889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # object null? 694989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # object was null 695089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 695189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax # eax<- A 695289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 695389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%ecx,%eax) 695489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 695589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 695689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 695789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 695889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_IGET_BYTE */ 695989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 696089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 696189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IGET_BYTE_resolve: 696289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 696389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 696489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 696589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 696689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 696789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 696889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 696989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 697089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%ecx) 697189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 697289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 697389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IGET_BYTE_finish 697489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 697589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 697689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IGET_BYTE_finish: 697789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 697889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Currently: 697989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds resolved field 698089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds object 698189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 698289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL holds A 698389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 698489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 698589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 698689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # object null? 698789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # object was null 698889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movsbl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 698989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax # eax<- A 699089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 699189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%ecx,%eax) 699289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 699389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 699489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 699589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 699689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_IGET_CHAR */ 699789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 699889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 699989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IGET_CHAR_resolve: 700089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 700189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 700289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 700389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 700489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 700589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 700689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 700789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 700889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%ecx) 700989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 701089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 701189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IGET_CHAR_finish 701289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 701389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 701489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IGET_CHAR_finish: 701589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 701689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Currently: 701789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds resolved field 701889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds object 701989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 702089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL holds A 702189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 702289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 702389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 702489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # object null? 702589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # object was null 702689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 702789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax # eax<- A 702889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 702989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%ecx,%eax) 703089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 703189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 703289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 703389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 703489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_IGET_SHORT */ 703589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 703689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 703789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IGET_SHORT_resolve: 703889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 703989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 704089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 704189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 704289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 704389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 704489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 704589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 704689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%ecx) 704789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 704889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 704989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IGET_SHORT_finish 705089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 705189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 705289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IGET_SHORT_finish: 705389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 705489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Currently: 705589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds resolved field 705689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds object 705789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 705889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL holds A 705989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 706089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 706189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 706289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # object null? 706389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # object was null 706489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movswl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 706589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%eax # eax<- A 706689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 706789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%ecx,%eax) 706889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 706989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 707089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 707189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 707289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_IPUT */ 707389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 707489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 707589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IPUT_resolve: 707689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 707789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 707889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 707989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 708089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 708189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 708289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 708389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 708489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%ecx) 708589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 708689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 708789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IPUT_finish 708889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 708989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 709089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IPUT_finish: 709189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 709289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Currently: 709389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds resolved field 709489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds object 709589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 709689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL holds A 709789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 709889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 709989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 710089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 710189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # object null? 710289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # object was null 710389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 710489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 710589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 710689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 710789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 710889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_IPUT_WIDE */ 710989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 711089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 711189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IPUT_WIDE_resolve: 711289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 711389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 711489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 711589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 711689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 711789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 711889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 711989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 712089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%ecx) 712189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 712289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 712389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IPUT_WIDE_finish 712489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 712589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 712689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IPUT_WIDE_finish: 712789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 712889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Currently: 712989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds resolved field 713089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds object 713189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 713289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL holds A 713389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 713489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 713589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 713689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # object null? 713789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # object was null 713889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal (%ecx,%eax,1),%eax # eax<- address of field 713989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,0) # ecx<- lsw 714089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rINST_FULL,rINST_FULL,1) # rINST_FULL<- msw 714189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,4(%eax) 714289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 714389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,(%eax) 714489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 714589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 714689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 714789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_IPUT_OBJECT */ 714889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 714989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 715089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IPUT_OBJECT_resolve: 715189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 715289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 715389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 715489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 715589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 715689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 715789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 715889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 715989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%ecx) 716089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 716189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 716289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IPUT_OBJECT_finish 716389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 716489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 716589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IPUT_OBJECT_finish: 716689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 716789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Currently: 716889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds resolved field 716989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds object 717089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 717189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL holds A 717289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 717389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 717489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 717589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 717689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # object null? 717789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # object was null 717889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 717989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 718089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 718189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 718289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 718389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_IPUT_BOOLEAN */ 718489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 718589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 718689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IPUT_BOOLEAN_resolve: 718789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 718889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 718989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 719089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 719189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 719289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 719389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 719489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 719589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%ecx) 719689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 719789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 719889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IPUT_BOOLEAN_finish 719989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 720089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 720189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IPUT_BOOLEAN_finish: 720289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 720389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Currently: 720489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds resolved field 720589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds object 720689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 720789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL holds A 720889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 720989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 721089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 721189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 721289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # object null? 721389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # object was null 721489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movb rINST_LO,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 721589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 721689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 721789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 721889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 721989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_IPUT_BYTE */ 722089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 722189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 722289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IPUT_BYTE_resolve: 722389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 722489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 722589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 722689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 722789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 722889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 722989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 723089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 723189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%ecx) 723289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 723389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 723489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IPUT_BYTE_finish 723589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 723689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 723789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IPUT_BYTE_finish: 723889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 723989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Currently: 724089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds resolved field 724189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds object 724289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 724389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL holds A 724489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 724589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 724689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 724789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 724889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # object null? 724989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # object was null 725089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movb rINST_LO,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 725189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 725289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 725389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 725489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 725589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_IPUT_CHAR */ 725689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 725789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 725889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IPUT_CHAR_resolve: 725989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 726089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 726189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 726289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 726389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 726489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 726589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 726689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 726789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%ecx) 726889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 726989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 727089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IPUT_CHAR_finish 727189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 727289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 727389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IPUT_CHAR_finish: 727489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 727589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Currently: 727689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds resolved field 727789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds object 727889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 727989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL holds A 728089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 728189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 728289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 728389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 728489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # object null? 728589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # object was null 728689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movw rINST,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 728789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 728889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 728989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 729089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 729189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_IPUT_SHORT */ 729289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 729389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 729489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IPUT_SHORT_resolve: 729589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 729689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 729789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 729889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 729989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 730089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 730189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 730289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 730389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%ecx) 730489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 730589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 730689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_IPUT_SHORT_finish 730789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 730889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 730989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_IPUT_SHORT_finish: 731089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 731189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Currently: 731289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax holds resolved field 731389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds object 731489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 731589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL holds A 731689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 731789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 731889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 731989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 732089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # object null? 732189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # object was null 732289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movw rINST,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 732389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 732489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 732589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 732689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 732789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_SGET */ 732889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 732989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 733089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Go resolve the field 733189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 733289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SGET_resolve: 733389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 733489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 733589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 733689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() # could throw, need to export 733789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 733889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 733989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 734089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 734189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 734289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 734389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 734489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_SGET_finish # success, continue 734589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown # no, handle exception 734689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 734789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 734889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_SGET_WIDE */ 734989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 735089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 735189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Go resolve the field 735289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 735389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SGET_WIDE_resolve: 735489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 735589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 735689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 735789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() # could throw, need to export 735889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 735989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 736089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 736189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 736289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 736389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 736489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 736589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_SGET_WIDE_finish # success, continue 736689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown # no, handle exception 736789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 736889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 736989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_SGET_OBJECT */ 737089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 737189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 737289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Go resolve the field 737389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 737489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SGET_OBJECT_resolve: 737589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 737689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 737789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 737889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() # could throw, need to export 737989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 738089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 738189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 738289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 738389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 738489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 738589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 738689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_SGET_OBJECT_finish # success, continue 738789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown # no, handle exception 738889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 738989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 739089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_SGET_BOOLEAN */ 739189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 739289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 739389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Go resolve the field 739489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 739589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SGET_BOOLEAN_resolve: 739689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 739789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 739889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 739989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() # could throw, need to export 740089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 740189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 740289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 740389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 740489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 740589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 740689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 740789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_SGET_BOOLEAN_finish # success, continue 740889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown # no, handle exception 740989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 741089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 741189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_SGET_BYTE */ 741289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 741389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 741489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Go resolve the field 741589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 741689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SGET_BYTE_resolve: 741789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 741889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 741989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 742089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() # could throw, need to export 742189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 742289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 742389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 742489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 742589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 742689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 742789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 742889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_SGET_BYTE_finish # success, continue 742989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown # no, handle exception 743089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 743189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 743289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_SGET_CHAR */ 743389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 743489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 743589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Go resolve the field 743689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 743789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SGET_CHAR_resolve: 743889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 743989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 744089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 744189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() # could throw, need to export 744289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 744389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 744489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 744589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 744689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 744789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 744889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 744989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_SGET_CHAR_finish # success, continue 745089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown # no, handle exception 745189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 745289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 745389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_SGET_SHORT */ 745489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 745589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 745689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Go resolve the field 745789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 745889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SGET_SHORT_resolve: 745989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 746089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 746189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 746289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() # could throw, need to export 746389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 746489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 746589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 746689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 746789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 746889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 746989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 747089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_SGET_SHORT_finish # success, continue 747189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown # no, handle exception 747289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 747389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 747489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_SPUT */ 747589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 747689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 747789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Go resolve the field 747889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 747989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SPUT_resolve: 748089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 748189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 748289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 748389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() # could throw, need to export 748489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 748589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 748689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 748789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 748889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 748989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 749089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 749189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_SPUT_finish # success, continue 749289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown # no, handle exception 749389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 749489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 749589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_SPUT_WIDE */ 749689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 749789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 749889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Go resolve the field 749989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 750089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SPUT_WIDE_resolve: 750189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 750289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 750389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 750489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() # could throw, need to export 750589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 750689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 750789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 750889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 750989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 751089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 751189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 751289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_SPUT_WIDE_finish # success, continue 751389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown # no, handle exception 751489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 751589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 751689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_SPUT_OBJECT */ 751789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 751889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 751989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Go resolve the field 752089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 752189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SPUT_OBJECT_resolve: 752289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 752389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 752489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 752589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() # could throw, need to export 752689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 752789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 752889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 752989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 753089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 753189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 753289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 753389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_SPUT_OBJECT_finish # success, continue 753489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown # no, handle exception 753589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 753689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 753789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_SPUT_BOOLEAN */ 753889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 753989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 754089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Go resolve the field 754189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 754289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SPUT_BOOLEAN_resolve: 754389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 754489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 754589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 754689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() # could throw, need to export 754789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 754889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 754989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 755089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 755189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 755289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 755389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 755489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_SPUT_BOOLEAN_finish # success, continue 755589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown # no, handle exception 755689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 755789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 755889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_SPUT_BYTE */ 755989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 756089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 756189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Go resolve the field 756289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 756389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SPUT_BYTE_resolve: 756489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 756589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 756689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 756789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() # could throw, need to export 756889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 756989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 757089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 757189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 757289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 757389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 757489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 757589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_SPUT_BYTE_finish # success, continue 757689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown # no, handle exception 757789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 757889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 757989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_SPUT_CHAR */ 758089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 758189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 758289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Go resolve the field 758389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 758489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SPUT_CHAR_resolve: 758589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 758689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 758789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 758889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() # could throw, need to export 758989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 759089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 759189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 759289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 759389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 759489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 759589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 759689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_SPUT_CHAR_finish # success, continue 759789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown # no, handle exception 759889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 759989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 760089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_SPUT_SHORT */ 760189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 760289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 760389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Go resolve the field 760489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 760589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SPUT_SHORT_resolve: 760689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 760789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 760889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 760989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() # could throw, need to export 761089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 761189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 761289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 761389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 761489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 761589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 761689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 761789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_SPUT_SHORT_finish # success, continue 761889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown # no, handle exception 761989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 762089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 762189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_INVOKE_VIRTUAL */ 762289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 762389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 762489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INVOKE_VIRTUAL_more: 762589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%eax),%eax # ecx<- method->clazz 762689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- clazz 762789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- flags 762889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 762989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 763089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # got null? 763189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_continue # no, continue 763289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown # yes, handle exception 763389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 763489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* At this point: 763589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax = resolved base method 763689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx = scratch 763789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 763889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INVOKE_VIRTUAL_continue: 763989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- GFED or CCCC 764089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if (!0) 764189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl $0xf,%ecx # ecx<- D (or stays CCCC) 764289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 764389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- "this" 764489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl offMethod_methodIndex(%eax),%eax # eax<- baseMethod->methodIndex 764589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # null this? 764689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # go if so 764789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offObject_clazz(%ecx),%ecx # ecx<- thisPtr->clazz 764889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- thisPtr->clazz->vtable 764989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- vtable[methodIndex] 7650c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 765189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 765289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 765389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_INVOKE_SUPER */ 765489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 765589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 765689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * At this point: 765789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx = resolved base method [r0] 765889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax = method->clazz [r9] 765989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 766089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INVOKE_SUPER_continue: 766189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offClassObject_super(%eax),%eax # eax<- method->clazz->super 766289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl offMethod_methodIndex(%ecx),%ecx # ecx<- baseMthod->methodIndex 766389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl offClassObject_vtableCount(%eax),%ecx # compare(methodIndex,vtableCount) 766489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jae .LOP_INVOKE_SUPER_nsm # method not present in superclass 766589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- ...clazz->super->vtable 766689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[methodIndex] 7667c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 7668c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 766989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 767089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* At this point: 767189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx = null (needs to be resolved base method) 767289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax = method->clazz 767389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 767489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INVOKE_SUPER_resolve: 767589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%eax) # method->clazz 767689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- method->clazz 767789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 767889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- resolver method type 767989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 768089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 768189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 768289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 768389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # got null? 768489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,%ecx # ecx<- resolved base method 768589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%eax) # restore method->clazz 768689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_INVOKE_SUPER_continue # good to go - continue 768789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown # handle exception 768889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 768989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 769089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Throw a NoSuchMethodError with the method name as the message. 769189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx = resolved base method 769289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 769389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INVOKE_SUPER_nsm: 769489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_name(%ecx),%eax 769589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project mov %eax,OUT_ARG1(%esp) 769689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_errNoSuchMethod 769789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 769889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_INVOKE_DIRECT */ 769989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 770089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 770189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * On entry: 770289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * TMP_SPILL <- "this" register 770389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Things a bit ugly on this path, but it's the less 770489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * frequent one. We'll have to do some reloading. 770589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 770689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INVOKE_DIRECT_resolve: 770789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%ecx) 770889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 770989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 771089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 771189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # reference (BBBB or CCCC) 771289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 771389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $METHOD_DIRECT,OUT_ARG2(%esp) 771489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 771589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 771689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 771789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%ecx) 771889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 771989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_INVOKE_DIRECT_finish 772089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 772189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 772289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 772389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_INVOKE_STATIC */ 772489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 772589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INVOKE_STATIC_continue: 772689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $METHOD_STATIC,%eax 772789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG2(%esp) # arg2<- flags 772889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 772989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveMethod # call(clazz,ref,flags) 773089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 773189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # got null? 7732c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodNoRange 773389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 773489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 773589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 773689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_INVOKE_INTERFACE */ 773789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 773889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INVOKE_INTERFACE_continue: 773989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmFindInterfaceMethodInCache # eax<- call(class, ref, method, dex) 774089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 774189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 774289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_exceptionThrown 7743c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 774489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 774589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 774689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_INVOKE_VIRTUAL_RANGE */ 774789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 774889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 774989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INVOKE_VIRTUAL_RANGE_more: 775089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%eax),%eax # ecx<- method->clazz 775189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- clazz 775289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- flags 775389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 775489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 775589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # got null? 775689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_RANGE_continue # no, continue 775789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown # yes, handle exception 775889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 775989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* At this point: 776089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax = resolved base method 776189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx = scratch 776289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 776389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INVOKE_VIRTUAL_RANGE_continue: 776489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- GFED or CCCC 776589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if (!1) 776689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl $0xf,%ecx # ecx<- D (or stays CCCC) 776789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 776889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- "this" 776989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl offMethod_methodIndex(%eax),%eax # eax<- baseMethod->methodIndex 777089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %ecx,%ecx # null this? 777189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_errNullObject # go if so 777289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offObject_clazz(%ecx),%ecx # ecx<- thisPtr->clazz 777389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- thisPtr->clazz->vtable 777489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- vtable[methodIndex] 7775c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 777689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 777789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 777889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_INVOKE_SUPER_RANGE */ 777989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 778089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 778189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * At this point: 778289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx = resolved base method [r0] 778389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax = method->clazz [r9] 778489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 778589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_continue: 778689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offClassObject_super(%eax),%eax # eax<- method->clazz->super 778789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl offMethod_methodIndex(%ecx),%ecx # ecx<- baseMthod->methodIndex 778889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl offClassObject_vtableCount(%eax),%ecx # compare(methodIndex,vtableCount) 778989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jae .LOP_INVOKE_SUPER_RANGE_nsm # method not present in superclass 779089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- ...clazz->super->vtable 779189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[methodIndex] 7792c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 7793c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 779489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 779589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* At this point: 779689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx = null (needs to be resolved base method) 779789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax = method->clazz 779889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 779989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_resolve: 780089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%eax) # method->clazz 780189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- method->clazz 780289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 780389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- resolver method type 780489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 780589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 780689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 780789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 780889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # got null? 780989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,%ecx # ecx<- resolved base method 781089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%eax) # restore method->clazz 781189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_INVOKE_SUPER_RANGE_continue # good to go - continue 781289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown # handle exception 781389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 781489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 781589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Throw a NoSuchMethodError with the method name as the message. 781689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx = resolved base method 781789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 781889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_nsm: 781989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_name(%ecx),%eax 782089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project mov %eax,OUT_ARG1(%esp) 782189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_errNoSuchMethod 782289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 782389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_INVOKE_DIRECT_RANGE */ 782489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 782589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 782689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * On entry: 782789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * TMP_SPILL <- "this" register 782889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Things a bit ugly on this path, but it's the less 782989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * frequent one. We'll have to do some reloading. 783089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 783189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INVOKE_DIRECT_RANGE_resolve: 783289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL_TMP(%ecx) 783389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 783489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 783589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 783689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # reference (BBBB or CCCC) 783789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 783889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $METHOD_DIRECT,OUT_ARG2(%esp) 783989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 784089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 784189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 784289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL_TMP(%ecx) 784389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 784489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_INVOKE_DIRECT_RANGE_finish 784589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 784689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 784789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 784889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_INVOKE_STATIC_RANGE */ 784989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 785089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INVOKE_STATIC_RANGE_continue: 785189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $METHOD_STATIC,%eax 785289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG2(%esp) # arg2<- flags 785389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 785489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveMethod # call(clazz,ref,flags) 785589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 785689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # got null? 7857c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodRange 785889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 785989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 786089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 786189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_INVOKE_INTERFACE_RANGE */ 786289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 786389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_INVOKE_INTERFACE_RANGE_continue: 786489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmFindInterfaceMethodInCache # eax<- call(class, ref, method, dex) 786589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 786689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 786789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_exceptionThrown 7868c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 786989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 787089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 787189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_FLOAT_TO_INT */ 787289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 787389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 787489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_FLOAT_TO_INT_continue: 787589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 0 787689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0x80000000,%eax 787789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl 4(rFP,%ecx,4),%eax 787889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project orl (rFP,%ecx,4),%eax 787989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .else 788089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0x80000000,(rFP,%ecx,4) 788189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 788289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_FLOAT_TO_INT_special_case # fix up result 788389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 788489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_FLOAT_TO_INT_finish: 788589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 788689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 788789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 788889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_FLOAT_TO_INT_special_case: 788989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fnstsw %ax 789089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sahf 789189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jp .LOP_FLOAT_TO_INT_isNaN 789289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project adcl $-1,(rFP,%ecx,4) 789389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 0 789489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project adcl $-1,4(rFP,%ecx,4) 789589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 789689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_FLOAT_TO_INT_finish 789789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_FLOAT_TO_INT_isNaN: 789889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0,(rFP,%ecx,4) 789989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 0 790089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0,4(rFP,%ecx,4) 790189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 790289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_FLOAT_TO_INT_finish 790389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 790489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_FLOAT_TO_LONG */ 790589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 790689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 790789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_FLOAT_TO_LONG_continue: 790889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 1 790989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0x80000000,%eax 791089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl 4(rFP,%ecx,4),%eax 791189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project orl (rFP,%ecx,4),%eax 791289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .else 791389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0x80000000,(rFP,%ecx,4) 791489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 791589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_FLOAT_TO_LONG_special_case # fix up result 791689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 791789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_FLOAT_TO_LONG_finish: 791889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 791989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 792089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 792189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_FLOAT_TO_LONG_special_case: 792289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fnstsw %ax 792389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sahf 792489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jp .LOP_FLOAT_TO_LONG_isNaN 792589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project adcl $-1,(rFP,%ecx,4) 792689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 1 792789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project adcl $-1,4(rFP,%ecx,4) 792889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 792989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_FLOAT_TO_LONG_finish 793089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_FLOAT_TO_LONG_isNaN: 793189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0,(rFP,%ecx,4) 793289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 1 793389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0,4(rFP,%ecx,4) 793489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 793589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_FLOAT_TO_LONG_finish 793689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 793789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_DOUBLE_TO_INT */ 793889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 793989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 794089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DOUBLE_TO_INT_continue: 794189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 0 794289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0x80000000,%eax 794389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl 4(rFP,%ecx,4),%eax 794489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project orl (rFP,%ecx,4),%eax 794589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .else 794689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0x80000000,(rFP,%ecx,4) 794789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 794889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_DOUBLE_TO_INT_special_case # fix up result 794989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 795089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DOUBLE_TO_INT_finish: 795189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 795289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 795389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 795489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DOUBLE_TO_INT_special_case: 795589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fnstsw %ax 795689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sahf 795789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jp .LOP_DOUBLE_TO_INT_isNaN 795889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project adcl $-1,(rFP,%ecx,4) 795989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 0 796089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project adcl $-1,4(rFP,%ecx,4) 796189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 796289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_DOUBLE_TO_INT_finish 796389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DOUBLE_TO_INT_isNaN: 796489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0,(rFP,%ecx,4) 796589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 0 796689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0,4(rFP,%ecx,4) 796789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 796889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_DOUBLE_TO_INT_finish 796989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 797089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_DOUBLE_TO_LONG */ 797189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 797289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 797389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DOUBLE_TO_LONG_continue: 797489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 1 797589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0x80000000,%eax 797689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl 4(rFP,%ecx,4),%eax 797789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project orl (rFP,%ecx,4),%eax 797889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .else 797989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0x80000000,(rFP,%ecx,4) 798089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 798189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je .LOP_DOUBLE_TO_LONG_special_case # fix up result 798289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 798389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DOUBLE_TO_LONG_finish: 798489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 798589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 798689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 798789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DOUBLE_TO_LONG_special_case: 798889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project fnstsw %ax 798989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sahf 799089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jp .LOP_DOUBLE_TO_LONG_isNaN 799189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project adcl $-1,(rFP,%ecx,4) 799289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 1 799389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project adcl $-1,4(rFP,%ecx,4) 799489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 799589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_DOUBLE_TO_LONG_finish 799689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DOUBLE_TO_LONG_isNaN: 799789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0,(rFP,%ecx,4) 799889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .if 1 799989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0,4(rFP,%ecx,4) 800089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .endif 800189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_DOUBLE_TO_LONG_finish 800289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 800389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_DIV_INT */ 800489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DIV_INT_continue_div: 800589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cltd 800689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project idivl %ecx 800789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DIV_INT_finish_div: 800889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecl<- AA 800989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,%ecx) 801089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 801189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 801289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 801389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 801489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 801589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_REM_INT */ 801689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_REM_INT_continue_div: 801789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cltd 801889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project idivl %ecx 801989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_REM_INT_finish_div: 802089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecl<- AA 802189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%edx,%ecx) 802289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 802389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 802489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 802589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 802689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 802789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_MUL_LONG */ 802889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 802989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_MUL_LONG_continue: 803089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal (%ecx,%edx),%edx # full result now in %edx:%eax 803189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A 803289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %edx,4(rFP,%ecx,4) # v[B+1]<- %edx 803389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) # restore rPC/%edx 803489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 803589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 803689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,(rFP,%ecx,4) # v[B]<- %eax 803789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 803889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 803989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 804089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 804189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_DIV_LONG */ 804289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 804389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DIV_LONG_continue: 804489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call __divdi3 804589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DIV_LONG_finish: 804689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx 804789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) 804889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 804989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) 805089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 805189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 805289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 805389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 805489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DIV_LONG_check_zero: 805589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rPC,rPC 805689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_DIV_LONG_notSpecial 805789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 805889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_errDivideByZero 805989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DIV_LONG_check_neg1: 806089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rPC,%eax 806189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_DIV_LONG_notSpecial 806289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rPC,%ecx,0) 806389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) 806489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rPC,rPC 806589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_DIV_LONG_notSpecial1 806689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0x80000000,%ecx 806789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_DIV_LONG_notSpecial1 806889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* minint / -1, return minint on div, 0 on rem */ 806989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %eax,%eax 807089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0x80000000,%edx 807189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_DIV_LONG_finish 807289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 807389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 807489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 807589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 807689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_REM_LONG */ 807789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 807889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_REM_LONG_continue: 807989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call __moddi3 808089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_REM_LONG_finish: 808189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,%ecx 808289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) 808389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 808489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) 808589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 808689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 808789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 808889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 808989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_REM_LONG_check_zero: 809089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rPC,rPC 809189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_REM_LONG_notSpecial 809289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 809389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_errDivideByZero 809489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_REM_LONG_check_neg1: 809589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rPC,%eax 809689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_REM_LONG_notSpecial 809789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rPC,%ecx,0) 809889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) 809989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rPC,rPC 810089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_REM_LONG_notSpecial1 810189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0x80000000,%ecx 810289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_REM_LONG_notSpecial1 810389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* minint / -1, return minint on div, 0 on rem */ 810489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %eax,%eax 810589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0,%edx 810689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_REM_LONG_finish 810789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 810889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 810989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 811089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 811189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_SHL_LONG */ 811289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 811389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SHL_LONG_finish: 811489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[AA+0]<- %eax 811589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 811689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 811789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 811889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_SHR_LONG */ 811989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 812089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 812189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SHR_LONG_finish: 812289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[AA+0]<- eax 812389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 812489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 812589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 812689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_USHR_LONG */ 812789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 812889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 812989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_USHR_LONG_finish: 813089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[BB+0]<- eax 813189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 813289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 813389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 813489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 813589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_DIV_INT_2ADDR */ 813689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DIV_INT_2ADDR_continue_div2addr: 813789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cltd 813889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project idivl %ecx 813989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DIV_INT_2ADDR_finish_div2addr: 814089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,rINST_FULL) 814189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 814289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 814389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 814489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 814589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 814689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_REM_INT_2ADDR */ 814789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_REM_INT_2ADDR_continue_div2addr: 814889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cltd 814989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project idivl %ecx 815089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_REM_INT_2ADDR_finish_div2addr: 815189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%edx,rINST_FULL) 815289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 815389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 815489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 815589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 815689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 815789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_MUL_LONG_2ADDR */ 815889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 815989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_MUL_LONG_2ADDR_continue: 816089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal (%ecx,%edx),%edx # full result now in %edx:%eax 816189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %edx,4(rIBASE) # v[A+1]<- %edx 816289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) # restore rPC/%edx 816389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 816489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,(rIBASE) # v[A]<- %eax 816589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rFP) 816689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rIBASE) 816789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 816889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 816989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 817089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 817189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_DIV_LONG_2ADDR */ 817289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 817389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DIV_LONG_2ADDR_continue: 817489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG3(%esp) 817589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG0(%esp) 817689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 817789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call __divdi3 817889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DIV_LONG_2ADDR_finish: 817989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%ecx 818089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) 818189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 818289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) 818389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 818489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 818589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 818689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 818789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DIV_LONG_2ADDR_check_zero: 818889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rPC,rPC 818989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_DIV_LONG_2ADDR_notSpecial 819089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 819189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_errDivideByZero 819289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DIV_LONG_2ADDR_check_neg1: 819389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rPC,%eax 819489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_DIV_LONG_2ADDR_notSpecial 819589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rPC,rINST_FULL,0) 819689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,1) 819789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rPC,rPC 819889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_DIV_LONG_2ADDR_notSpecial1 819989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0x80000000,%ecx 820089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_DIV_LONG_2ADDR_notSpecial1 820189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* minint / -1, return minint on div, 0 on rem */ 820289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %eax,%eax 820389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0x80000000,%edx 820489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_DIV_LONG_2ADDR_finish 820589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 820689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 820789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_REM_LONG_2ADDR */ 820889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 820989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_REM_LONG_2ADDR_continue: 821089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG3(%esp) 821189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rPC,OUT_ARG0(%esp) 821289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 821389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call __moddi3 821489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_REM_LONG_2ADDR_finish: 821589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,%ecx 821689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) 821789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 821889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) 821989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 822089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 822189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 822289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 822389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_REM_LONG_2ADDR_check_zero: 822489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rPC,rPC 822589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_REM_LONG_2ADDR_notSpecial 822689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 822789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_errDivideByZero 822889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_REM_LONG_2ADDR_check_neg1: 822989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rPC,%eax 823089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_REM_LONG_2ADDR_notSpecial 823189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(rPC,rINST_FULL,0) 823289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,1) 823389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl rPC,rPC 823489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_REM_LONG_2ADDR_notSpecial1 823589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0x80000000,%ecx 823689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .LOP_REM_LONG_2ADDR_notSpecial1 823789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* minint / -1, return minint on div, 0 on rem */ 823889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %eax,%eax 823989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0,%edx 824089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .LOP_REM_LONG_2ADDR_finish 824189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 824289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 824389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_SHL_LONG_2ADDR */ 824489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 824589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 824689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SHL_LONG_2ADDR_finish: 824789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[AA+0]<- eax 824889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 824989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 825089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 825189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 825289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_SHR_LONG_2ADDR */ 825389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 825489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 825589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_SHR_LONG_2ADDR_finish: 825689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[AA+0]<- eax 825789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 825889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 825989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 826089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 826189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_USHR_LONG_2ADDR */ 826289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 826389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 826489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_USHR_LONG_2ADDR_finish: 826589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[AA+0]<- eax 826689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(1) 826789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(1) 826889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 826989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 827089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_DIV_INT_LIT16 */ 827189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DIV_INT_LIT16_continue_div: 827289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cltd 827389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project idivl %ecx 827489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DIV_INT_LIT16_finish_div: 827589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,rINST_FULL) 827689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 827789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 827889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 827989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 828089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 828189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_REM_INT_LIT16 */ 828289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_REM_INT_LIT16_continue_div: 828389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cltd 828489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project idivl %ecx 828589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_REM_INT_LIT16_finish_div: 828689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%edx,rINST_FULL) 828789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 828889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 828989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 829089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 829189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 829289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_DIV_INT_LIT8 */ 829389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DIV_INT_LIT8_continue_div: 829489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cltd 829589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project idivl %ecx 829689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_DIV_INT_LIT8_finish_div: 829789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%eax,rINST_FULL) 829889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 829989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 830089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 830189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 830289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 830389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_REM_INT_LIT8 */ 830489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_REM_INT_LIT8_continue_div: 830589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cltd 830689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project idivl %ecx 830789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_REM_INT_LIT8_finish_div: 830889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SET_VREG(%edx,rINST_FULL) 830989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 831089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(2) 831189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(2) 831289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 831389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 831489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* continuation for OP_EXECUTE_INLINE */ 831589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 831689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LOP_EXECUTE_INLINE_continue: 831789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 831889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Extract args, call function. 831989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx = #of args (0-4) 832089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax = call index 832189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * @esp = return addr 832289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * esp is -4 from normal 832389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 832489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Go ahead and load all 4 args, even if not used. 832589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 832689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 4(rPC),rPC 832789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 832889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0xf,%ecx 832989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl rPC,%ecx 833089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) 833189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,rPC 833289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,4+OUT_ARG0(%esp) 833389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 833489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0xf,%ecx 833589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl rPC,%ecx 833689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) 833789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,rPC 833889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,4+OUT_ARG1(%esp) 833989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 834089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0xf,%ecx 834189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl rPC,%ecx 834289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) 834389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,rPC 834489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,4+OUT_ARG2(%esp) 834589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 834689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0xf,%ecx 834789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project andl rPC,%ecx 834889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_VREG(%ecx,%ecx) 834989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sarl $4,rPC 835089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,4+OUT_ARG3(%esp) 835189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 835289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project sall $4,%eax # index *= sizeof(table entry) 835389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp *gDvmInlineOpsTable(%eax) 835489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project # will return to caller of .LOP_EXECUTE_INLINE_continue 835589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 835689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 835789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .size dvmAsmSisterStart, .-dvmAsmSisterStart 835889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .global dvmAsmSisterEnd 835989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source ProjectdvmAsmSisterEnd: 836089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 836189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/entry.S */ 836289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 836389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 836489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 836589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 836689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * you may not use this file except in compliance with the License. 836789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * You may obtain a copy of the License at 836889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 836989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 837089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 837189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 837289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 837389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 837489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * See the License for the specific language governing permissions and 837589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * limitations under the License. 837689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 837789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 837889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 837989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .text 838089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .global dvmMterpStdRun 838189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .type dvmMterpStdRun, %function 838289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 838389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * bool dvmMterpStdRun(MterpGlue* glue) 838489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 838589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Interpreter entry point. Returns changeInterp. 838689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 838789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 838889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source ProjectdvmMterpStdRun: 838989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project push %ebp 839089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %esp,%ebp 839189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project push %edi 839289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project push %esi 839389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project push %ebx 839489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 839589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* at this point, stack is misaligned by 1 word 839689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project We're allocating spill space for 6 words, plus 839789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project outgoing argument (5 words) and local variables 839889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project (4 words) - 15 words or 60 bytes total. See 839989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project diagram in header.S 840089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project*/ 840189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project subl $60,%esp 840289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 840389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* Set up "named" registers */ 840489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl IN_ARG0(%ebp),%ecx 840589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,rGLUE_SPILL(%ebp) 840689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project LOAD_PC_FROM_GLUE(%ecx) 840789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project LOAD_FP_FROM_GLUE(%ecx) 840889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $dvmAsmInstructionStart,rIBASE 840989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 841089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* Remember %esp for future "longjmp" */ 841189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %esp,offGlue_bailPtr(%ecx) 841289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 841389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* How to start? */ 841489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movb offGlue_entryPoint(%ecx),%al 841589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 841689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* Normal start? */ 841789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpb $kInterpEntryInstr,%al 841889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne .Lnot_instr 841989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 842089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* Normal case: start executing the instruction at rPC */ 842189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST() 842289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 842389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 842489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.Lnot_instr: 842589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* Reset to normal case */ 842689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movb $kInterpEntryInstr,offGlue_entryPoint(%ecx) 842789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpb $kInterpEntryReturn,%al 842889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_returnFromMethod 842989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpb $kInterpEntryThrow,%al 843089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_exceptionThrown 843189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzx %al,%eax 843289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 843389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $.LstrBadEntryPoint,OUT_ARG0(%esp) 843489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call printf 843589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmAbort 843689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* Not reached */ 843789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 843889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 843989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .global dvmMterpStdBail 844089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .type dvmMterpStdBail, %function 844189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 844289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * void dvmMterpStdBail(MterpGlue* glue, bool changeInterp) 844389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 844489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Restore the stack pointer and PC from the save point established on entry. 844589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This is essentially the same as a longjmp, but should be cheaper. The 844689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * last instruction causes us to return to whoever called dvmMterpStdRun. 844789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 844889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * We're not going to build a standard frame here, so the arg accesses will 844989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * look a little strange. 845089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 845189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * On entry: 845289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * esp+4 (arg0) MterpGlue* glue 845389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * esp+8 (arg1) bool changeInterp 845489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 845589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source ProjectdvmMterpStdBail: 845689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 4(%esp),%ecx # grab glue 845789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl 8(%esp),%eax # changeInterp to return reg 845889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_bailPtr(%ecx),%esp # Stack back to normal 845989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project addl $60,%esp # Strip dvmMterpStdRun's frame 846089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project pop %ebx 846189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project pop %esi 846289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project pop %edi 846389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project pop %ebp 846489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ret # return to dvmMterpStdRun's caller 846589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 846689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 846789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 846889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Strings 846989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 847089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .section .rodata 847189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LstrBadEntryPoint: 847289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .asciz "Bad entry point %d\n" 847389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 847489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* File: x86/footer.S */ 847589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 847689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 847789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 847889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 847989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * you may not use this file except in compliance with the License. 848089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * You may obtain a copy of the License at 848189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 848289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 848389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 848489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 848589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 848689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 848789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * See the License for the specific language governing permissions and 848889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * limitations under the License. 848989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 849089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 849189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Common subroutines and data. 849289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 849389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 849489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 849589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Common code when a backwards branch is taken 849689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 849789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * On entry: 849889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ebx (a.k.a. rINST_FULL) -> PC adjustment in 16-bit words 849989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 850089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Projectcommon_backwardBranch: 850189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 8502c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch call common_periodicChecks # Note: expects rPC to be preserved 850389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC_INDEXED(rINST_FULL) 850489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST() 850589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 850689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 8507c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8508c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8509c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch/* 8510c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * Common code for method invocation with range. 8511c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * 8512c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * On entry: 8513c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * eax = Method* methodToCall 8514c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * rINST trashed, must reload 8515c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8516c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8517c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birchcommon_invokeMethodRange: 8518c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNewRange: 8519c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8520c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8521c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * prepare to copy args to "outs" area of current frame 8522c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8523c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8524c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzbl 1(rPC),rINST_FULL # rINST_FULL<- AA 8525c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl 4(rPC), %ecx # %ecx<- CCCC 8526c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SPILL(rPC) 8527c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SAVEAREA_FROM_FP(%edx,rFP) # %edx<- &StackSaveArea 8528c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch test rINST_FULL, rINST_FULL 8529c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rINST_FULL, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- AA 8530c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jz .LinvokeArgsDone # no args; jump to args done 8531c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8532c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8533c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8534c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, %ecx=CCCC, LOCAL0_OFFSET(%ebp)=count, %edx=&outs (&stackSaveArea) 8535c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * (very few methods have > 10 args; could unroll for common cases) 8536c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8537c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8538c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ebx, LOCAL1_OFFSET(%ebp) # LOCAL1_OFFSET(%ebp)<- save %ebx 8539c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea (rFP, %ecx, 4), %ecx # %ecx<- &vCCCC 8540c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shll $2, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- offset 8541c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl LOCAL0_OFFSET(%ebp), %edx # %edx<- update &outs 8542c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shrl $2, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- offset 8543c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch1: 8544c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (%ecx), %ebx # %ebx<- vCCCC 8545c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea 4(%ecx), %ecx # %ecx<- &vCCCC++ 8546c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl $1, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET<- LOCAL0_OFFSET-- 8547c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ebx, (%edx) # *outs<- vCCCC 8548c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea 4(%edx), %edx # outs++ 8549c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne 1b # loop if count (LOCAL0_OFFSET(%ebp)) not zero 8550c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ebx # %ebx<- restore %ebx 8551c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp .LinvokeArgsDone # continue 8552c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8553c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8554c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax is "Method* methodToCall", the method we're trying to call 8555c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * prepare to copy args to "outs" area of current frame 8556c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8557c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8558c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birchcommon_invokeMethodNoRange: 8559c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNewNoRange: 8560c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzbl 1(rPC),rINST_FULL # rINST_FULL<- BA 8561c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SPILL(rPC) 8562c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rINST_FULL, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- BA 8563c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shrl $4, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- B 8564c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch je .LinvokeArgsDone # no args; jump to args done 8565c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl 4(rPC), %ecx # %ecx<- GFED 8566c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SAVEAREA_FROM_FP(%edx,rFP) # %edx<- &StackSaveArea 8567c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8568c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8569c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, %ecx=GFED, LOCAL0_OFFSET(%ebp)=count, %edx=outs 8570c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8571c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8572c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNonRange: 8573c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp $2, LOCAL0_OFFSET(%ebp) # compare LOCAL0_OFFSET(%ebp) to 2 8574c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, LOCAL1_OFFSET(%ebp) # LOCAL1_OFFSET(%ebp)<- GFED 8575c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jl 1f # handle 1 arg 8576c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch je 2f # handle 2 args 8577c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp $4, LOCAL0_OFFSET(%ebp) # compare LOCAL0_OFFSET(%ebp) to 4 8578c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jl 3f # handle 3 args 8579c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch je 4f # handle 4 args 8580c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch5: 8581c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch andl $15, rINST_FULL # rINST<- A 8582c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 8583c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, rINST_FULL, 4), %ecx # %ecx<- vA 8584c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vA 8585c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 8586c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch4: 8587c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shr $12, %ecx # %ecx<- G 8588c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 8589c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vG 8590c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vG 8591c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 8592c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch3: 8593c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch and $0x0f00, %ecx # %ecx<- 0F00 8594c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shr $8, %ecx # %ecx<- F 8595c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 8596c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vF 8597c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vF 8598c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 8599c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch2: 8600c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch and $0x00f0, %ecx # %ecx<- 00E0 8601c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shr $4, %ecx # %ecx<- E 8602c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 8603c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vE 8604c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vE 8605c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 8606c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch1: 8607c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch and $0x000f, %ecx # %ecx<- 000D 8608c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vD 8609c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, -4(%edx) # *--outs<- vD 8610c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch0: 8611c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8612c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8613c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax is "Method* methodToCall", the method we're trying to call 8614c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * find space for the new stack frame, check for overflow 8615c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8616c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8617c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeArgsDone: 8618c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl offMethod_registersSize(%eax), %edx # %edx<- methodToCall->regsSize 8619c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl offMethod_outsSize(%eax), %ecx # %ecx<- methodToCall->outsSize 8620c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET<- methodToCall 8621c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shl $2, %edx # %edx<- update offset 8622c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SAVEAREA_FROM_FP(%eax,rFP) # %eax<- &StackSaveArea 8623c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl %edx, %eax # %eax<- newFP; (old savearea - regsSize) 8624c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GET_GLUE(%edx) # %edx<- pMterpGlue 8625c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, LOCAL1_OFFSET(%ebp) # LOCAL1_OFFSET(%ebp)<- &outs 8626c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl $sizeofStackSaveArea, %eax # %eax<- newSaveArea (stack save area using newFP) 8627c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offGlue_interpStackEnd(%edx), %edx # %edx<- glue->interpStackEnd 8628c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, LOCAL2_OFFSET(%ebp) # LOCAL2_OFFSET<- glue->interpStackEnd 8629c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shl $2, %ecx # %ecx<- update offset for outsSize 8630c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, %edx # %edx<- newSaveArea 8631c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch sub %ecx, %eax # %eax<- bottom; (newSaveArea - outsSize) 8632c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp LOCAL2_OFFSET(%ebp), %eax # compare interpStackEnd and bottom 8633c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL0_OFFSET(%ebp), %eax # %eax<- restore methodToCall 8634c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jl .LstackOverflow # handle frame overflow 8635c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8636c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8637c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * set up newSaveArea 8638c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8639c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8640c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch#ifdef EASY_GDB 8641c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SAVEAREA_FROM_FP(%ecx,rFP) # %ecx<- &StackSaveArea 8642c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, offStackSaveArea_prevSave(%edx) # newSaveArea->prevSave<- &outs 8643c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch#endif 8644c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rFP, offStackSaveArea_prevFrame(%edx) # newSaveArea->prevFrame<- rFP 8645c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rPC_SPILL(%ebp), %ecx 8646c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, offStackSaveArea_savedPc(%edx) # newSaveArea->savedPc<- rPC 8647c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch testl $ACC_NATIVE, offMethod_accessFlags(%eax) # check for native call 8648c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, offStackSaveArea_method(%edx) # newSaveArea->method<- method to call 8649c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne .LinvokeNative # handle native call 8650c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8651c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8652c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * Update "glue" values for the new method 8653c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, LOCAL1_OFFSET(%ebp)=newFp 8654c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8655c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8656c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offMethod_clazz(%eax), %edx # %edx<- method->clazz 8657c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GET_GLUE(%ecx) # %ecx<- pMterpGlue 8658c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offClassObject_pDvmDex(%edx), %edx # %edx<- method->clazz->pDvmDex 8659c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, offGlue_method(%ecx) # glue->method<- methodToCall 8660c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, offGlue_methodClassDex(%ecx) # glue->methodClassDex<- method->clazz->pDvmDex 8661c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offMethod_insns(%eax), rPC # rPC<- methodToCall->insns 8662c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offGlue_self(%ecx), %eax # %eax<- glue->self 8663c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), rFP # rFP<- newFP 8664c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rFP, offThread_curFrame(%eax) # glue->self->curFrame<- newFP 8665c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch FETCH_INST() 8666c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GOTO_NEXT # jump to methodToCall->insns 8667c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8668c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8669c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * Prep for the native call 8670c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, LOCAL1_OFFSET(%ebp)=newFP, %edx=newSaveArea 8671c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8672c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8673c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNative: 8674c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GET_GLUE(%ecx) # %ecx<- pMterpGlue 8675c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, OUT_ARG1(%esp) # push parameter methodToCall 8676c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offGlue_self(%ecx), %ecx # %ecx<- glue->self 8677c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offThread_jniLocal_nextEntry(%ecx), %eax # %eax<- glue->self->thread->refNext 8678c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, offStackSaveArea_localRefTop(%edx) # newSaveArea->localRefTop<- refNext 8679c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, OUT_ARG4(%esp) # save newSaveArea 8680c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %edx # %edx<- newFP 8681c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, offThread_curFrame(%ecx) # glue->self->curFrame<- newFP 8682c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, OUT_ARG3(%esp) # save glue->self 8683c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, OUT_ARG2(%esp) # push parameter glue->self 8684c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GET_GLUE(%ecx) # %ecx<- pMterpGlue 8685c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl OUT_ARG1(%esp), %eax # %eax<- methodToCall 8686c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea offGlue_retval(%ecx), %ecx # %ecx<- &retval 8687c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, OUT_ARG0(%esp) # push parameter pMterpGlue 8688c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch push %edx # push parameter newFP 8689c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8690c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch call *offMethod_nativeFunc(%eax) # call methodToCall->nativeFunc 8691c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea 4(%esp), %esp 8692c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl OUT_ARG4(%esp), %ecx # %ecx<- newSaveArea 8693c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl OUT_ARG3(%esp), %eax # %eax<- glue->self 8694c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offStackSaveArea_localRefTop(%ecx), %edx # %edx<- newSaveArea->localRefTop 8695c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp $0, offThread_exception(%eax) # check for exception 8696c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rFP, offThread_curFrame(%eax) # glue->self->curFrame<- rFP 8697c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, offThread_jniLocal_nextEntry(%eax) # glue->self<- newSaveArea->localRefTop 8698c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch UNSPILL(rPC) 8699c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_exceptionThrown # handle exception 8700c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch FETCH_INST_WORD(3) 8701c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch ADVANCE_PC(3) 8702c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GOTO_NEXT # jump to next instruction 8703c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8704c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LstackOverflow: 8705c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GET_GLUE(%eax) # %eax<- pMterpGlue 8706c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offGlue_self(%eax), %eax # %eax<- glue->self 8707c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, OUT_ARG0(%esp) # push parameter self 8708c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch call dvmHandleStackOverflow # call: (Thread* self) 8709c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch UNSPILL(rPC) # return: void 8710c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_exceptionThrown # handle exception 8711c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8712c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 871389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 871489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Common invoke code (old-style). 871589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * TUNING: Rewrite along lines of new armv5 code? 871689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 871789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * On entry: 871889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * eax = Method* methodToCall 871989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx = bool methodCallRange 872089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST trashed, must reload 872189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 872289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Projectcommon_invokeOld: 872389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- methodCallRange 872489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 872589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl (rPC),rINST_FULL # recover rINST 872689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG2(%esp) # arg2<- method 872789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 4(rPC),%eax # eax<- GFED or CCCC 872889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SAVE_PC_TO_GLUE(%ecx) 872989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SAVE_FP_TO_GLUE(%ecx) 873089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl rINST_HI,rINST_FULL 873189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,OUT_ARG3(%esp)# arg3<- AA 873289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- GLUE 873389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG4(%esp) # arg4<- GFED/CCCC 873489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmMterp_invokeMethod 873589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_resumeAfterGlueCall 873689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 873789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 873889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 873989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Do we need the thread to be suspended or have debugger/profiling activity? 874089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 874189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * On entry: 874289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ebx -> PC adjustment in 16-bit words (must be preserved) 874389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx -> GLUE pointer 874489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 874589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Note: A call will normally kill %eax, rPC/%edx and %ecx. To 874689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * streamline the normal case, this routine will preserve rPC and 874789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * %ecx in addition to the normal caller save regs. The save/restore 874889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * is a bit ugly, but will happen in the relatively uncommon path. 874989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * TUNING: Might be worthwhile to inline this. 875089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * TODO: Basic-block style Jit will need a hook here as well. Fold it into 875189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * the suspendCount check so we can get both in 1 shot. 875289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 875389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Projectcommon_periodicChecks: 875489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_pSelfSuspendCount(%ecx),%eax # eax <- &suspendCount 875589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0,(%eax) 875689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne 1f 875789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 875889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#if defined(WITH_DEBUGGER) || defined(WITH_PROFILER) 875989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#if defined(WITH_DEBUGGER) 876089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_pDebuggerActive(%ecx),%eax # eax <- &DebuggerActive 876189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#endif 876289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#if defined(WITH_PROFILER) 876389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_pActiveProfilers(%ecx),%ecx # ecx <- &ActiveProfilers 876489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#endif 876589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#if defined(WITH_DEBUGGER) && defined(WITH_PROFILER) 876689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl (%eax),%eax # eax <- debuggerActive (boolean) 876789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project orl (%ecx),%eax # eax <- debuggerActive || activeProfilers 876889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#elif defined(WITH_DEBUGGER) 876989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzbl (%eax),%eax # eax <- debuggerActive (boolean) 877089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#elif defined(WITH_PROFILER) 877189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx),%eax # eax <= activeProfilers 877289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#endif 877389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) # restore rGLUE 877489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 877589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jne 3f # one or both active - switch interp 877689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project#endif 877789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 877889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ret 877989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 878089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* Check for suspend */ 878189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project1: 878289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* At this point, the return pointer to the caller of 878389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * common_periodicChecks is on the top of stack. We need to preserve 878489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rPC(edx) and GLUE(ecx). We'll spill rPC, and reload GLUE. 878589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * The outgoing profile is: 878689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * bool dvmCheckSuspendPending(Thread* self) 878789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Because we reached here via a call, go ahead and build a new frame. 878889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 878989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_self(%ecx),%eax # eax<- glue->self 879089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) # save edx 879189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project push %ebp 879289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %esp,%ebp 879389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project subl $24,%esp 879489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) 879589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmCheckSuspendPending 879689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project addl $24,%esp 879789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project pop %ebp 879889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 879989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 880089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ret 880189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 880289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* Switch interpreters */ 880389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* Note: %ebx contains the 16-bit word offset to be applied to rPC to 880489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * "complete" the interpretation of backwards branches. In effect, we 880589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * are completing the interpretation of the branch instruction here, 880689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * and the new interpreter will resume interpretation at the branch 880789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * target. However, a switch request recognized during the handling 880889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * of a return from method instruction results in an immediate abort, 880989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * and the new interpreter will resume by re-interpreting the return 881089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * instruction. 881189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 881289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project3: 881389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project leal (rPC,%ebx,2),rPC # adjust pc to show target 881489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) # bail expect GLUE already loaded 881589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $1,rINST_FULL # set changeInterp to true 881689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_gotoBail 881789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 881889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 881989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 882089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Common code for handling a return instruction 882189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 882289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Projectcommon_returnFromMethod: 882389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 882489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* Set entry mode in case we bail */ 882589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movb $kInterpEntryReturn,offGlue_entryPoint(%ecx) 882689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl rINST_FULL,rINST_FULL # zero offset in case we switch interps 882789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call common_periodicChecks # Note: expects %ecx to be preserved 882889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 882989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SAVEAREA_FROM_FP(%eax,rFP) # eax<- saveArea (old) 883089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offStackSaveArea_prevFrame(%eax),rFP # rFP<- prevFrame 883189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (offStackSaveArea_method-sizeofStackSaveArea)(rFP),rINST_FULL 883289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project cmpl $0,rINST_FULL # break? 883389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project je common_gotoBail # break frame, bail out completely 883489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 883589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offStackSaveArea_savedPc(%eax),rPC # pc<- saveArea->savedPC 883689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_self(%ecx),%eax # eax<- self 883789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,offGlue_method(%ecx) # glue->method = newSave->meethod 883889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rFP,offThread_curFrame(%eax) # self->curFrame = fp 883989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(rINST_FULL),%eax # eax<- method->clazz 884089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST_WORD(3) 884189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offClassObject_pDvmDex(%eax),%eax # eax<- method->clazz->pDvmDex 884289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project ADVANCE_PC(3) 884389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,offGlue_methodClassDex(%ecx) 884489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* not bailing - restore entry mode to default */ 884589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movb $kInterpEntryInstr,offGlue_entryPoint(%ecx) 884689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 884789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 884889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 884989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Prepare to strip the current frame and "longjump" back to caller of 885089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * dvmMterpStdRun. 885189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 885289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * on entry: 885389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * rINST_FULL holds changeInterp 885489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * ecx holds glue pointer 885589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 885689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * expected profile: dvmMterpStdBail(MterpGlue *glue, bool changeInterp) 885789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 885889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Projectcommon_gotoBail: 885989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SAVE_PC_TO_GLUE(%ecx) # export state to glue 886089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SAVE_FP_TO_GLUE(%ecx) 886189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # glue in arg0 886289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl rINST_FULL,OUT_ARG1(%esp) # changeInterp in arg1 886389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmMterpStdBail # bail out.... 886489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 886589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 886689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 886789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * After returning from a "glued" function, pull out the updated values 886889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * and start executing at the next instruction. 886989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 887089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project common_resumeAfterGlueCall: 887189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 887289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project LOAD_PC_FROM_GLUE(%ecx) 887389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project LOAD_FP_FROM_GLUE(%ecx) 887489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project FETCH_INST() 887589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GOTO_NEXT 887689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 887789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 887889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Integer divide or mod by zero 887989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 888089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Projectcommon_errDivideByZero: 888189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 888289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $.LstrArithmeticException,%eax 888389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) 888489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $.LstrDivideByZero,%eax 888589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 888689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 888789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmThrowException 888889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 888989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 889089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 889189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 889289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Attempt to allocate an array with a negative size. 889389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 889489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Projectcommon_errNegativeArraySize: 889589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 889689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $.LstrNegativeArraySizeException,%eax 889789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) 889889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %eax,%eax 889989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 890089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 890189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmThrowException 890289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 890389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 890489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 890589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 890689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Attempt to allocate an array with a negative size. 890789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 890889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Projectcommon_errNoSuchMethod: 890989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 891089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 891189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $.LstrNoSuchMethodError,%eax 891289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) 891389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %eax,%eax 891489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 891589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 891689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmThrowException 891789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 891889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 891989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 892089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 892189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Hit a null object when we weren't expecting one. Export the PC, throw a 892289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * NullPointerException and goto the exception processing code. 892389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 892489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Projectcommon_errNullObject: 892589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 892689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $.LstrNullPointerException,%eax 892789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) 892889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %eax,%eax 892989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 893089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 893189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmThrowException 893289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 893389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 893489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 893589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 893689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Array index exceeds max. 893789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 893889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Projectcommon_errArrayIndex: 893989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 894089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $.LstrArrayIndexException,%eax 894189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) 894289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %eax,%eax 894389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 894489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 894589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmThrowException 894689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 894789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 894889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 894989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Invalid array value. 895089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 895189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Projectcommon_errArrayStore: 895289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 895389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $.LstrArrayStoreException,%eax 895489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG0(%esp) 895589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project xorl %eax,%eax 895689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) 895789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 895889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmThrowException 895989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 896089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 896189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 896289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 896389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Somebody has thrown an exception. Handle it. 896489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 896589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * If the exception processing code returns to us (instead of falling 896689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * out of the interpreter), continue with whatever the next instruction 896789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * now happens to be. 896889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 896989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * This does not return. 897089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 897189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Projectcommon_exceptionThrown: 897289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 897389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SAVE_PC_TO_GLUE(%ecx) 897489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SAVE_FP_TO_GLUE(%ecx) 897589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 897689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmMterp_exceptionThrown 897789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_resumeAfterGlueCall 897889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 897989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Projectcommon_abort: 898089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $0xdeadf00d,%eax 898189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call *%eax 898289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 898389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 898489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project/* 898589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Strings 898689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 898789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 898889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .section .rodata 898989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LstrNullPointerException: 899089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .asciz "Ljava/lang/NullPointerException;" 899189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LstrArithmeticException: 899289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .asciz "Ljava/lang/ArithmeticException;" 899389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LstrDivideByZero: 899489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .asciz "divide by zero" 899589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LstrArrayIndexException: 899689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .asciz "Ljava/lang/ArrayIndexOutOfBoundsException;" 899789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LstrArrayStoreException: 899889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .asciz "Ljava/lang/ArrayStoreException;" 899989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LstrNegativeArraySizeException: 900089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .asciz "Ljava/lang/NegativeArraySizeException;" 900189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LstrInstantiationError: 900289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .asciz "Ljava/lang/InstantiationError;" 900389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LstrClassCastException: 900489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .asciz "Ljava/lang/ClassCastException;" 900589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LstrNoSuchMethodError: 900689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .asciz "Ljava/lang/NoSuchMethodError;" 900789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LstrInternalError: 900889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .asciz "Ljava/lang/InternalError;" 900989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.LstrFilledNewArrayNotImpl: 901089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project .asciz "filled-new-array only implemented for 'int'" 901189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 901289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 9013