InterpAsm-x86.S revision 9f601a917c8878204482c37aec7005054b6776fa
1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This file was generated automatically by gen-mterp.py for 'x86'.
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * --> DO NOT EDIT <--
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/header.S */
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License.
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit x86 definitions and declarations.
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project386 ABI general notes:
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectCaller save set:
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   eax, edx, ecx, st(0)-st(7)
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectCallee save set:
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   ebx, esi, edi, ebp
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectReturn regs:
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   32-bit in eax
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   64-bit in edx:eax (low-order 32 in eax)
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   fp on top of fp stack st(0)
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectParameters passed on stack, pushed right-to-left.  On entry to target, first
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectparm is at 4(%esp).  Traditional entry code is:
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectfunctEntry:
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    push    %ebp             # save old frame pointer
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     %ebp,%esp        # establish new frame pointer
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sub     FrameSize,%esp   # Allocate storage for spill, locals & outs
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectOnce past the prologue, arguments are referenced at ((argno + 2)*4)(%ebp)
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectAlignment of stack not strictly required, but should be for performance.  We'll
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectalign frame sizes to 16-byte multiples.
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectIf we're not doing variable stack allocation (alloca), the frame pointer can be
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecteliminated and all arg references adjusted to be esp relative.
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectMterp notes:
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectSome key interpreter variables will be assigned to registers.  Note that each
58dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbeewill also have an associated spill location (mostly useful for those assigned
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectto callee save registers).
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  nick     reg   purpose
62f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee  rPC      edi   interpreted program counter, used for fetching instructions
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  rFP      esi   interpreted frame pointer, used for accessing locals and args
64f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee  rINSTw   bx    first 16-bit code of current instruction
65f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee  rINSTbl  bl    opcode portion of instruction word
66f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee  rINSTbh  bh    high byte of inst word, usually contains src/tgt reg names
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectNotes:
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   o High order 16 bits of ebx must be zero on entry to handler
70f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   o rPC, rFP, rINSTw/rINSTbl valid on handler entry and exit
71f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   o eax, edx and ecx are scratch, rINSTw/ebx sometimes scratch
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
759f601a917c8878204482c37aec7005054b6776fabuzbee#define rSELF    (%ebp)
76f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rPC      %esi
77f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rFP      %edi
78f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rINST    %ebx
79f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rINSTw   %bx
80f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rINSTbh  %bh
81f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rINSTbl  %bl
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Frame diagram while executing dvmMterpStdRun, high to low addresses */
85f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define IN_ARG0        ( 12)
86f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define CALLER_RP      (  8)
87f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define PREV_FP        (  4)
889f601a917c8878204482c37aec7005054b6776fabuzbee#define rSELF_SPILL    (  0) /* <- dvmMterpStdRun ebp */
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Spill offsets relative to %ebp */
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define EDI_SPILL      ( -4)
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define ESI_SPILL      ( -8)
92f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define EBX_SPILL      (-12) /* <- esp following dmMterpStdRun header */
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rPC_SPILL      (-16)
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rFP_SPILL      (-20)
95f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rINST_SPILL    (-24)
96f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define TMP_SPILL1     (-28)
97f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define TMP_SPILL2     (-32)
98f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define TMP_SPILL3     (-36)
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOCAL0_OFFSET  (-40)
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOCAL1_OFFSET  (-44)
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOCAL2_OFFSET  (-48)
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOCAL3_OFFSET  (-52)
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Out Arg offsets, relative to %sp */
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define OUT_ARG4       ( 16)
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define OUT_ARG3       ( 12)
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define OUT_ARG2       (  8)
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define OUT_ARG1       (  4)
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define OUT_ARG0       (  0)  /* <- dvmMterpStdRun esp */
109f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define FRAME_SIZE     80
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SPILL(reg) movl reg##,reg##_SPILL(%ebp)
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define UNSPILL(reg) movl reg##_SPILL(%ebp),reg
113f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define SPILL_TMP1(reg) movl reg,TMP_SPILL1(%ebp)
114f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define UNSPILL_TMP1(reg) movl TMP_SPILL1(%ebp),reg
115f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define SPILL_TMP2(reg) movl reg,TMP_SPILL2(%ebp)
116f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define UNSPILL_TMP2(reg) movl TMP_SPILL2(%ebp),reg
117f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define SPILL_TMP3(reg) movl reg,TMP_SPILL3(%ebp)
118f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define UNSPILL_TMP3(reg) movl TMP_SPILL3(%ebp),reg
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
120dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#if defined(WITH_JIT)
1219f601a917c8878204482c37aec7005054b6776fabuzbee.macro GET_JIT_PROF_TABLE _self _reg
1229f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_pJitProfTable(\_self),\_reg
123dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee.endm
1249f601a917c8878204482c37aec7005054b6776fabuzbee.macro GET_JIT_THRESHOLD _self _reg
1259f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_jitThreshold(\_self),\_reg
126dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee.endm
127dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#endif
128dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee
1299f601a917c8878204482c37aec7005054b6776fabuzbee/* save/restore the PC and/or FP from the self struct */
1309f601a917c8878204482c37aec7005054b6776fabuzbee.macro SAVE_PC_FP_TO_SELF _reg
1319f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,\_reg
1329f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rPC,offThread_pc(\_reg)
1339f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rFP,offThread_fp(\_reg)
134f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1369f601a917c8878204482c37aec7005054b6776fabuzbee.macro LOAD_PC_FP_FROM_SELF
1379f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,rFP
1389f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_pc(rFP),rPC
1399f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_fp(rFP),rFP
140f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* The interpreter assumes a properly aligned stack on entry, and
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * will preserve 16-byte alignment.
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "export" the PC to the interpreted stack frame, f/b/o future exception
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * objects.  Must * be done *before* something calls dvmThrowException.
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In C this is "SAVEAREA_FROM_FP(fp)->xtra.currentPc = pc", i.e.
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fp - sizeof(StackSaveArea) + offsetof(SaveArea, xtra.currentPc)
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * It's okay to do this more than once.
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
155f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro EXPORT_PC
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     rPC, (-sizeofStackSaveArea + offStackSaveArea_currentPc)(rFP)
157f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Given a frame pointer, find the stack save area.
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In C this is "((StackSaveArea*)(_fp) -1)".
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
164f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro SAVEAREA_FROM_FP _reg
165f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    leal    -sizeofStackSaveArea(rFP), \_reg
166f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
169f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the next instruction from rPC into rINSTw.  Does not advance rPC.
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
171f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro FETCH_INST
172f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl    (rPC),rINST
173f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
176f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the opcode byte and zero-extend it into _reg.  Must be used
177f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * in conjunction with GOTO_NEXT_R
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
179f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro FETCH_INST_R _reg
180f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    (rPC),\_reg
181f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
184f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the opcode byte at _count words offset from rPC and zero-extend
185f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * it into _reg.  Must be used in conjunction with GOTO_NEXT_R
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
187f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro FETCH_INST_OPCODE _count _reg
188f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  \_count*2(rPC),\_reg
189f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
192f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the nth instruction word from rPC into rINSTw.  Does not advance
193f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rPC, and _count is in words
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
195f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro FETCH_INST_WORD _count
196f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  \_count*2(rPC),rINST
197f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
200f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch instruction word indexed (used for branching).
201f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Index is in instruction word units.
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
203f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro FETCH_INST_INDEXED _reg
204f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  (rPC,\_reg,2),rINST
205f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
208f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Advance rPC by instruction count
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
210f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro ADVANCE_PC _count
211f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    leal  2*\_count(rPC),rPC
212f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
215f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Advance rPC by branch offset in register
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
217f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro ADVANCE_PC_INDEXED _reg
218f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    leal (rPC,\_reg,2),rPC
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.endm
220f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.macro GOTO_NEXT
222f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee     movzx   rINSTbl,%eax
223f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee     movzbl  rINSTbh,rINST
224f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee     jmp     *dvmAsmInstructionJmpTable(,%eax,4)
225f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm
226f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
227f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
228f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Version of GOTO_NEXT that assumes _reg preloaded with opcode.
229f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Should be paired with FETCH_INST_R
230f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
231f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro GOTO_NEXT_R _reg
232f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee     movzbl  1(rPC),rINST
233f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee     jmp     *dvmAsmInstructionJmpTable(,\_reg,4)
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.endm
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
23671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao   /*
23771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    * Jumbo version of GOTO_NEXT that assumes _reg preloaded with table
23871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    * offset of the jumbo instruction, which is the top half of the extended
23971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    * opcode + 0x100.  Loads rINST with BBBB field, similar to GOTO_NEXT_R
24071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    */
24171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.macro GOTO_NEXT_JUMBO_R _reg
24271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     movzwl  6(rPC),rINST
24371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     jmp     *dvmAsmInstructionJmpTable(,\_reg,4)
24471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.endm
24571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get/set the 32-bit value from a Dalvik register.
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
249f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro GET_VREG_R _reg _vreg
250f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     (rFP,\_vreg,4),\_reg
251f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm
252f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
253f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro SET_VREG _reg _vreg
254f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     \_reg,(rFP,\_vreg,4)
255f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm
256f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
257f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro GET_VREG_WORD _reg _vreg _offset
258f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     4*(\_offset)(rFP,\_vreg,4),\_reg
259f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm
260f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
261f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro SET_VREG_WORD _reg _vreg _offset
262f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     \_reg,4*(\_offset)(rFP,\_vreg,4)
263f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm
264f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
265f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#if 1
266f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
267f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rFinish %edx
268f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
269f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee/* Macros for x86-atom handlers */
270f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    /*
271f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Get the 32-bit value from a dalvik register.
272f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
273f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
274f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      GET_VREG _vreg
275f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl        (rFP,\_vreg, 4), \_vreg
276f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
277f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
278f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
279f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Fetch the next instruction from the specified offset. Advances rPC
280f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * to point to the next instruction. "_count" is in 16-bit code units.
281f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    *
282f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * This must come AFTER anything that can throw an exception, or the
283f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * exception catch may miss. (This also implies that it must come after
284f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * EXPORT_PC())
285f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
286f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
287f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FETCH_ADVANCE_INST _count
288f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    add         $(\_count*2), rPC
289f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl      (rPC), rINST
290f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
291f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
292f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
293f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Fetch the next instruction from an offset specified by _reg. Updates
294f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * rPC to point to the next instruction. "_reg" must specify the distance
295f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * in bytes, *not* 16-bit code units, and may be a signed value.
296f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
297f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
298f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FETCH_ADVANCE_INST_RB _reg
299f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    addl        \_reg, rPC
300f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl      (rPC), rINST
301f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
302f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
303f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
304f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Fetch a half-word code unit from an offset past the current PC. The
305f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * "_count" value is in 16-bit code units. Does not advance rPC.
306f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * For example, given instruction of format: AA|op BBBB, it
307f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * fetches BBBB.
308f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
309f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
310f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FETCH _count _reg
311f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl      (\_count*2)(rPC), \_reg
312f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
313f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
314f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
315f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Fetch a half-word code unit from an offset past the current PC. The
316f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * "_count" value is in 16-bit code units. Does not advance rPC.
317f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * This variant treats the value as signed.
318f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
319f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
320f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FETCHs _count _reg
321f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movswl      (\_count*2)(rPC), \_reg
322f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
323f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
324f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
325f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Fetch the first byte from an offset past the current PC. The
326f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * "_count" value is in 16-bit code units. Does not advance rPC.
327f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * For example, given instruction of format: AA|op CC|BB, it
328f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * fetches BB.
329f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
330f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
331f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FETCH_BB _count _reg
332f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      (\_count*2)(rPC), \_reg
333f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
334f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
335f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    /*
336f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Fetch the second byte from an offset past the current PC. The
337f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * "_count" value is in 16-bit code units. Does not advance rPC.
338f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * For example, given instruction of format: AA|op CC|BB, it
339f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * fetches CC.
340f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
341f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
342f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FETCH_CC _count _reg
343f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      (\_count*2 + 1)(rPC), \_reg
344f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
345f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
346f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
347f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Fetch the second byte from an offset past the current PC. The
348f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * "_count" value is in 16-bit code units. Does not advance rPC.
349f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * This variant treats the value as signed.
350f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
351f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
352f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FETCH_CCs _count _reg
353f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movsbl      (\_count*2 + 1)(rPC), \_reg
354f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
355f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
356f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
357f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
358f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Fetch one byte from an offset past the current PC.  Pass in the same
359f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * "_count" as you would for FETCH, and an additional 0/1 indicating which
360f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * byte of the halfword you want (lo/hi).
361f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
362f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
363f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FETCH_B _reg  _count  _byte
364f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      (\_count*2+\_byte)(rPC), \_reg
365f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
366f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
367f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
368f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Put the instruction's opcode field into the specified register.
369f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
370f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
371f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      GET_INST_OPCODE _reg
372f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      rINSTbl, \_reg
373f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
374f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
375f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
376f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Begin executing the opcode in _reg.
377f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
378f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
379f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      GOTO_OPCODE _reg
380f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    shl         $6, \_reg
381f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    addl        $dvmAsmInstructionStart,\_reg
382f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jmp         *\_reg
383f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
384f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
385f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
386f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
387f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
388f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Macros pair attempts to speed up FETCH_INST, GET_INST_OPCODE and GOTO_OPCODE
389f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * by using a jump table. _rFinish should must be the same register for
390f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * both macros.
391f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
392f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
393f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FFETCH _rFinish
394f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      (rPC), \_rFinish
395f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
396f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
397f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FGETOP_JMPa _rFinish
398f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      1(rPC), rINST
399f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jmp         *dvmAsmInstructionJmpTable(,\_rFinish, 4)
400f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
401f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
402f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
403f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Macro pair attempts to speed up FETCH_INST, GET_INST_OPCODE and GOTO_OPCODE
404f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * by using a jump table. _rFinish and _count should must be the same register for
405f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * both macros.
406f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
407f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
408f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FFETCH_ADV _count _rFinish
409f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      (\_count*2)(rPC), \_rFinish
410f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
411f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
412f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FGETOP_JMP _count _rFinish
413f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      (\_count*2 + 1)(rPC), rINST
414f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    addl        $(\_count*2), rPC
415f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jmp         *dvmAsmInstructionJmpTable(,\_rFinish, 4)
416f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
417f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
418f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FGETOP_JMP2 _rFinish
419f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      1(rPC), rINST
420f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jmp         *dvmAsmInstructionJmpTable(,\_rFinish, 4)
421f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
422f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
423f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      OLD_JMP_1 _count _rFinish
424f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      (\_count*2)(rPC), \_rFinish
425f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    shl         $6, \_rFinish
426f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
427f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
428f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      OLD_JMP_2 _rFinish
429f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    addl        $dvmAsmInstructionStart,\_rFinish
430f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
431f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
432f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      OLD_JMP_3 _count
433f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    addl        $(\_count*2), rPC
434f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
435f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
436f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      OLD_JMP_4 _rFinish
437f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      1(rPC), rINST
438f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jmp         *\_rFinish
439f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
440f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
441f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      OLD_JMP_A_1 _reg _rFinish
442f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      (rPC, \_reg), \_rFinish
443f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    shl         $6, \_rFinish
444f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
445f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
446f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      OLD_JMP_A_2 _rFinish
447f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    addl        $dvmAsmInstructionStart,\_rFinish
448f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
449f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
450f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      OLD_JMP_A_3 _reg _rFinish
451f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    addl        \_reg, rPC
452f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      1(rPC, \_reg), rINST
453f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jmp         *\_rFinish
454f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
455f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
456f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
457f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Macro pair attempts to speed up FETCH_INST, GET_INST_OPCODE and GOTO_OPCODE
458f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * by using a jump table. _rFinish and _reg should must be the same register for
459f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * both macros.
460f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
461f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
462f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FFETCH_ADV_RB _reg _rFinish
463f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      (\_reg, rPC), \_rFinish
464f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
465f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
466f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FGETOP_RB_JMP _reg _rFinish
467f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      1(\_reg, rPC), rINST
468f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    addl        \_reg, rPC
469f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jmp         *dvmAsmInstructionJmpTable(,\_rFinish, 4)
470f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
471f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
472f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
473f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Attempts to speed up FETCH_INST, GET_INST_OPCODE using
474f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * a jump table. This macro should be called before FINISH_JMP where
475f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * rFinish should be the same register containing the opcode value.
476f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * This is an attempt to split up FINISH in order to reduce or remove
477f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * potential stalls due to the wait for rFINISH.
478f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
479f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
480f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FINISH_FETCH _rFinish
481f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      (rPC), \_rFinish
482f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      1(rPC), rINST
483f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
484f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
485f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
486f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
487f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Attempts to speed up FETCH_ADVANCE_INST, GET_INST_OPCODE using
488f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * a jump table. This macro should be called before FINISH_JMP where
489f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * rFinish should be the same register containing the opcode value.
490f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * This is an attempt to split up FINISH in order to reduce or remove
491f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * potential stalls due to the wait for rFINISH.
492f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
493f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
494f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FINISH_FETCH_ADVANCE _count _rFinish
495f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      (\_count*2)(rPC), \_rFinish
496f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      (\_count*2 + 1)(rPC), rINST
497f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    addl        $(\_count*2), rPC
498f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
499f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
500f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
501f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Attempts to speed up FETCH_ADVANCE_INST_RB, GET_INST_OPCODE using
502f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * a jump table. This macro should be called before FINISH_JMP where
503f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * rFinish should be the same register containing the opcode value.
504f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * This is an attempt to split up FINISH in order to reduce or remove
505f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * potential stalls due to the wait for rFINISH.
506f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
507f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
508f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FINISH_FETCH_ADVANCE_RB _reg _rFinish
509f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      (\_reg, rPC), \_rFinish
510f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      1(\_reg, rPC), rINST
511f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    addl        \_reg, rPC
512f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
513f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
514f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
515f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Attempts to speed up GOTO_OPCODE using a jump table. This macro should
516f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * be called after a FINISH_FETCH* instruction where rFinish should be the
517f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * same register containing the opcode value. This is an attempt to split up
518f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * FINISH in order to reduce or remove potential stalls due to the wait for rFINISH.
519f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
520f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
521f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FINISH_JMP _rFinish
522f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jmp         *dvmAsmInstructionJmpTable(,\_rFinish, 4)
523f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
524f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
525f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
526f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Attempts to speed up FETCH_INST, GET_INST_OPCODE, GOTO_OPCODE by using
527f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * a jump table. Uses a single macro - but it should be faster if we
528f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * split up the fetch for rFinish and the jump using rFinish.
529f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
530f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
531f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FINISH_A
532f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      (rPC), rFinish
533f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      1(rPC), rINST
534f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jmp         *dvmAsmInstructionJmpTable(,rFinish, 4)
535f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
536f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
537f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
538f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Attempts to speed up FETCH_ADVANCE_INST, GET_INST_OPCODE,
539f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * GOTO_OPCODE by using a jump table. Uses a single macro -
540f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * but it should be faster if we split up the fetch for rFinish
541f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * and the jump using rFinish.
542f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
543f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
544f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FINISH _count
545f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      (\_count*2)(rPC), rFinish
546f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      (\_count*2 + 1)(rPC), rINST
547f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    addl        $(\_count*2), rPC
548f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jmp         *dvmAsmInstructionJmpTable(,rFinish, 4)
549f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
550f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
551f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
552f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Attempts to speed up FETCH_ADVANCE_INST_RB, GET_INST_OPCODE,
553f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * GOTO_OPCODE by using a jump table. Uses a single macro -
554f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * but it should be faster if we split up the fetch for rFinish
555f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * and the jump using rFinish.
556f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
557f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
558f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .macro      FINISH_RB _reg _rFinish
559f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      (\_reg, rPC), \_rFinish
560f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      1(\_reg, rPC), rINST
561f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    addl        \_reg, rPC
562f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jmp         *dvmAsmInstructionJmpTable(,\_rFinish, 4)
563f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .endm
564f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
565f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define sReg0 LOCAL0_OFFSET(%ebp)
566f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define sReg1 LOCAL1_OFFSET(%ebp)
567f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define sReg2 LOCAL2_OFFSET(%ebp)
568f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define sReg3 LOCAL3_OFFSET(%ebp)
569f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
570f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   /*
571f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    * Hard coded helper values.
572f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    */
573f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
574f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.balign 16
575f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
576f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LdoubNeg:
577f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .quad       0x8000000000000000
578f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
579f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.L64bits:
580f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .quad       0xFFFFFFFFFFFFFFFF
581f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
582f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LshiftMask2:
583f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .quad       0x0000000000000000
584f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LshiftMask:
585f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .quad       0x000000000000003F
586f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
587f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.Lvalue64:
588f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .quad       0x0000000000000040
589f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
590f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LvaluePosInfLong:
591f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .quad       0x7FFFFFFFFFFFFFFF
592f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
593f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LvalueNegInfLong:
594f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .quad       0x8000000000000000
595f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
596f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LvalueNanLong:
597f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    .quad       0x0000000000000000
598f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
599f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LintMin:
600f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long   0x80000000
601f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
602f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LintMax:
603f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long   0x7FFFFFFF
604f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#endif
605f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is a #include, not a %include, because we want the C pre-processor
609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to expand the macros into assembler assignment statements.
610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#include "../common/asm-constants.h"
612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
613dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#if defined(WITH_JIT)
614dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#include "../common/jit-config.h"
615dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#endif
616dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee
617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .global dvmAsmInstructionStart
619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .type   dvmAsmInstructionStart, %function
620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmInstructionStart = .L_OP_NOP
621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .text
622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOP: /* 0x00 */
626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NOP.S */
627f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
628f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
629f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE: /* 0x01 */
634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE.S */
635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* for move, move-object, long-to-int */
636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB */
637f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl rINSTbl,%eax          # eax<- BA
638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andb   $0xf,%al             # eax<- A
639f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    shrl   $4,rINST            # rINST<- B
640f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx rINST
641f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
642f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
643f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %ecx %eax           # fp[A]<-fp[B]
644f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_FROM16: /* 0x02 */
649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_FROM16.S */
650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* for: move/from16, move-object/from16 */
651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBBBB */
652f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx    rINSTbl,%eax              # eax <= AA
653f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movw     2(rPC),rINSTw             # rINSTw <= BBBB
654f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx rINST              # ecx<- fp[BBBB]
655f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
656f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
657f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %ecx %eax                # fp[AA]<- ecx]
658f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_16: /* 0x03 */
663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_16.S */
664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* for: move/16, move-object/16 */
665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAAAA, vBBBB */
666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    4(rPC),%ecx              # ecx<- BBBB
667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax              # eax<- AAAA
668f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx
669f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 3 %edx
670f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 3
671f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG  %ecx %eax
672f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE: /* 0x04 */
677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_WIDE.S */
678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* move-wide vA, vB */
679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */
680f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx                # ecx <- BA
681f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl      $4,rINST                   # rINST<- B
682f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax rINST 0            # eax<- v[B+0]
683f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD rINST rINST 1           # rINST<- v[B+1]
684f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb      $0xf,%cl                   # ecx <- A
685f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
686f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD rINST %ecx 1            # v[A+1]<- rINST
687f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
688f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %eax %ecx 0             # v[A+0]<- eax
689f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE_FROM16: /* 0x05 */
694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_WIDE_FROM16.S */
695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* move-wide/from16 vAA, vBBBB */
696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */
697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%ecx              # ecx<- BBBB
698f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%eax             # eax<- AAAA
699f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD rINST %ecx 0         # rINST<- v[BBBB+0]
700f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %ecx %ecx 1          # ecx<- v[BBBB+1]
701f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
702f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
703f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD rINST %eax 0         # v[AAAA+0]<- rINST
704f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %ecx %eax 1          # v[AAAA+1]<- eax
705f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE_16: /* 0x06 */
710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_WIDE_16.S */
711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* move-wide/16 vAAAA, vBBBB */
712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */
713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    4(rPC),%ecx            # ecx<- BBBB
714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax            # eax<- AAAA
715f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD rINST %ecx 0       # rINSTw_WORD<- v[BBBB+0]
716f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %ecx %ecx 1        # ecx<- v[BBBB+1]
717f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 3 %edx
718f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD rINST %eax 0       # v[AAAA+0]<- rINST
719f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 3
720f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %ecx %eax 1        # v[AAAA+1]<- ecx
721f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT: /* 0x07 */
726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_OBJECT.S */
727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE.S */
728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* for move, move-object, long-to-int */
729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB */
730f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl rINSTbl,%eax          # eax<- BA
731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andb   $0xf,%al             # eax<- A
732f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    shrl   $4,rINST            # rINST<- B
733f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx rINST
734f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
735f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
736f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %ecx %eax           # fp[A]<-fp[B]
737f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT_FROM16: /* 0x08 */
743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_OBJECT_FROM16.S */
744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_FROM16.S */
745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* for: move/from16, move-object/from16 */
746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBBBB */
747f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx    rINSTbl,%eax              # eax <= AA
748f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movw     2(rPC),rINSTw             # rINSTw <= BBBB
749f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx rINST              # ecx<- fp[BBBB]
750f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
751f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
752f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %ecx %eax                # fp[AA]<- ecx]
753f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT_16: /* 0x09 */
759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_OBJECT_16.S */
760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_16.S */
761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* for: move/16, move-object/16 */
762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAAAA, vBBBB */
763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    4(rPC),%ecx              # ecx<- BBBB
764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax              # eax<- AAAA
765f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx
766f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 3 %edx
767f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 3
768f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG  %ecx %eax
769f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT: /* 0x0a */
775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT.S */
776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* for: move-result, move-result-object */
777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA */
7789f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%eax                    # eax<- rSELF
779f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx    rINSTbl,%ecx                  # ecx<- AA
7809f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_retval(%eax),%eax     # eax<- self->retval.l
781f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
782f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
783f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG  %eax %ecx                    # fp[AA]<- retval.l
784f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT_WIDE: /* 0x0b */
789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT_WIDE.S */
790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* move-result-wide vAA */
7919f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
7929f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_retval(%ecx),%eax
7939f601a917c8878204482c37aec7005054b6776fabuzbee    movl    4+offThread_retval(%ecx),%ecx
794f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
795f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %eax rINST 0     # v[AA+0] <- eax
796f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %ecx rINST 1     # v[AA+1] <- ecx
797f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
798f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT_OBJECT: /* 0x0c */
803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT_OBJECT.S */
804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT.S */
805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* for: move-result, move-result-object */
806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA */
8079f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%eax                    # eax<- rSELF
808f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx    rINSTbl,%ecx                  # ecx<- AA
8099f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_retval(%eax),%eax     # eax<- self->retval.l
810f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
811f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
812f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG  %eax %ecx                    # fp[AA]<- retval.l
813f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_EXCEPTION: /* 0x0d */
819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_EXCEPTION.S */
820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* move-exception vAA */
8219f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    offThread_exception(%ecx),%eax # eax<- dvmGetException bypass
823f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST                # fp[AA]<- exception object
824f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
825f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    $0,offThread_exception(%ecx) # dvmClearException bypass
827f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_VOID: /* 0x0e */
832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN_VOID.S */
833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp       common_returnFromMethod
834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN: /* 0x0f */
838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN.S */
839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
8409f601a917c8878204482c37aec7005054b6776fabuzbee     * Return a 32-bit value.  Copies the return value into the "self"
841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * structure, then jumps to the return handler.
842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: return, return-object
844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA */
8469f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
847f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST               # eax<- vAA
8489f601a917c8878204482c37aec7005054b6776fabuzbee    movl    %eax,offThread_retval(%ecx)   # retval.i <- AA
849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_returnFromMethod
850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_WIDE: /* 0x10 */
854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN_WIDE.S */
855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
8569f601a917c8878204482c37aec7005054b6776fabuzbee     * Return a 64-bit value.  Copies the return value into the "self"
857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * structure, then jumps to the return handler.
858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* return-wide vAA */
8609f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
861f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax rINST 0       # eax<- v[AA+0]
862f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD rINST rINST 1      # rINST<- v[AA+1]
8639f601a917c8878204482c37aec7005054b6776fabuzbee    movl    %eax,offThread_retval(%ecx)
8649f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rINST,4+offThread_retval(%ecx)
865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_returnFromMethod
866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_OBJECT: /* 0x11 */
870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN_OBJECT.S */
871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN.S */
872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
8739f601a917c8878204482c37aec7005054b6776fabuzbee     * Return a 32-bit value.  Copies the return value into the "self"
874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * structure, then jumps to the return handler.
875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: return, return-object
877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA */
8799f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
880f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST               # eax<- vAA
8819f601a917c8878204482c37aec7005054b6776fabuzbee    movl    %eax,offThread_retval(%ecx)   # retval.i <- AA
882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_returnFromMethod
883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_4: /* 0x12 */
888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_4.S */
889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const/4 vA, #+B */
890f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movsx   rINSTbl,%eax              # eax<-ssssssBx
891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    $0xf,%ecx
892f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andl    %eax,%ecx                 # ecx<- A
893f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
894f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl    $4,%eax
896f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax %ecx
897f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_16: /* 0x13 */
902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_16.S */
903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const/16 vAA, #+BBBB */
904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movswl  2(rPC),%ecx                # ecx<- ssssBBBB
905f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    rINST,%eax                 # eax<- AA
906f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
907f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
908f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %ecx %eax                 # vAA<- ssssBBBB
909f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST: /* 0x14 */
914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST.S */
915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const vAA, #+BBBBbbbb */
916f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      2(rPC),%eax             # grab all 32 bits at once
917f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      rINST,%ecx              # ecx<- AA
918f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 3 %edx
919f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 3
920f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax %ecx                # vAA<- eax
921f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_HIGH16: /* 0x15 */
926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_HIGH16.S */
927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const/high16 vAA, #+BBBB0000 */
928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl     2(rPC),%eax                # eax<- 0000BBBB
929f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl       rINST,%ecx                 # ecx<- AA
930f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
931f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sall       $16,%eax                  # eax<- BBBB0000
933f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax %ecx                    # vAA<- eax
934f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_16: /* 0x16 */
939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE_16.S */
940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const-wide/16 vAA, #+BBBB */
941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movswl    2(rPC),%eax               # eax<- ssssBBBB
942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cltd                                # rPC:eax<- ssssssssssssBBBB
943f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %edx rINST 1          # store msw
944f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
945f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %eax rINST 0          # store lsw
946f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
947f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_32: /* 0x17 */
952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE_32.S */
953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const-wide/32 vAA, #+BBBBbbbb */
954f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     2(rPC),%eax                # eax<- BBBBbbbb
955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cltd                                # rPC:eax<- ssssssssssssBBBB
956f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %edx rINST,1          # store msw
957f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 3 %edx
958f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %eax rINST 0          # store lsw
959f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 3
960f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE: /* 0x18 */
965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE.S */
966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const-wide vAA, #+HHHHhhhhBBBBbbbb */
967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      2(rPC),%eax         # eax<- lsw
968f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx        # ecx<- AA
969f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      6(rPC),rINST        # rINST<- msw
970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    leal      (rFP,%ecx,4),%ecx   # dst addr
971f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      rINST,4(%ecx)
972f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 5 %edx
973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %eax,(%ecx)
974f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 5
975f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_HIGH16: /* 0x19 */
980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE_HIGH16.S */
981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const-wide/high16 vAA, #+BBBB000000000000 */
982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl     2(rPC),%eax                # eax<- 0000BBBB
983f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
984f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sall       $16,%eax                  # eax<- BBBB0000
986f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %eax rINST 1            # v[AA+1]<- eax
987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    xorl       %eax,%eax
988f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %eax rINST 0            # v[AA+0]<- eax
989f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_STRING: /* 0x1a */
994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_STRING.S */
995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const/string vAA, String@BBBB */
9979f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax              # eax<- BBBB
9999f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx# ecx<- self->methodClassDex
1000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResStrings(%ecx),%ecx # ecx<- dvmDex->pResStrings
1001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax       # eax<- rResString[BBBB]
1002f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      rINST,%ecx
1003f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
1004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                # resolved yet?
1005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_CONST_STRING_resolve
1006f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG  %eax %ecx                # vAA<- rResString[BBBB]
1007f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
1008f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
1009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_STRING_JUMBO: /* 0x1b */
1013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_STRING_JUMBO.S */
1014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const/string vAA, String@BBBBBBBB */
10169f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
1017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      2(rPC),%eax              # eax<- BBBBBBBB
10189f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx# ecx<- self->methodClassDex
1019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResStrings(%ecx),%ecx # ecx<- dvmDex->pResStrings
1020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax       # eax<- rResString[BBBB]
1021f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      rINST,%ecx
1022f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 3 %edx
1023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                # resolved yet?
1024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_CONST_STRING_JUMBO_resolve
1025f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG  %eax %ecx                # vAA<- rResString[BBBB]
1026f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 3
1027f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
1028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_CLASS: /* 0x1c */
1032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_CLASS.S */
1033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const/class vAA, Class@BBBB */
10359f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
1036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax              # eax<- BBBB
10379f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx# ecx<- self->methodClassDex
1038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResClasses(%ecx),%ecx # ecx<- dvmDex->pResClasses
1039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax       # eax<- rResClasses[BBBB]
1040f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      rINST,%ecx
1041f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
1042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                # resolved yet?
1043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_CONST_CLASS_resolve
1044f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG  %eax %ecx                # vAA<- rResClasses[BBBB]
1045f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
1046f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
1047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MONITOR_ENTER: /* 0x1d */
1051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MONITOR_ENTER.S */
1052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Synchronize on an object.
1054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* monitor-enter vAA */
10569f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
1057f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST               # eax<- vAA
1058f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_WORD 1
1059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl   %eax,%eax                   # null object?
106001605d2b668e8e1701cfdfa302dde847b9171fc9Carl Shapiro    EXPORT_PC                           # need for precise GC
1061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne     .LOP_MONITOR_ENTER_continue
1062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_errNullObject
1063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MONITOR_EXIT: /* 0x1e */
1067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MONITOR_EXIT.S */
1068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Unlock an object.
1070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Exceptions that occur when unlocking a monitor need to appear as
1072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * if they happened at the following instruction.  See the Dalvik
1073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * instruction spec.
1074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* monitor-exit vAA */
1076f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST
10779f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
1078f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
1079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl   %eax,%eax                   # null object?
1080668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee    je      .LOP_MONITOR_EXIT_errNullObject   # go if so
1081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    %eax,OUT_ARG1(%esp)
1082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    %ecx,OUT_ARG0(%esp)
1083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     .LOP_MONITOR_EXIT_continue
1084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CHECK_CAST: /* 0x1f */
1088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CHECK_CAST.S */
1089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Check to see if a cast from one class to another is allowed.
1091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* check-cast vAA, class@BBBB */
10939f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
1094f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  rINST,rINST             # rINST<- vAA (object)
1095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax               # eax<- BBBB
10969f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex
1097f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl     rINST,rINST               # is oject null?
1098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses
1099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_CHECK_CAST_okay          # null obj, cast always succeeds
1100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax        # eax<- resolved class
1101f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      offObject_clazz(rINST),%ecx # ecx<- obj->clazz
1102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # have we resolved this before?
1103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_CHECK_CAST_resolve       # no, go do it now
1104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_resolved:
1105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl      %eax,%ecx                 # same class (trivial success)?
1106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne       .LOP_CHECK_CAST_fullcheck     # no, do full check
1107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_okay:
1108f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
1109f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
1110f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
1111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INSTANCE_OF: /* 0x20 */
1115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INSTANCE_OF.S */
1116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Check to see if an object reference is an instance of a class.
1118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Most common situation is a non-null object, being compared against
1120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * an already-resolved class.
1121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* instance-of vA, vB, class@CCCC */
1123f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    rINST,%eax                # eax<- BA
1124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl    $4,%eax                    # eax<- B
1125f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax                # eax<- vB (obj)
11269f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
1127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl   %eax,%eax                   # object null?
11289f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%ecx  # ecx<- pDvmDex
1129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je      .LOP_INSTANCE_OF_store           # null obj, not instance, store it
1130f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  2(rPC),%edx                 # edx<- CCCC
1131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses
1132f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    (%ecx,%edx,4),%ecx          # ecx<- resolved class
1133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    offObject_clazz(%eax),%eax  # eax<- obj->clazz
1134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl   %ecx,%ecx                   # have we resolved this before?
1135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je      .LOP_INSTANCE_OF_resolve         # not resolved, do it now
1136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_resolved:  # eax<- obj->clazz, ecx<- resolved class
1137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl    %eax,%ecx                   # same class (trivial success)?
1138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je      .LOP_INSTANCE_OF_trivial         # yes, trivial finish
1139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     .LOP_INSTANCE_OF_fullcheck       # no, do full check
1140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ARRAY_LENGTH: /* 0x21 */
1144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ARRAY_LENGTH.S */
1145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Return the length of an array.
1147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1148f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   mov      rINST,%eax                # eax<- BA
1149f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   sarl     $4,rINST                 # rINST<- B
1150f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   GET_VREG_R %ecx rINST              # ecx<- vB (object ref)
1151f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   andb     $0xf,%al                 # eax<- A
1152f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   testl    %ecx,%ecx                 # is null?
1153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   je       common_errNullObject
1154f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   FETCH_INST_OPCODE 1 %edx
1155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   movl     offArrayObject_length(%ecx),%ecx
1156f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   ADVANCE_PC 1
1157f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   SET_VREG %ecx %eax
1158f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee   GOTO_NEXT_R %edx
1159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEW_INSTANCE: /* 0x22 */
1163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEW_INSTANCE.S */
1164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Create a new instance of a class.
1166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* new-instance vAA, class@BBBB */
11689f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
1169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax               # eax<- BBBB
11709f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- pDvmDex
1171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses
1172f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
1173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%ecx        # ecx<- resolved class
1174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %ecx,%ecx                 # resolved?
1175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_NEW_INSTANCE_resolve       # no, go do it
1176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_resolved:  # on entry, ecx<- class
1177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpb      $CLASS_INITIALIZED,offClassObject_status(%ecx)
1178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_NEW_INSTANCE_initialized
1179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp       .LOP_NEW_INSTANCE_needinit
1180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEW_ARRAY: /* 0x23 */
1184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEW_ARRAY.S */
1185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Allocate an array of objects, specified with the array class
1187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * and a count.
1188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The verifier guarantees that this is an array class, so we don't
1190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * check for it here.
1191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* new-array vA, vB, class@CCCC */
11939f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
1194f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
11959f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex
1196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl  2(rPC),%eax                       # eax<- CCCC
1197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    offDvmDex_pResClasses(%ecx),%ecx  # ecx<- pDvmDex->pResClasses
1198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    (%ecx,%eax,4),%ecx                # ecx<- resolved class
1199f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  rINSTbl,%eax
1200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl    $4,%eax                          # eax<- B
1201f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax                      # eax<- vB (array length)
1202f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,rINSTbl                     # rINST<- A
1203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl   %eax,%eax
1204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    js      common_errNegativeArraySize       # bail
1205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl   %ecx,%ecx                         # already resolved?
1206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne     .LOP_NEW_ARRAY_finish                # yes, fast path
1207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     .LOP_NEW_ARRAY_resolve               # resolve now
1208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILLED_NEW_ARRAY: /* 0x24 */
1212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY.S */
1213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Create a new array with elements filled from registers.
1215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: filled-new-array, filled-new-array/range
1217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
1219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op {vCCCC..v(CCCC+AA-1)}, type@BBBB */
12209f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%eax
12219f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%eax),%eax # eax<- pDvmDex
1222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl  2(rPC),%ecx                       # ecx<- BBBB
1223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    offDvmDex_pResClasses(%eax),%eax  # eax<- pDvmDex->pResClasses
1224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    (%eax,%ecx,4),%eax                # eax<- resolved class
1225f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
1226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl   %eax,%eax                         # already resolved?
1227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne     .LOP_FILLED_NEW_ARRAY_continue              # yes, continue
1228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    # less frequent path, so we'll redo some work
12299f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%eax
1230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    $0,OUT_ARG2(%esp)                # arg2<- false
1231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    %ecx,OUT_ARG1(%esp)               # arg1<- BBBB
12329f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%eax),%eax         # eax<- self->method
1233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     .LOP_FILLED_NEW_ARRAY_more
1234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILLED_NEW_ARRAY_RANGE: /* 0x25 */
1238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY_RANGE.S */
1239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY.S */
1240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Create a new array with elements filled from registers.
1242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: filled-new-array, filled-new-array/range
1244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
1246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op {vCCCC..v(CCCC+AA-1)}, type@BBBB */
12479f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%eax
12489f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%eax),%eax # eax<- pDvmDex
1249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl  2(rPC),%ecx                       # ecx<- BBBB
1250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    offDvmDex_pResClasses(%eax),%eax  # eax<- pDvmDex->pResClasses
1251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    (%eax,%ecx,4),%eax                # eax<- resolved class
1252f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
1253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl   %eax,%eax                         # already resolved?
1254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne     .LOP_FILLED_NEW_ARRAY_RANGE_continue              # yes, continue
1255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    # less frequent path, so we'll redo some work
12569f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%eax
1257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    $0,OUT_ARG2(%esp)                # arg2<- false
1258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    %ecx,OUT_ARG1(%esp)               # arg1<- BBBB
12599f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%eax),%eax         # eax<- self->method
1260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     .LOP_FILLED_NEW_ARRAY_RANGE_more
1261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILL_ARRAY_DATA: /* 0x26 */
1266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILL_ARRAY_DATA.S */
1267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* fill-array-data vAA, +BBBBBBBB */
1268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    2(rPC),%ecx                # ecx<- BBBBbbbb
1269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    leal    (rPC,%ecx,2),%ecx          # ecx<- PC + BBBBbbbb*2
1270f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST
1271f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
1272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    %eax,OUT_ARG0(%esp)
1273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    %ecx,OUT_ARG1(%esp)
1274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    call    dvmInterpHandleFillArrayData
1275f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 3 %edx
1276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl   %eax,%eax                   # exception thrown?
1277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je      common_exceptionThrown
1278f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 3
1279f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
1280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_THROW: /* 0x27 */
1284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_THROW.S */
1285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Throw an exception object in the current thread.
1287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* throw vAA */
1289f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
1290f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST              # eax<- exception object
12919f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx                # ecx<- self
1292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl    %eax,%eax                 # null object?
1293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       common_errNullObject
1294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     %eax,offThread_exception(%ecx) # thread->exception<- obj
1295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp      common_exceptionThrown
1296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO: /* 0x28 */
1300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_GOTO.S */
1301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Unconditional branch, 8-bit offset.
1303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The branch distance is a signed code-unit offset, which we need to
1305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * double to get a byte offset.
1306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* goto +AA */
1308f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movsbl  rINSTbl,rINST         # ebx<- ssssssAA
1309f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   rINST,rINST           # test for <0
1310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    js      common_backwardBranch
1311f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    rINST,%eax
1312f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_INDEXED %eax
1313f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC_INDEXED %eax
1314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
1315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO_16: /* 0x29 */
1319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_GOTO_16.S */
1320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Unconditional branch, 16-bit offset.
1322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The branch distance is a signed code-unit offset
1324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* goto/16 +AAAA */
1326f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movswl  2(rPC),rINST           # rINST<- ssssAAAA
1327f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   rINST,rINST            # test for <0
1328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    js      common_backwardBranch
1329f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    rINST,%eax
1330f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_INDEXED %eax
1331f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC_INDEXED %eax
1332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
1333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO_32: /* 0x2a */
1337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_GOTO_32.S */
1338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Unconditional branch, 32-bit offset.
1340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The branch distance is a signed code-unit offset.
1342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Unlike most opcodes, this one is allowed to branch to itself, so
1344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * our "backward branch" test must be "<=0" instead of "<0".
1345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* goto/32 AAAAAAAA */
1347f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    2(rPC),rINST           # rINST<- AAAAAAAA
1348f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    cmpl    $0,rINST              # test for <= 0
1349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jle     common_backwardBranch
1350f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    rINST,%eax
1351f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_INDEXED %eax
1352f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC_INDEXED %eax
1353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
1354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_PACKED_SWITCH: /* 0x2b */
1358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_PACKED_SWITCH.S */
1359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle a packed-switch or sparse-switch instruction.  In both cases
1361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * we decode it and hand it off to a helper function.
1362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * We don't really expect backward branches in a switch statement, but
1364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * they're perfectly legal, so we check for them here.
1365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: packed-switch, sparse-switch
1367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, +BBBB */
1369f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    2(rPC),%ecx           # ecx<- BBBBbbbb
1370f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST         # eax<- vAA
1371f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    leal    (rPC,%ecx,2),%ecx     # ecx<- PC + BBBBbbbb*2
1372f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %eax,OUT_ARG1(%esp)   # ARG1<- vAA
1373f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %ecx,OUT_ARG0(%esp)   # ARG0<- switchData
1374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    call    dvmInterpHandlePackedSwitch
1375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl   %eax,%eax
1376f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %eax,rINST            # set up word offset
1377f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jle     common_backwardBranch # check on special actions
1378f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC_INDEXED rINST
1379f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST
1380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
1381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPARSE_SWITCH: /* 0x2c */
1385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPARSE_SWITCH.S */
1386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_PACKED_SWITCH.S */
1387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle a packed-switch or sparse-switch instruction.  In both cases
1389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * we decode it and hand it off to a helper function.
1390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * We don't really expect backward branches in a switch statement, but
1392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * they're perfectly legal, so we check for them here.
1393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: packed-switch, sparse-switch
1395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, +BBBB */
1397f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    2(rPC),%ecx           # ecx<- BBBBbbbb
1398f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST         # eax<- vAA
1399f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    leal    (rPC,%ecx,2),%ecx     # ecx<- PC + BBBBbbbb*2
1400f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %eax,OUT_ARG1(%esp)   # ARG1<- vAA
1401f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %ecx,OUT_ARG0(%esp)   # ARG0<- switchData
1402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    call    dvmInterpHandleSparseSwitch
1403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl   %eax,%eax
1404f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %eax,rINST            # set up word offset
1405f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jle     common_backwardBranch # check on special actions
1406f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC_INDEXED rINST
1407f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST
1408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
1409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPL_FLOAT: /* 0x2d */
1414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPL_FLOAT.S */
1415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */
1416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* float/double_cmp[gl] vAA, vBB, vCC */
1417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%eax             # eax<- CC
1418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%ecx             # ecx<- BB
1419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
1420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fldl     (rFP,%eax,4)
1421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fldl     (rFP,%ecx,4)
1422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .else
1423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    flds     (rFP,%eax,4)
1424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    flds     (rFP,%ecx,4)
1425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
1426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    xorl     %ecx,%ecx
1427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fucompp     # z if equal, p set if NaN, c set if st0 < st1
1428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fnstsw   %ax
1429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sahf
1430f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      rINST,%eax
1431f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
1432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jp       .LOP_CMPL_FLOAT_isNaN
1433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       .LOP_CMPL_FLOAT_finish
1434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sbbl     %ecx,%ecx
1435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jb       .LOP_CMPL_FLOAT_finish
1436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    incl     %ecx
1437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_FLOAT_finish:
1438f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %ecx %eax
1439f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
1440f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
1441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPG_FLOAT: /* 0x2e */
1446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_FLOAT.S */
1447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */
1448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* float/double_cmp[gl] vAA, vBB, vCC */
1449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%eax             # eax<- CC
1450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%ecx             # ecx<- BB
1451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
1452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fldl     (rFP,%eax,4)
1453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fldl     (rFP,%ecx,4)
1454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .else
1455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    flds     (rFP,%eax,4)
1456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    flds     (rFP,%ecx,4)
1457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
1458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    xorl     %ecx,%ecx
1459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fucompp     # z if equal, p set if NaN, c set if st0 < st1
1460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fnstsw   %ax
1461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sahf
1462f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      rINST,%eax
1463f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
1464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jp       .LOP_CMPG_FLOAT_isNaN
1465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       .LOP_CMPG_FLOAT_finish
1466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sbbl     %ecx,%ecx
1467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jb       .LOP_CMPG_FLOAT_finish
1468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    incl     %ecx
1469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_FLOAT_finish:
1470f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %ecx %eax
1471f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
1472f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
1473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPL_DOUBLE: /* 0x2f */
1478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPL_DOUBLE.S */
1479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */
1480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* float/double_cmp[gl] vAA, vBB, vCC */
1481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%eax             # eax<- CC
1482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%ecx             # ecx<- BB
1483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 1
1484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fldl     (rFP,%eax,4)
1485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fldl     (rFP,%ecx,4)
1486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .else
1487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    flds     (rFP,%eax,4)
1488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    flds     (rFP,%ecx,4)
1489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
1490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    xorl     %ecx,%ecx
1491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fucompp     # z if equal, p set if NaN, c set if st0 < st1
1492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fnstsw   %ax
1493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sahf
1494f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      rINST,%eax
1495f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
1496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jp       .LOP_CMPL_DOUBLE_isNaN
1497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       .LOP_CMPL_DOUBLE_finish
1498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sbbl     %ecx,%ecx
1499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jb       .LOP_CMPL_DOUBLE_finish
1500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    incl     %ecx
1501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_DOUBLE_finish:
1502f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %ecx %eax
1503f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
1504f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
1505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPG_DOUBLE: /* 0x30 */
1510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */
1511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* float/double_cmp[gl] vAA, vBB, vCC */
1512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%eax             # eax<- CC
1513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%ecx             # ecx<- BB
1514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 1
1515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fldl     (rFP,%eax,4)
1516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fldl     (rFP,%ecx,4)
1517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .else
1518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    flds     (rFP,%eax,4)
1519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    flds     (rFP,%ecx,4)
1520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
1521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    xorl     %ecx,%ecx
1522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fucompp     # z if equal, p set if NaN, c set if st0 < st1
1523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fnstsw   %ax
1524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sahf
1525f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      rINST,%eax
1526f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
1527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jp       .LOP_CMPG_DOUBLE_isNaN
1528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       .LOP_CMPG_DOUBLE_finish
1529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sbbl     %ecx,%ecx
1530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jb       .LOP_CMPG_DOUBLE_finish
1531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    incl     %ecx
1532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_DOUBLE_finish:
1533f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %ecx %eax
1534f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
1535f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
1536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMP_LONG: /* 0x31 */
1540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMP_LONG.S */
1541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Compare two 64-bit values.  Puts 0, 1, or -1 into the destination
1543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * register based on the results of the comparison.
1544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* cmp-long vAA, vBB, vCC */
1546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%ecx              # ecx<- BB
1547f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    3(rPC),%edx              # edx<- CC
1548f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax %ecx,1          # eax<- v[BB+1]
1549f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %ecx %ecx 0          # ecx<- v[BB+0]
1550f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    cmpl      4(rFP,%edx,4),%eax
1551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jl        .LOP_CMP_LONG_smaller
1552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jg        .LOP_CMP_LONG_bigger
1553f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sub       (rFP,%edx,4),%ecx
1554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ja        .LOP_CMP_LONG_bigger
1555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jb        .LOP_CMP_LONG_smaller
1556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp       .LOP_CMP_LONG_finish
1557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_EQ: /* 0x32 */
1561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_EQ.S */
1562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */
1563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic two-operand compare-and-branch operation.  Provide a "revcmp"
1565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le
1569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vA, vB, +CCCC */
1571f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx    rINSTbl,%ecx          # ecx <- A+
1572f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,%cl             # ecx <- A
1573f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %ecx           # eax <- vA
1574f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,rINST            # rINST<- B
1575f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    cmpl     (rFP,rINST,4),%eax    # compare (vA, vB)
1576f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movswl   2(rPC),rINST          # Get signed branch offset
1577f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     $2,%eax              # assume not taken
1578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne   1f
1579f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl    rINST,rINST
1580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    js       common_backwardBranch
1581f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     rINST,%eax
1582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:
1583f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_INDEXED %eax
1584f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC_INDEXED %eax
1585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
1586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_NE: /* 0x33 */
1591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_NE.S */
1592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */
1593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic two-operand compare-and-branch operation.  Provide a "revcmp"
1595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le
1599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vA, vB, +CCCC */
1601f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx    rINSTbl,%ecx          # ecx <- A+
1602f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,%cl             # ecx <- A
1603f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %ecx           # eax <- vA
1604f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,rINST            # rINST<- B
1605f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    cmpl     (rFP,rINST,4),%eax    # compare (vA, vB)
1606f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movswl   2(rPC),rINST          # Get signed branch offset
1607f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     $2,%eax              # assume not taken
1608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je   1f
1609f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl    rINST,rINST
1610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    js       common_backwardBranch
1611f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     rINST,%eax
1612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:
1613f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_INDEXED %eax
1614f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC_INDEXED %eax
1615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
1616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LT: /* 0x34 */
1621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LT.S */
1622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */
1623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic two-operand compare-and-branch operation.  Provide a "revcmp"
1625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le
1629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vA, vB, +CCCC */
1631f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx    rINSTbl,%ecx          # ecx <- A+
1632f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,%cl             # ecx <- A
1633f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %ecx           # eax <- vA
1634f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,rINST            # rINST<- B
1635f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    cmpl     (rFP,rINST,4),%eax    # compare (vA, vB)
1636f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movswl   2(rPC),rINST          # Get signed branch offset
1637f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     $2,%eax              # assume not taken
1638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jge   1f
1639f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl    rINST,rINST
1640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    js       common_backwardBranch
1641f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     rINST,%eax
1642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:
1643f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_INDEXED %eax
1644f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC_INDEXED %eax
1645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
1646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GE: /* 0x35 */
1651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GE.S */
1652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */
1653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic two-operand compare-and-branch operation.  Provide a "revcmp"
1655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le
1659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vA, vB, +CCCC */
1661f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx    rINSTbl,%ecx          # ecx <- A+
1662f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,%cl             # ecx <- A
1663f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %ecx           # eax <- vA
1664f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,rINST            # rINST<- B
1665f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    cmpl     (rFP,rINST,4),%eax    # compare (vA, vB)
1666f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movswl   2(rPC),rINST          # Get signed branch offset
1667f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     $2,%eax              # assume not taken
1668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jl   1f
1669f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl    rINST,rINST
1670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    js       common_backwardBranch
1671f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     rINST,%eax
1672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:
1673f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_INDEXED %eax
1674f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC_INDEXED %eax
1675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
1676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GT: /* 0x36 */
1681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GT.S */
1682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */
1683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic two-operand compare-and-branch operation.  Provide a "revcmp"
1685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le
1689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vA, vB, +CCCC */
1691f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx    rINSTbl,%ecx          # ecx <- A+
1692f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,%cl             # ecx <- A
1693f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %ecx           # eax <- vA
1694f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,rINST            # rINST<- B
1695f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    cmpl     (rFP,rINST,4),%eax    # compare (vA, vB)
1696f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movswl   2(rPC),rINST          # Get signed branch offset
1697f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     $2,%eax              # assume not taken
1698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jle   1f
1699f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl    rINST,rINST
1700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    js       common_backwardBranch
1701f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     rINST,%eax
1702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:
1703f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_INDEXED %eax
1704f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC_INDEXED %eax
1705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
1706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LE: /* 0x37 */
1711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LE.S */
1712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */
1713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic two-operand compare-and-branch operation.  Provide a "revcmp"
1715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le
1719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vA, vB, +CCCC */
1721f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx    rINSTbl,%ecx          # ecx <- A+
1722f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,%cl             # ecx <- A
1723f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %ecx           # eax <- vA
1724f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,rINST            # rINST<- B
1725f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    cmpl     (rFP,rINST,4),%eax    # compare (vA, vB)
1726f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movswl   2(rPC),rINST          # Get signed branch offset
1727f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     $2,%eax              # assume not taken
1728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jg   1f
1729f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl    rINST,rINST
1730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    js       common_backwardBranch
1731f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     rINST,%eax
1732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:
1733f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_INDEXED %eax
1734f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC_INDEXED %eax
1735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
1736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_EQZ: /* 0x38 */
1741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_EQZ.S */
1742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */
1743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic one-operand compare-and-branch operation.  Provide a "revcmp"
1745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez
1749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vAA, +BBBB */
1751f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    cmpl     $0,(rFP,rINST,4)     # compare (vA, 0)
1752f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movswl   2(rPC),rINST         # fetch signed displacement
1753f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     $2,%eax             # assume branch not taken
1754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne   1f
1755f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl    rINST,rINST
1756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    js       common_backwardBranch
1757f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     rINST,%eax
1758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:
1759f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_INDEXED %eax
1760f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC_INDEXED %eax
1761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
1762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_NEZ: /* 0x39 */
1767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_NEZ.S */
1768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */
1769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic one-operand compare-and-branch operation.  Provide a "revcmp"
1771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez
1775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vAA, +BBBB */
1777f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    cmpl     $0,(rFP,rINST,4)     # compare (vA, 0)
1778f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movswl   2(rPC),rINST         # fetch signed displacement
1779f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     $2,%eax             # assume branch not taken
1780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je   1f
1781f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl    rINST,rINST
1782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    js       common_backwardBranch
1783f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     rINST,%eax
1784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:
1785f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_INDEXED %eax
1786f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC_INDEXED %eax
1787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
1788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LTZ: /* 0x3a */
1793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LTZ.S */
1794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */
1795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic one-operand compare-and-branch operation.  Provide a "revcmp"
1797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez
1801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vAA, +BBBB */
1803f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    cmpl     $0,(rFP,rINST,4)     # compare (vA, 0)
1804f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movswl   2(rPC),rINST         # fetch signed displacement
1805f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     $2,%eax             # assume branch not taken
1806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jge   1f
1807f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl    rINST,rINST
1808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    js       common_backwardBranch
1809f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     rINST,%eax
1810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:
1811f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_INDEXED %eax
1812f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC_INDEXED %eax
1813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
1814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GEZ: /* 0x3b */
1819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GEZ.S */
1820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */
1821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic one-operand compare-and-branch operation.  Provide a "revcmp"
1823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez
1827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vAA, +BBBB */
1829f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    cmpl     $0,(rFP,rINST,4)     # compare (vA, 0)
1830f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movswl   2(rPC),rINST         # fetch signed displacement
1831f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     $2,%eax             # assume branch not taken
1832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jl   1f
1833f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl    rINST,rINST
1834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    js       common_backwardBranch
1835f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     rINST,%eax
1836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:
1837f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_INDEXED %eax
1838f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC_INDEXED %eax
1839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
1840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GTZ: /* 0x3c */
1845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GTZ.S */
1846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */
1847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic one-operand compare-and-branch operation.  Provide a "revcmp"
1849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez
1853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vAA, +BBBB */
1855f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    cmpl     $0,(rFP,rINST,4)     # compare (vA, 0)
1856f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movswl   2(rPC),rINST         # fetch signed displacement
1857f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     $2,%eax             # assume branch not taken
1858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jle   1f
1859f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl    rINST,rINST
1860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    js       common_backwardBranch
1861f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     rINST,%eax
1862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:
1863f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_INDEXED %eax
1864f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC_INDEXED %eax
1865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
1866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LEZ: /* 0x3d */
1871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LEZ.S */
1872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */
1873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic one-operand compare-and-branch operation.  Provide a "revcmp"
1875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez
1879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vAA, +BBBB */
1881f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    cmpl     $0,(rFP,rINST,4)     # compare (vA, 0)
1882f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movswl   2(rPC),rINST         # fetch signed displacement
1883f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     $2,%eax             # assume branch not taken
1884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jg   1f
1885f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl    rINST,rINST
1886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    js       common_backwardBranch
1887f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     rINST,%eax
1888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:
1889f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_INDEXED %eax
1890f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC_INDEXED %eax
1891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
1892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_3E: /* 0x3e */
1897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_3E.S */
1898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */
1899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_abort
1900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_3F: /* 0x3f */
1905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_3F.S */
1906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */
1907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_abort
1908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_40: /* 0x40 */
1913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_40.S */
1914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */
1915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_abort
1916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_41: /* 0x41 */
1921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_41.S */
1922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */
1923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_abort
1924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_42: /* 0x42 */
1929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_42.S */
1930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */
1931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_abort
1932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_43: /* 0x43 */
1937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_43.S */
1938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */
1939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_abort
1940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET: /* 0x44 */
1945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */
1946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array get, 32 bits or less.  vAA <- vBB[vCC].
1948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short
1950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
1952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
1953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
1954f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %eax %eax               # eax<- vBB (array object)
1955f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # ecs<- vCC (requested index)
1956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # null array object?
1957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # bail if so
1958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl      offArrayObject_length(%eax),%ecx
19593e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee    jae       common_errArrayIndex      # index >= length, bail.  Expects
19603e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #    arrayObj in eax
19613e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #    index in ecx
1962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     offArrayObject_contents(%eax,%ecx,4),%eax
1963f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_AGET_finish:
1964f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
1965f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG  %eax rINST
1966f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
1967f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
1968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_WIDE: /* 0x45 */
1972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_WIDE.S */
1973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array get, 64 bits.  vAA <- vBB[vCC].
1975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
1978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
1979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
1980f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %eax %eax               # eax<- vBB (array object)
1981f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # ecs<- vCC (requested index)
1982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # null array object?
1983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # bail if so
1984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl      offArrayObject_length(%eax),%ecx
1985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jb        .LOP_AGET_WIDE_finish        # index < length, OK
19863e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee    jmp       common_errArrayIndex      # index >= length, bail.  Expects
19873e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #    arrayObj in eax
19883e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #    index in ecx
1989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_OBJECT: /* 0x46 */
1993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_OBJECT.S */
1994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */
1995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array get, 32 bits or less.  vAA <- vBB[vCC].
1997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short
1999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
2002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
2003f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %eax %eax               # eax<- vBB (array object)
2004f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # ecs<- vCC (requested index)
2005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # null array object?
2006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # bail if so
2007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl      offArrayObject_length(%eax),%ecx
20083e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee    jae       common_errArrayIndex      # index >= length, bail.  Expects
20093e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #    arrayObj in eax
20103e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #    index in ecx
2011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     offArrayObject_contents(%eax,%ecx,4),%eax
2012f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_AGET_OBJECT_finish:
2013f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2014f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG  %eax rINST
2015f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2016f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_BOOLEAN: /* 0x47 */
2022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_BOOLEAN.S */
2023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */
2024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array get, 32 bits or less.  vAA <- vBB[vCC].
2026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short
2028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
2031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
2032f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %eax %eax               # eax<- vBB (array object)
2033f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # ecs<- vCC (requested index)
2034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # null array object?
2035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # bail if so
2036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl      offArrayObject_length(%eax),%ecx
20373e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee    jae       common_errArrayIndex      # index >= length, bail.  Expects
20383e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #    arrayObj in eax
20393e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #    index in ecx
2040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl     offArrayObject_contents(%eax,%ecx,1),%eax
2041f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_AGET_BOOLEAN_finish:
2042f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2043f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG  %eax rINST
2044f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2045f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_BYTE: /* 0x48 */
2051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_BYTE.S */
2052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */
2053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array get, 32 bits or less.  vAA <- vBB[vCC].
2055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short
2057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
2060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
2061f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %eax %eax               # eax<- vBB (array object)
2062f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # ecs<- vCC (requested index)
2063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # null array object?
2064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # bail if so
2065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl      offArrayObject_length(%eax),%ecx
20663e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee    jae       common_errArrayIndex      # index >= length, bail.  Expects
20673e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #    arrayObj in eax
20683e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #    index in ecx
2069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movsbl     offArrayObject_contents(%eax,%ecx,1),%eax
2070f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_AGET_BYTE_finish:
2071f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2072f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG  %eax rINST
2073f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2074f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_CHAR: /* 0x49 */
2080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_CHAR.S */
2081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */
2082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array get, 32 bits or less.  vAA <- vBB[vCC].
2084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short
2086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
2089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
2090f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %eax %eax               # eax<- vBB (array object)
2091f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # ecs<- vCC (requested index)
2092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # null array object?
2093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # bail if so
2094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl      offArrayObject_length(%eax),%ecx
20953e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee    jae       common_errArrayIndex      # index >= length, bail.  Expects
20963e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #    arrayObj in eax
20973e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #    index in ecx
2098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl     offArrayObject_contents(%eax,%ecx,2),%eax
2099f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_AGET_CHAR_finish:
2100f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2101f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG  %eax rINST
2102f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2103f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_SHORT: /* 0x4a */
2109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_SHORT.S */
2110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */
2111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array get, 32 bits or less.  vAA <- vBB[vCC].
2113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short
2115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
2118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
2119f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %eax %eax               # eax<- vBB (array object)
2120f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # ecs<- vCC (requested index)
2121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # null array object?
2122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # bail if so
2123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl      offArrayObject_length(%eax),%ecx
21243e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee    jae       common_errArrayIndex      # index >= length, bail.  Expects
21253e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #    arrayObj in eax
21263e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #    index in ecx
2127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movswl     offArrayObject_contents(%eax,%ecx,2),%eax
2128f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_AGET_SHORT_finish:
2129f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2130f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG  %eax rINST
2131f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2132f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT: /* 0x4b */
2138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */
2139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array put, 32 bits or less.  vBB[vCC] <- vAA
2141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short
2143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
2146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
2147f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %eax %eax               # eax<- vBB (array object)
2148f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # ecs<- vCC (requested index)
2149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # null array object?
2150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # bail if so
2151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl      offArrayObject_length(%eax),%ecx
21523e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee    jae       common_errArrayIndex      # index >= length, bail.  Expects:
21533e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #   arrayObj in eax
21543e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #   index in ecx
2155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    leal      offArrayObject_contents(%eax,%ecx,4),%eax
2156f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_APUT_finish:
2157f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx rINST
2158f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     %ecx,(%eax)
2160f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2161f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_WIDE: /* 0x4c */
2166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_WIDE.S */
2167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array put, 64 bits.  vBB[vCC]<-vAA.
2169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
2173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
2174f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %eax %eax               # eax<- vBB (array object)
2175f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # ecs<- vCC (requested index)
2176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # null array object?
2177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # bail if so
2178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl      offArrayObject_length(%eax),%ecx
2179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jb        .LOP_APUT_WIDE_finish        # index < length, OK
21803e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee    jmp       common_errArrayIndex      # index >= length, bail.  Expects:
21813e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #   arrayObj in eax
21823e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #   index in ecx
2183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_OBJECT: /* 0x4d */
2187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_OBJECT.S */
2188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array put, 32 bits or less.  vBB[vCC] <- vAA
2190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short
2192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
2195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
2196f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %eax %eax               # eax<- vBB (array object)
2197f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # ecs<- vCC (requested index)
2198f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  rINST rINST             # rINST<- vAA
2199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # null array object?
2200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # bail if so
2201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl      offArrayObject_length(%eax),%ecx
2202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jb        .LOP_APUT_OBJECT_continue
22033e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee    jmp       common_errArrayIndex      # index >= length, bail.  Expects
22043e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #    arrayObj in eax
22053e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #    index in ecx
2206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_BOOLEAN: /* 0x4e */
2210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_BOOLEAN.S */
2211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */
2212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array put, 32 bits or less.  vBB[vCC] <- vAA
2214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short
2216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
2219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
2220f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %eax %eax               # eax<- vBB (array object)
2221f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # ecs<- vCC (requested index)
2222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # null array object?
2223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # bail if so
2224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl      offArrayObject_length(%eax),%ecx
22253e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee    jae       common_errArrayIndex      # index >= length, bail.  Expects:
22263e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #   arrayObj in eax
22273e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #   index in ecx
2228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    leal      offArrayObject_contents(%eax,%ecx,1),%eax
2229f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_APUT_BOOLEAN_finish:
2230f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx rINST
2231f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movb     %cl,(%eax)
2233f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2234f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_BYTE: /* 0x4f */
2240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_BYTE.S */
2241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */
2242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array put, 32 bits or less.  vBB[vCC] <- vAA
2244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short
2246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
2249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
2250f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %eax %eax               # eax<- vBB (array object)
2251f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # ecs<- vCC (requested index)
2252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # null array object?
2253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # bail if so
2254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl      offArrayObject_length(%eax),%ecx
22553e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee    jae       common_errArrayIndex      # index >= length, bail.  Expects:
22563e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #   arrayObj in eax
22573e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #   index in ecx
2258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    leal      offArrayObject_contents(%eax,%ecx,1),%eax
2259f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_APUT_BYTE_finish:
2260f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx rINST
2261f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movb     %cl,(%eax)
2263f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2264f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_CHAR: /* 0x50 */
2270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_CHAR.S */
2271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */
2272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array put, 32 bits or less.  vBB[vCC] <- vAA
2274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short
2276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
2279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
2280f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %eax %eax               # eax<- vBB (array object)
2281f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # ecs<- vCC (requested index)
2282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # null array object?
2283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # bail if so
2284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl      offArrayObject_length(%eax),%ecx
22853e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee    jae       common_errArrayIndex      # index >= length, bail.  Expects:
22863e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #   arrayObj in eax
22873e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #   index in ecx
2288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    leal      offArrayObject_contents(%eax,%ecx,2),%eax
2289f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_APUT_CHAR_finish:
2290f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx rINST
2291f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movw     %cx,(%eax)
2293f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2294f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_SHORT: /* 0x51 */
2300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_SHORT.S */
2301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */
2302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array put, 32 bits or less.  vBB[vCC] <- vAA
2304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short
2306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
2309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
2310f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %eax %eax               # eax<- vBB (array object)
2311f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # ecs<- vCC (requested index)
2312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # null array object?
2313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # bail if so
2314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl      offArrayObject_length(%eax),%ecx
23153e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee    jae       common_errArrayIndex      # index >= length, bail.  Expects:
23163e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #   arrayObj in eax
23173e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee                                        #   index in ecx
2318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    leal      offArrayObject_contents(%eax,%ecx,2),%eax
2319f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_APUT_SHORT_finish:
2320f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx rINST
2321f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movw     %cx,(%eax)
2323f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2324f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET: /* 0x52 */
2330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */
2331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field get.
2333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
2335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
23379f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
2338f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  2(rPC),%edx                         # edx<- 0000CCCC
23399f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
2340f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  rINSTbl,%ecx                        # ecx<- BA
2341f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,%ecx                            # ecx<- B
2342f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
2343f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,rINSTbl                       # rINST<- A
2344f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx                        # ecx<- fp[B], the object ptr
2345f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    (%eax,%edx,4),%eax                  # resolved entry
2346f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   %eax,%eax                           # is resolved entry null?
2347f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jne     .LOP_IGET_finish                  # no, already resolved
2348f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %edx,OUT_ARG1(%esp)                 # needed by dvmResolveInstField
23499f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
2350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     .LOP_IGET_resolve
2351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_WIDE: /* 0x53 */
2355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_WIDE.S */
2356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 64-bit instance field get.
2358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
23619f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
2362f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  2(rPC),%edx                         # edx<- 0000CCCC
23639f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
2364f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  rINSTbl,%ecx                        # ecx<- BA
2365f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,%ecx                            # ecx<- B
2366f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
2367f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,rINSTbl                       # rINST<- A
2368f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx                        # ecx<- fp[B], the object ptr
2369f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    (%eax,%edx,4),%eax                  # resolved entry
2370f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   %eax,%eax                           # is resolved entry null?
2371f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jne     .LOP_IGET_WIDE_finish                  # no, already resolved
2372f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %edx,OUT_ARG1(%esp)                 # for dvmResolveInstField
23739f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
2374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     .LOP_IGET_WIDE_resolve
2375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_OBJECT: /* 0x54 */
2379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_OBJECT.S */
2380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */
2381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field get.
2383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
2385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
23879f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
2388f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  2(rPC),%edx                         # edx<- 0000CCCC
23899f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
2390f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  rINSTbl,%ecx                        # ecx<- BA
2391f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,%ecx                            # ecx<- B
2392f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
2393f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,rINSTbl                       # rINST<- A
2394f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx                        # ecx<- fp[B], the object ptr
2395f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    (%eax,%edx,4),%eax                  # resolved entry
2396f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   %eax,%eax                           # is resolved entry null?
2397f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jne     .LOP_IGET_OBJECT_finish                  # no, already resolved
2398f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %edx,OUT_ARG1(%esp)                 # needed by dvmResolveInstField
23999f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
2400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     .LOP_IGET_OBJECT_resolve
2401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_BOOLEAN: /* 0x55 */
2406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_BOOLEAN.S */
2407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */
2408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field get.
2410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
2412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
24149f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
2415f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  2(rPC),%edx                         # edx<- 0000CCCC
24169f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
2417f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  rINSTbl,%ecx                        # ecx<- BA
2418f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,%ecx                            # ecx<- B
2419f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
2420f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,rINSTbl                       # rINST<- A
2421f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx                        # ecx<- fp[B], the object ptr
2422f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    (%eax,%edx,4),%eax                  # resolved entry
2423f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   %eax,%eax                           # is resolved entry null?
2424f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jne     .LOP_IGET_BOOLEAN_finish                  # no, already resolved
2425f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %edx,OUT_ARG1(%esp)                 # needed by dvmResolveInstField
24269f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
2427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     .LOP_IGET_BOOLEAN_resolve
2428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_BYTE: /* 0x56 */
2433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_BYTE.S */
2434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */
2435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field get.
2437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
2439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
24419f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
2442f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  2(rPC),%edx                         # edx<- 0000CCCC
24439f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
2444f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  rINSTbl,%ecx                        # ecx<- BA
2445f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,%ecx                            # ecx<- B
2446f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
2447f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,rINSTbl                       # rINST<- A
2448f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx                        # ecx<- fp[B], the object ptr
2449f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    (%eax,%edx,4),%eax                  # resolved entry
2450f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   %eax,%eax                           # is resolved entry null?
2451f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jne     .LOP_IGET_BYTE_finish                  # no, already resolved
2452f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %edx,OUT_ARG1(%esp)                 # needed by dvmResolveInstField
24539f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
2454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     .LOP_IGET_BYTE_resolve
2455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_CHAR: /* 0x57 */
2460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_CHAR.S */
2461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */
2462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field get.
2464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
2466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
24689f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
2469f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  2(rPC),%edx                         # edx<- 0000CCCC
24709f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
2471f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  rINSTbl,%ecx                        # ecx<- BA
2472f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,%ecx                            # ecx<- B
2473f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
2474f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,rINSTbl                       # rINST<- A
2475f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx                        # ecx<- fp[B], the object ptr
2476f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    (%eax,%edx,4),%eax                  # resolved entry
2477f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   %eax,%eax                           # is resolved entry null?
2478f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jne     .LOP_IGET_CHAR_finish                  # no, already resolved
2479f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %edx,OUT_ARG1(%esp)                 # needed by dvmResolveInstField
24809f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
2481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     .LOP_IGET_CHAR_resolve
2482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_SHORT: /* 0x58 */
2487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_SHORT.S */
2488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */
2489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field get.
2491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
2493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
24959f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
2496f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  2(rPC),%edx                         # edx<- 0000CCCC
24979f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
2498f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  rINSTbl,%ecx                        # ecx<- BA
2499f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,%ecx                            # ecx<- B
2500f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
2501f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,rINSTbl                       # rINST<- A
2502f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx                        # ecx<- fp[B], the object ptr
2503f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    (%eax,%edx,4),%eax                  # resolved entry
2504f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   %eax,%eax                           # is resolved entry null?
2505f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jne     .LOP_IGET_SHORT_finish                  # no, already resolved
2506f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %edx,OUT_ARG1(%esp)                 # needed by dvmResolveInstField
25079f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
2508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     .LOP_IGET_SHORT_resolve
2509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT: /* 0x59 */
2514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */
2515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field put.
2518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short
2520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
25229f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
2523f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  2(rPC),%edx                         # %edx<- 0000CCCC
25249f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
2525f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  rINSTbl,%ecx                        # ecx<- BA
2526f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,%ecx                            # ecx<- B
2527f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
2528f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,rINSTbl                       # rINST<- A
2529f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx                        # ecx<- fp[B], the object ptr
2530f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    (%eax,%edx,4),%eax                  # resolved entry
2531f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   %eax,%eax                           # is resolved entry null?
2532f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jne     .LOP_IPUT_finish                  # no, already resolved
2533f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %edx,OUT_ARG1(%esp)
25349f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
2535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     .LOP_IPUT_resolve
2536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_WIDE: /* 0x5a */
2540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_WIDE.S */
2541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 64-bit instance field put.
2543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
25469f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
2547f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  2(rPC),%edx                         # edx<- 0000CCCC
25489f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
2549f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  rINSTbl,%ecx                        # ecx<- BA
2550f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,%ecx                            # ecx<- B
2551f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
2552f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,rINSTbl                       # rINST<- A
2553f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx                        # ecx<- fp[B], the object ptr
2554f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    (%eax,%edx,4),%eax                  # resolved entry
2555f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   %eax,%eax                           # is resolved entry null?
2556f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jne     .LOP_IPUT_WIDE_finish                  # no, already resolved
2557f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %edx,OUT_ARG1(%esp)
25589f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
2559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     .LOP_IPUT_WIDE_resolve
2560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_OBJECT: /* 0x5b */
2564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_OBJECT.S */
2565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
25663d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * Object field put.
2567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
25683d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * for: iput-object
2569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
25719f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
2572f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  2(rPC),%edx                         # edx<- 0000CCCC
25739f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
2574f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  rINSTbl,%ecx                        # ecx<- BA
2575f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,%ecx                            # ecx<- B
2576f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
2577f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,rINSTbl                       # rINST<- A
2578f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx                        # ecx<- fp[B], the object ptr
2579f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    (%eax,%edx,4),%eax                  # resolved entry
2580f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   %eax,%eax                           # is resolved entry null?
2581f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jne     .LOP_IPUT_OBJECT_finish                  # no, already resolved
2582f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %edx,OUT_ARG1(%esp)
25839f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
2584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     .LOP_IPUT_OBJECT_resolve
2585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_BOOLEAN: /* 0x5c */
2589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_BOOLEAN.S */
2590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */
2591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field put.
2594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short
2596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
25989f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
2599f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  2(rPC),%edx                         # %edx<- 0000CCCC
26009f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
2601f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  rINSTbl,%ecx                        # ecx<- BA
2602f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,%ecx                            # ecx<- B
2603f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
2604f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,rINSTbl                       # rINST<- A
2605f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx                        # ecx<- fp[B], the object ptr
2606f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    (%eax,%edx,4),%eax                  # resolved entry
2607f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   %eax,%eax                           # is resolved entry null?
2608f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jne     .LOP_IPUT_BOOLEAN_finish                  # no, already resolved
2609f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %edx,OUT_ARG1(%esp)
26109f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
2611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     .LOP_IPUT_BOOLEAN_resolve
2612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_BYTE: /* 0x5d */
2617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_BYTE.S */
2618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */
2619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field put.
2622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short
2624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
26269f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
2627f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  2(rPC),%edx                         # %edx<- 0000CCCC
26289f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
2629f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  rINSTbl,%ecx                        # ecx<- BA
2630f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,%ecx                            # ecx<- B
2631f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
2632f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,rINSTbl                       # rINST<- A
2633f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx                        # ecx<- fp[B], the object ptr
2634f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    (%eax,%edx,4),%eax                  # resolved entry
2635f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   %eax,%eax                           # is resolved entry null?
2636f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jne     .LOP_IPUT_BYTE_finish                  # no, already resolved
2637f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %edx,OUT_ARG1(%esp)
26389f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
2639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     .LOP_IPUT_BYTE_resolve
2640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_CHAR: /* 0x5e */
2645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_CHAR.S */
2646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */
2647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field put.
2650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short
2652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
26549f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
2655f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  2(rPC),%edx                         # %edx<- 0000CCCC
26569f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
2657f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  rINSTbl,%ecx                        # ecx<- BA
2658f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,%ecx                            # ecx<- B
2659f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
2660f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,rINSTbl                       # rINST<- A
2661f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx                        # ecx<- fp[B], the object ptr
2662f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    (%eax,%edx,4),%eax                  # resolved entry
2663f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   %eax,%eax                           # is resolved entry null?
2664f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jne     .LOP_IPUT_CHAR_finish                  # no, already resolved
2665f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %edx,OUT_ARG1(%esp)
26669f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
2667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     .LOP_IPUT_CHAR_resolve
2668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_SHORT: /* 0x5f */
2673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_SHORT.S */
2674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */
2675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field put.
2678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short
2680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
26829f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
2683f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  2(rPC),%edx                         # %edx<- 0000CCCC
26849f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
2685f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  rINSTbl,%ecx                        # ecx<- BA
2686f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,%ecx                            # ecx<- B
2687f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
2688f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,rINSTbl                       # rINST<- A
2689f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx                        # ecx<- fp[B], the object ptr
2690f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    (%eax,%edx,4),%eax                  # resolved entry
2691f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   %eax,%eax                           # is resolved entry null?
2692f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jne     .LOP_IPUT_SHORT_finish                  # no, already resolved
2693f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %edx,OUT_ARG1(%esp)
26949f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
2695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     .LOP_IPUT_SHORT_resolve
2696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET: /* 0x60 */
2701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */
2702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SGET handler.
2704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
2706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
27089f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
2709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax                        # eax<- field ref BBBB
27109f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
2711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
2712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
2713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                          # resolved entry null?
2714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_SGET_resolve                # if not, make it so
2715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_finish:     # field ptr in eax
2716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offStaticField_value(%eax),%eax
2717f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2718f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2719f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
2720f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_WIDE: /* 0x61 */
2725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_WIDE.S */
2726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 64-bit SGET handler.
2728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* sget-wide vAA, field@BBBB */
27319f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
2732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax                        # eax<- field ref BBBB
27339f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
2734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
2735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
2736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                          # resolved entry null?
2737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_SGET_WIDE_resolve                # if not, make it so
2738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_WIDE_finish:     # field ptr in eax
2739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offStaticField_value(%eax),%ecx    # ecx<- lsw
2740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      4+offStaticField_value(%eax),%eax  # eax<- msw
2741f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2742f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2743f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %ecx rINST 0
2744f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %eax rINST 1
2745f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_OBJECT: /* 0x62 */
2750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_OBJECT.S */
2751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */
2752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SGET handler.
2754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
2756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
27589f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
2759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax                        # eax<- field ref BBBB
27609f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
2761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
2762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
2763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                          # resolved entry null?
2764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_SGET_OBJECT_resolve                # if not, make it so
2765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_OBJECT_finish:     # field ptr in eax
2766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offStaticField_value(%eax),%eax
2767f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2768f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2769f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
2770f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_BOOLEAN: /* 0x63 */
2776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_BOOLEAN.S */
2777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */
2778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SGET handler.
2780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
2782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
27849f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
2785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax                        # eax<- field ref BBBB
27869f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
2787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
2788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
2789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                          # resolved entry null?
2790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_SGET_BOOLEAN_resolve                # if not, make it so
2791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BOOLEAN_finish:     # field ptr in eax
2792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offStaticField_value(%eax),%eax
2793f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2794f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2795f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
2796f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_BYTE: /* 0x64 */
2802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_BYTE.S */
2803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */
2804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SGET handler.
2806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
2808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
28109f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
2811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax                        # eax<- field ref BBBB
28129f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
2813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
2814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
2815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                          # resolved entry null?
2816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_SGET_BYTE_resolve                # if not, make it so
2817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BYTE_finish:     # field ptr in eax
2818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offStaticField_value(%eax),%eax
2819f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2820f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2821f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
2822f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_CHAR: /* 0x65 */
2828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_CHAR.S */
2829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */
2830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SGET handler.
2832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
2834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
28369f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
2837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax                        # eax<- field ref BBBB
28389f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
2839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
2840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
2841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                          # resolved entry null?
2842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_SGET_CHAR_resolve                # if not, make it so
2843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_CHAR_finish:     # field ptr in eax
2844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offStaticField_value(%eax),%eax
2845f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2846f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2847f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
2848f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_SHORT: /* 0x66 */
2854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_SHORT.S */
2855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */
2856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SGET handler.
2858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
2860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
28629f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
2863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax                        # eax<- field ref BBBB
28649f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
2865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
2866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
2867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                          # resolved entry null?
2868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_SGET_SHORT_resolve                # if not, make it so
2869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_SHORT_finish:     # field ptr in eax
2870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offStaticField_value(%eax),%eax
2871f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2872f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2873f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
2874f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT: /* 0x67 */
2880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */
2881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SPUT handler.
2883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
28843d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * for: sput, sput-boolean, sput-byte, sput-char, sput-short
2885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
28879f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
2888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax                        # eax<- field ref BBBB
28899f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
2890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
2891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
2892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                          # resolved entry null?
2893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_SPUT_resolve                # if not, make it so
2894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_finish:     # field ptr in eax
2895f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx rINST
2896f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2897f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %ecx,offStaticField_value(%eax)
2899f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_WIDE: /* 0x68 */
2904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_WIDE.S */
2905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SPUT handler.
2907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short
2909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
29119f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
2912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax                        # eax<- field ref BBBB
29139f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
2914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
2915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
2916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                          # resolved entry null?
2917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_SPUT_WIDE_resolve                # if not, make it so
2918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_WIDE_finish:     # field ptr in eax
2919f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %ecx rINST 0                  # rINST<- lsw
2920f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD rINST rINST 1                 # ecx<- msw
2921f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2922f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2923f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      %ecx,offStaticField_value(%eax)
2924f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      rINST,4+offStaticField_value(%eax)
2925f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_OBJECT: /* 0x69 */
2930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_OBJECT.S */
2931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
29323d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * SPUT object handler.
2933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
29359f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
2936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax                        # eax<- field ref BBBB
29379f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
2938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
29393d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField
2940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                          # resolved entry null?
2941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_SPUT_OBJECT_resolve                # if not, make it so
2942d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee.LOP_SPUT_OBJECT_finish:                              # field ptr in eax
2943f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx                       # ecx<- AA
2944f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx
29453d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    jmp       .LOP_SPUT_OBJECT_continue
2946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_BOOLEAN: /* 0x6a */
2950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_BOOLEAN.S */
2951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */
2952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SPUT handler.
2954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
29553d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * for: sput, sput-boolean, sput-byte, sput-char, sput-short
2956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
29589f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
2959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax                        # eax<- field ref BBBB
29609f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
2961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
2962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
2963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                          # resolved entry null?
2964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_SPUT_BOOLEAN_resolve                # if not, make it so
2965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BOOLEAN_finish:     # field ptr in eax
2966f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx rINST
2967f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2968f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %ecx,offStaticField_value(%eax)
2970f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_BYTE: /* 0x6b */
2976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_BYTE.S */
2977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */
2978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SPUT handler.
2980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
29813d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * for: sput, sput-boolean, sput-byte, sput-char, sput-short
2982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
29849f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
2985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax                        # eax<- field ref BBBB
29869f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
2987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
2988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
2989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                          # resolved entry null?
2990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_SPUT_BYTE_resolve                # if not, make it so
2991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BYTE_finish:     # field ptr in eax
2992f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx rINST
2993f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
2994f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
2995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %ecx,offStaticField_value(%eax)
2996f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
2997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_CHAR: /* 0x6c */
3002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_CHAR.S */
3003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */
3004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SPUT handler.
3006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
30073d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * for: sput, sput-boolean, sput-byte, sput-char, sput-short
3008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
30109f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
3011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax                        # eax<- field ref BBBB
30129f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
3013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
3014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
3015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                          # resolved entry null?
3016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_SPUT_CHAR_resolve                # if not, make it so
3017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_CHAR_finish:     # field ptr in eax
3018f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx rINST
3019f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
3020f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
3021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %ecx,offStaticField_value(%eax)
3022f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_SHORT: /* 0x6d */
3028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_SHORT.S */
3029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */
3030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SPUT handler.
3032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
30333d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * for: sput, sput-boolean, sput-byte, sput-char, sput-short
3034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
30369f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
3037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax                        # eax<- field ref BBBB
30389f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
3039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
3040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
3041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                          # resolved entry null?
3042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_SPUT_SHORT_resolve                # if not, make it so
3043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_SHORT_finish:     # field ptr in eax
3044f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx rINST
3045f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
3046f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
3047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %ecx,offStaticField_value(%eax)
3048f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL: /* 0x6e */
3054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL.S */
3055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle a virtual method call.
3058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: invoke-virtual, invoke-virtual/range
3060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
3062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
30639f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%eax
3064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%ecx                 # ecx<- BBBB
30659f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%eax),%eax  # eax<- pDvmDex
3066f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
3067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResMethods(%eax),%eax   # eax<- pDvmDex->pResMethods
3068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%eax,%ecx,4),%eax          # eax<- resolved baseMethod
3069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                   # already resolved?
3070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne       .LOP_INVOKE_VIRTUAL_continue        # yes, continue
30719f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%eax
3072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %ecx,OUT_ARG1(%esp)         # arg1<- ref
30739f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_method(%eax),%eax   # eax<- self->method
3074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp       .LOP_INVOKE_VIRTUAL_more
3075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER: /* 0x6f */
3079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER.S */
3080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle a "super" method call.
3082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: invoke-super, invoke-super/range
3084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
3086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
30879f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,rINST
3088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax               # eax<- BBBB
30899f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(rINST),%ecx # ecx<- pDvmDex
3090f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
3091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods
3092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%ecx        # ecx<- resolved baseMethod
30939f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_method(rINST),%eax # eax<- method
3094f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl    4(rPC),rINST              # rINST<- GFED or CCCC
3095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if       (!0)
3096f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andl      $0xf,rINST               # rINST<- D (or stays CCCC)
3097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3098f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  rINST rINST             # rINST<- "this" ptr
3099f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl     rINST,rINST               # null "this"?
3100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # yes, throw
3101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offMethod_clazz(%eax),%eax # eax<- method->clazz
3102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %ecx,%ecx                 # already resolved?
3103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne       .LOP_INVOKE_SUPER_continue      # yes - go on
3104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp       .LOP_INVOKE_SUPER_resolve
3105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT: /* 0x70 */
3109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT.S */
3110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle a direct method call.
3112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * (We could defer the "is 'this' pointer null" test to the common
3114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * method invocation code, and use a flag to indicate that static
3115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * calls don't count.  If we do this as part of copying the arguments
3116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * out we could avoiding loading the first arg twice.)
3117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: invoke-direct, invoke-direct/range
3119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
3121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
31229f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
3123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax              # eax<- BBBB
31249f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex
3125f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
3126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResMethods(%ecx),%ecx  # ecx<- pDvmDex->pResMethods
3127f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl    4(rPC),%edx              # edx<- GFED or CCCC
3128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax       # eax<- resolved methodToCall
3129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if       (!0)
3130f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andl      $0xf,%edx               # edx<- D (or stays CCCC)
3131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                # already resolved?
3133f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %edx              # ecx<- "this" ptr
3134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_INVOKE_DIRECT_resolve      # not resolved, do it now
3135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_finish:
3136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %ecx,%ecx                # null "this"?
3137c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    jne       common_invokeMethodNoRange  # no, continue on
3138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp       common_errNullObject
3139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_STATIC: /* 0x71 */
3143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_STATIC.S */
3144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle a static method call.
3146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: invoke-static, invoke-static/range
3148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
3150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
31519f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
3152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax               # eax<- BBBB
31539f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex
3154f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
3155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResMethods(%ecx),%ecx  # ecx<- pDvmDex->pResMethods
3156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax        # eax<- resolved methodToCall
3157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax
3158c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    jne       common_invokeMethodNoRange
31599f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
31609f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_method(%ecx),%ecx # ecx<- self->method
3161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax
3162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offMethod_clazz(%ecx),%ecx# ecx<- method->clazz
3163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %eax,OUT_ARG1(%esp)       # arg1<- BBBB
3164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %ecx,OUT_ARG0(%esp)       # arg0<- clazz
3165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp       .LOP_INVOKE_STATIC_continue
3166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_INTERFACE: /* 0x72 */
3170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE.S */
3171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle an interface method call.
3173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: invoke-interface, invoke-interface/range
3175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
3177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
3178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl     4(rPC),%eax              # eax<- FEDC or CCCC
31799f601a917c8878204482c37aec7005054b6776fabuzbee    movl       rSELF,%ecx
3180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if        (!0)
3181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andl       $0xf,%eax               # eax<- C (or stays CCCC)
3182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3183f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R   %eax %eax              # eax<- "this"
3184f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
3185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl      %eax,%eax                # null this?
3186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je         common_errNullObject     # yes, fail
3187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl       offObject_clazz(%eax),%eax# eax<- thisPtr->clazz
3188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl       %eax,OUT_ARG0(%esp)                 # arg0<- class
31899f601a917c8878204482c37aec7005054b6776fabuzbee    movl       offThread_methodClassDex(%ecx),%eax   # eax<- methodClassDex
31909f601a917c8878204482c37aec7005054b6776fabuzbee    movl       offThread_method(%ecx),%ecx           # ecx<- method
3191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl       %eax,OUT_ARG3(%esp)                 # arg3<- dex
3192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl     2(rPC),%eax                         # eax<- BBBB
3193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl       %ecx,OUT_ARG2(%esp)                 # arg2<- method
3194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl       %eax,OUT_ARG1(%esp)                 # arg1<- BBBB
3195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp        .LOP_INVOKE_INTERFACE_continue
3196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_73: /* 0x73 */
3200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_73.S */
3201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */
3202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_abort
3203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_RANGE: /* 0x74 */
3208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_RANGE.S */
3209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL.S */
3210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle a virtual method call.
3213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: invoke-virtual, invoke-virtual/range
3215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
3217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
32189f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%eax
3219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%ecx                 # ecx<- BBBB
32209f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%eax),%eax  # eax<- pDvmDex
3221f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
3222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResMethods(%eax),%eax   # eax<- pDvmDex->pResMethods
3223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%eax,%ecx,4),%eax          # eax<- resolved baseMethod
3224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                   # already resolved?
3225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne       .LOP_INVOKE_VIRTUAL_RANGE_continue        # yes, continue
32269f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%eax
3227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %ecx,OUT_ARG1(%esp)         # arg1<- ref
32289f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_method(%eax),%eax   # eax<- self->method
3229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp       .LOP_INVOKE_VIRTUAL_RANGE_more
3230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_RANGE: /* 0x75 */
3235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_RANGE.S */
3236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER.S */
3237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle a "super" method call.
3239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: invoke-super, invoke-super/range
3241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
3243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
32449f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,rINST
3245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax               # eax<- BBBB
32469f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(rINST),%ecx # ecx<- pDvmDex
3247f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
3248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods
3249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%ecx        # ecx<- resolved baseMethod
32509f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_method(rINST),%eax # eax<- method
3251f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl    4(rPC),rINST              # rINST<- GFED or CCCC
3252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if       (!1)
3253f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andl      $0xf,rINST               # rINST<- D (or stays CCCC)
3254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3255f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  rINST rINST             # rINST<- "this" ptr
3256f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl     rINST,rINST               # null "this"?
3257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # yes, throw
3258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offMethod_clazz(%eax),%eax # eax<- method->clazz
3259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %ecx,%ecx                 # already resolved?
3260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne       .LOP_INVOKE_SUPER_RANGE_continue      # yes - go on
3261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp       .LOP_INVOKE_SUPER_RANGE_resolve
3262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT_RANGE: /* 0x76 */
3267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT_RANGE.S */
3268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT.S */
3269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle a direct method call.
3271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * (We could defer the "is 'this' pointer null" test to the common
3273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * method invocation code, and use a flag to indicate that static
3274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * calls don't count.  If we do this as part of copying the arguments
3275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * out we could avoiding loading the first arg twice.)
3276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: invoke-direct, invoke-direct/range
3278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
3280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
32819f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
3282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax              # eax<- BBBB
32839f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex
3284f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
3285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResMethods(%ecx),%ecx  # ecx<- pDvmDex->pResMethods
3286f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl    4(rPC),%edx              # edx<- GFED or CCCC
3287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax       # eax<- resolved methodToCall
3288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if       (!1)
3289f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andl      $0xf,%edx               # edx<- D (or stays CCCC)
3290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                # already resolved?
3292f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %edx              # ecx<- "this" ptr
3293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .LOP_INVOKE_DIRECT_RANGE_resolve      # not resolved, do it now
3294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_RANGE_finish:
3295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %ecx,%ecx                # null "this"?
3296c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    jne       common_invokeMethodRange  # no, continue on
3297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp       common_errNullObject
3298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_STATIC_RANGE: /* 0x77 */
3303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_STATIC_RANGE.S */
3304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_STATIC.S */
3305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle a static method call.
3307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: invoke-static, invoke-static/range
3309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
3311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
33129f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
3313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax               # eax<- BBBB
33149f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex
3315f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
3316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offDvmDex_pResMethods(%ecx),%ecx  # ecx<- pDvmDex->pResMethods
3317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax        # eax<- resolved methodToCall
3318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax
3319c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    jne       common_invokeMethodRange
33209f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
33219f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_method(%ecx),%ecx # ecx<- self->method
3322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax
3323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offMethod_clazz(%ecx),%ecx# ecx<- method->clazz
3324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %eax,OUT_ARG1(%esp)       # arg1<- BBBB
3325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %ecx,OUT_ARG0(%esp)       # arg0<- clazz
3326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp       .LOP_INVOKE_STATIC_RANGE_continue
3327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_INTERFACE_RANGE: /* 0x78 */
3332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE_RANGE.S */
3333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE.S */
3334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle an interface method call.
3336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: invoke-interface, invoke-interface/range
3338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
3340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
3341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl     4(rPC),%eax              # eax<- FEDC or CCCC
33429f601a917c8878204482c37aec7005054b6776fabuzbee    movl       rSELF,%ecx
3343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if        (!1)
3344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andl       $0xf,%eax               # eax<- C (or stays CCCC)
3345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3346f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R   %eax %eax              # eax<- "this"
3347f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
3348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl      %eax,%eax                # null this?
3349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je         common_errNullObject     # yes, fail
3350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl       offObject_clazz(%eax),%eax# eax<- thisPtr->clazz
3351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl       %eax,OUT_ARG0(%esp)                 # arg0<- class
33529f601a917c8878204482c37aec7005054b6776fabuzbee    movl       offThread_methodClassDex(%ecx),%eax   # eax<- methodClassDex
33539f601a917c8878204482c37aec7005054b6776fabuzbee    movl       offThread_method(%ecx),%ecx           # ecx<- method
3354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl       %eax,OUT_ARG3(%esp)                 # arg3<- dex
3355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl     2(rPC),%eax                         # eax<- BBBB
3356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl       %ecx,OUT_ARG2(%esp)                 # arg2<- method
3357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl       %eax,OUT_ARG1(%esp)                 # arg1<- BBBB
3358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp        .LOP_INVOKE_INTERFACE_RANGE_continue
3359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_79: /* 0x79 */
3364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_79.S */
3365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */
3366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_abort
3367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_7A: /* 0x7a */
3372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_7A.S */
3373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */
3374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_abort
3375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_INT: /* 0x7b */
3380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_INT.S */
3381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */
3382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit unary operation.  Provide an "instr" line that
3384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = op eax".
3385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3387f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%ecx           # ecx<- A+
3388f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,rINST             # rINST<- B
3389f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST           # eax<- vB
3390f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,%cl              # ecx<- A
3391f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3392f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
33937365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro
33947365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro
3395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    negl %eax
3396f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax %ecx
3397f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOT_INT: /* 0x7c */
3403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NOT_INT.S */
3404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */
3405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit unary operation.  Provide an "instr" line that
3407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = op eax".
3408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3410f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%ecx           # ecx<- A+
3411f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,rINST             # rINST<- B
3412f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST           # eax<- vB
3413f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,%cl              # ecx<- A
3414f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3415f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
34167365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro
34177365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro
3418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    notl %eax
3419f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax %ecx
3420f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_LONG: /* 0x7d */
3426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_LONG.S */
3427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3428f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx        # ecx<- BA
3429f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl      $4,%ecx            # ecx<- B
3430f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb      $0xf,rINSTbl       # rINST<- A
3431f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax %ecx 0     # eax<- v[B+0]
3432f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %ecx %ecx 1     # ecx<- v[B+1]
3433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    negl      %eax
3434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    adcl      $0,%ecx
3435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    negl      %ecx
3436f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3437f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %eax rINST 0    # v[A+0]<- eax
3438f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %ecx rINST 1    # v[A+1]<- ecx
3439f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
3440f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOT_LONG: /* 0x7e */
3445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NOT_LONG.S */
3446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3447f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx       # ecx<- BA
3448f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl      $4,%ecx           # ecx<- B
3449f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb      $0xf,rINSTbl      # rINST<- A
3450f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax %ecx 0    # eax<- v[B+0]
3451f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %ecx %ecx 1    # ecx<- v[B+1]
3452f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    notl      %eax
3454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    notl      %ecx
3455f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %eax rINST 0   # v[A+0]<- eax
3456f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %ecx rINST 1   # v[A+1]<- ecx
3457f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
3458f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_FLOAT: /* 0x7f */
3463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_FLOAT.S */
3464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */
3465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit FP conversion operation.
3467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3469f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%ecx       # ecx<- A+
3470f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,rINST         # rINST<- B
3471f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    flds    (rFP,rINST,4)      # %st0<- vB
3472f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,%cl          # ecx<- A
3473f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3474f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
3475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fchs
3476f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstps  (rFP,%ecx,4)        # vA<- %st0
3477f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_DOUBLE: /* 0x80 */
3483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_DOUBLE.S */
3484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */
3485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit FP conversion operation.
3487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3489f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%ecx       # ecx<- A+
3490f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,rINST         # rINST<- B
3491f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fldl    (rFP,rINST,4)      # %st0<- vB
3492f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,%cl          # ecx<- A
3493f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3494f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
3495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fchs
3496f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstpl  (rFP,%ecx,4)        # vA<- %st0
3497f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_LONG: /* 0x81 */
3503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_LONG.S */
3504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* int to long vA, vB */
3505f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  rINSTbl,%eax                # eax<- +A
3506f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,%eax                    # eax<- B
3507f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax                # eax<- vB
3508f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,rINSTbl               # rINST<- A
3509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cltd                                # edx:eax<- sssssssBBBBBBBB
3510f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %edx rINST 1          # v[A+1]<- edx/rPC
3511f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3512f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %eax rINST 0          # v[A+0]<- %eax
3513f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
3514f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_FLOAT: /* 0x82 */
3519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_FLOAT.S */
3520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */
3521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit FP conversion operation.
3523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3525f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%ecx       # ecx<- A+
3526f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,rINST         # rINST<- B
3527f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fildl    (rFP,rINST,4)      # %st0<- vB
3528f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,%cl          # ecx<- A
3529f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3530f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
35317365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro
3532f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstps  (rFP,%ecx,4)        # vA<- %st0
3533f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_DOUBLE: /* 0x83 */
3539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_DOUBLE.S */
3540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */
3541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit FP conversion operation.
3543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3545f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%ecx       # ecx<- A+
3546f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,rINST         # rINST<- B
3547f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fildl    (rFP,rINST,4)      # %st0<- vB
3548f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,%cl          # ecx<- A
3549f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3550f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
35517365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro
3552f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstpl  (rFP,%ecx,4)        # vA<- %st0
3553f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_INT: /* 0x84 */
3559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_LONG_TO_INT.S */
3560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* we ignore the high word, making this equivalent to a 32-bit reg move */
3561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE.S */
3562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* for move, move-object, long-to-int */
3563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB */
3564f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl rINSTbl,%eax          # eax<- BA
3565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andb   $0xf,%al             # eax<- A
3566f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    shrl   $4,rINST            # rINST<- B
3567f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx rINST
3568f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3569f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
3570f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %ecx %eax           # fp[A]<-fp[B]
3571f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_FLOAT: /* 0x85 */
3577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_LONG_TO_FLOAT.S */
3578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */
3579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit FP conversion operation.
3581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3583f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%ecx       # ecx<- A+
3584f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,rINST         # rINST<- B
3585f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fildll    (rFP,rINST,4)      # %st0<- vB
3586f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,%cl          # ecx<- A
3587f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3588f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
35897365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro
3590f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstps  (rFP,%ecx,4)        # vA<- %st0
3591f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_DOUBLE: /* 0x86 */
3597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_LONG_TO_DOUBLE.S */
3598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */
3599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit FP conversion operation.
3601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3603f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%ecx       # ecx<- A+
3604f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,rINST         # rINST<- B
3605f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fildll    (rFP,rINST,4)      # %st0<- vB
3606f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,%cl          # ecx<- A
3607f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3608f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
36097365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro
3610f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstpl  (rFP,%ecx,4)        # vA<- %st0
3611f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_INT: /* 0x87 */
3617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FLOAT_TO_INT.S */
3618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */
3619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that
3620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint.  If it is less
3621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint.  If it is a nan, the result
3622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero.  Further, the rounding mode is to truncate.  This model
3623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have
3624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games.
3625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
3626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* float/double to int/long vA, vB */
3627f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx       # ecx<- A+
3628f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl      $4,rINST         # rINST<- B
3629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
3630f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fldl     (rFP,rINST,4)       # %st0<- vB
3631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .else
3632f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    flds     (rFP,rINST,4)       # %st0<- vB
3633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ftst
3635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fnstcw   LOCAL0_OFFSET(%ebp)      # remember original rounding mode
3636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl   LOCAL0_OFFSET(%ebp),%eax
3637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movb     $0xc,%ah
3638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movw     %ax,LOCAL0_OFFSET+2(%ebp)
3639f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fldcw    LOCAL0_OFFSET+2(%ebp)    # set "to zero" rounding mode
3640f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andb     $0xf,%cl                # ecx<- A
3642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
3643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fistpll  (rFP,%ecx,4)             # convert and store
3644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .else
3645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fistpl   (rFP,%ecx,4)             # convert and store
3646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fldcw    LOCAL0_OFFSET(%ebp)      # restore previous rounding mode
3648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp      .LOP_FLOAT_TO_INT_continue
3649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_LONG: /* 0x88 */
3654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FLOAT_TO_LONG.S */
3655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */
3656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that
3657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint.  If it is less
3658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint.  If it is a nan, the result
3659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero.  Further, the rounding mode is to truncate.  This model
3660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have
3661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games.
3662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
3663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* float/double to int/long vA, vB */
3664f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx       # ecx<- A+
3665f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl      $4,rINST         # rINST<- B
3666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
3667f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fldl     (rFP,rINST,4)       # %st0<- vB
3668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .else
3669f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    flds     (rFP,rINST,4)       # %st0<- vB
3670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ftst
3672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fnstcw   LOCAL0_OFFSET(%ebp)      # remember original rounding mode
3673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl   LOCAL0_OFFSET(%ebp),%eax
3674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movb     $0xc,%ah
3675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movw     %ax,LOCAL0_OFFSET+2(%ebp)
3676f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fldcw    LOCAL0_OFFSET+2(%ebp)    # set "to zero" rounding mode
3677f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andb     $0xf,%cl                # ecx<- A
3679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 1
3680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fistpll  (rFP,%ecx,4)             # convert and store
3681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .else
3682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fistpl   (rFP,%ecx,4)             # convert and store
3683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fldcw    LOCAL0_OFFSET(%ebp)      # restore previous rounding mode
3685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp      .LOP_FLOAT_TO_LONG_continue
3686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_DOUBLE: /* 0x89 */
3691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FLOAT_TO_DOUBLE.S */
3692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */
3693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit FP conversion operation.
3695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3697f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%ecx       # ecx<- A+
3698f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,rINST         # rINST<- B
3699f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    flds    (rFP,rINST,4)      # %st0<- vB
3700f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,%cl          # ecx<- A
3701f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3702f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
37037365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro
3704f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstpl  (rFP,%ecx,4)        # vA<- %st0
3705f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_INT: /* 0x8a */
3711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DOUBLE_TO_INT.S */
3712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */
3713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that
3714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint.  If it is less
3715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint.  If it is a nan, the result
3716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero.  Further, the rounding mode is to truncate.  This model
3717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have
3718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games.
3719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
3720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* float/double to int/long vA, vB */
3721f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx       # ecx<- A+
3722f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl      $4,rINST         # rINST<- B
3723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 1
3724f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fldl     (rFP,rINST,4)       # %st0<- vB
3725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .else
3726f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    flds     (rFP,rINST,4)       # %st0<- vB
3727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ftst
3729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fnstcw   LOCAL0_OFFSET(%ebp)      # remember original rounding mode
3730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl   LOCAL0_OFFSET(%ebp),%eax
3731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movb     $0xc,%ah
3732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movw     %ax,LOCAL0_OFFSET+2(%ebp)
3733f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fldcw    LOCAL0_OFFSET+2(%ebp)    # set "to zero" rounding mode
3734f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andb     $0xf,%cl                # ecx<- A
3736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
3737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fistpll  (rFP,%ecx,4)             # convert and store
3738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .else
3739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fistpl   (rFP,%ecx,4)             # convert and store
3740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fldcw    LOCAL0_OFFSET(%ebp)      # restore previous rounding mode
3742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp      .LOP_DOUBLE_TO_INT_continue
3743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_LONG: /* 0x8b */
3748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DOUBLE_TO_LONG.S */
3749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */
3750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that
3751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint.  If it is less
3752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint.  If it is a nan, the result
3753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero.  Further, the rounding mode is to truncate.  This model
3754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have
3755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games.
3756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
3757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* float/double to int/long vA, vB */
3758f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx       # ecx<- A+
3759f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl      $4,rINST         # rINST<- B
3760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 1
3761f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fldl     (rFP,rINST,4)       # %st0<- vB
3762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .else
3763f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    flds     (rFP,rINST,4)       # %st0<- vB
3764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ftst
3766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fnstcw   LOCAL0_OFFSET(%ebp)      # remember original rounding mode
3767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl   LOCAL0_OFFSET(%ebp),%eax
3768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movb     $0xc,%ah
3769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movw     %ax,LOCAL0_OFFSET+2(%ebp)
3770f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fldcw    LOCAL0_OFFSET+2(%ebp)    # set "to zero" rounding mode
3771f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andb     $0xf,%cl                # ecx<- A
3773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 1
3774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fistpll  (rFP,%ecx,4)             # convert and store
3775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .else
3776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fistpl   (rFP,%ecx,4)             # convert and store
3777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fldcw    LOCAL0_OFFSET(%ebp)      # restore previous rounding mode
3779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp      .LOP_DOUBLE_TO_LONG_continue
3780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_FLOAT: /* 0x8c */
3785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DOUBLE_TO_FLOAT.S */
3786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */
3787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit FP conversion operation.
3789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3791f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%ecx       # ecx<- A+
3792f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,rINST         # rINST<- B
3793f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fldl    (rFP,rINST,4)      # %st0<- vB
3794f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,%cl          # ecx<- A
3795f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3796f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
37977365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro
3798f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstps  (rFP,%ecx,4)        # vA<- %st0
3799f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_BYTE: /* 0x8d */
3805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_BYTE.S */
3806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */
3807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit unary operation.  Provide an "instr" line that
3809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = op eax".
3810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3812f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%ecx           # ecx<- A+
3813f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,rINST             # rINST<- B
3814f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST           # eax<- vB
3815f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,%cl              # ecx<- A
3816f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3817f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
38187365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro
38197365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro
3820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movsbl %al,%eax
3821f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax %ecx
3822f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_CHAR: /* 0x8e */
3828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_CHAR.S */
3829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */
3830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit unary operation.  Provide an "instr" line that
3832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = op eax".
3833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3835f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%ecx           # ecx<- A+
3836f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,rINST             # rINST<- B
3837f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST           # eax<- vB
3838f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,%cl              # ecx<- A
3839f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3840f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
38417365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro
38427365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro
3843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl %ax,%eax
3844f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax %ecx
3845f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_SHORT: /* 0x8f */
3851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_SHORT.S */
3852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */
3853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit unary operation.  Provide an "instr" line that
3855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = op eax".
3856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3858f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%ecx           # ecx<- A+
3859f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,rINST             # rINST<- B
3860f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST           # eax<- vB
3861f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,%cl              # ecx<- A
3862f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
3863f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
38647365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro
38657365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro
3866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movswl %ax,%eax
3867f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax %ecx
3868f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT: /* 0x90 */
3874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT.S */
3875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */
3876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
3878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = eax op (rFP,%ecx,4)".
3879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an x86 instruction or a function call.  (If the result
3880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than eax, you can override "result".)
3881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, and-int, or-int,
3883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int
3884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
3886f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   2(rPC),%eax   # eax<- BB
3887f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   3(rPC),%ecx   # ecx<- CC
3888f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax   # eax<- vBB
3889f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    addl (rFP,%ecx,4),%eax                 # ex: addl    (rFP,%ecx,4),%eax
3890f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
3891f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
3892f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
3893f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_INT: /* 0x91 */
3899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_INT.S */
3900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */
3901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
3903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = eax op (rFP,%ecx,4)".
3904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an x86 instruction or a function call.  (If the result
3905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than eax, you can override "result".)
3906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, and-int, or-int,
3908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int
3909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
3911f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   2(rPC),%eax   # eax<- BB
3912f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   3(rPC),%ecx   # ecx<- CC
3913f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax   # eax<- vBB
3914f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    subl   (rFP,%ecx,4),%eax                 # ex: addl    (rFP,%ecx,4),%eax
3915f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
3916f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
3917f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
3918f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT: /* 0x92 */
3924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT.S */
3925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 32-bit binary multiplication.
3927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* mul vAA, vBB, vCC */
3929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl   2(rPC),%eax            # eax<- BB
3930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl   3(rPC),%ecx            # ecx<- CC
3931f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax            # eax<- vBB
3932f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    imull    (rFP,%ecx,4),%eax      # trashes edx
3933f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
3934f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
3935f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
3936f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
3937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT: /* 0x93 */
3941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT.S */
3942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv.S */
3943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 32-bit binary div/rem operation.  Handles special case of op0=minint and
3946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * op1=-1.
3947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
3949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl   2(rPC),%eax            # eax<- BB
3950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl   3(rPC),%ecx            # ecx<- CC
3951f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax            # eax<- vBB
3952f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx            # eax<- vBB
3953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $0,%ecx
3954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       common_errDivideByZero
3955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $-1,%ecx
3956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne      .LOP_DIV_INT_continue_div
3957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $0x80000000,%eax
3958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne      .LOP_DIV_INT_continue_div
3959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     $0x80000000,%eax
3960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp      .LOP_DIV_INT_finish_div
3961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT: /* 0x94 */
3967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT.S */
3968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv.S */
3969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 32-bit binary div/rem operation.  Handles special case of op0=minint and
3972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * op1=-1.
3973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
3975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl   2(rPC),%eax            # eax<- BB
3976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl   3(rPC),%ecx            # ecx<- CC
3977f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax            # eax<- vBB
3978f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx            # eax<- vBB
3979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $0,%ecx
3980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       common_errDivideByZero
3981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $-1,%ecx
3982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne      .LOP_REM_INT_continue_div
3983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $0x80000000,%eax
3984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne      .LOP_REM_INT_continue_div
3985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     $0,%edx
3986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp      .LOP_REM_INT_finish_div
3987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT: /* 0x95 */
3993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT.S */
3994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */
3995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
3997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = eax op (rFP,%ecx,4)".
3998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an x86 instruction or a function call.  (If the result
3999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than eax, you can override "result".)
4000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, and-int, or-int,
4002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int
4003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4005f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   2(rPC),%eax   # eax<- BB
4006f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   3(rPC),%ecx   # ecx<- CC
4007f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax   # eax<- vBB
4008f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andl   (rFP,%ecx,4),%eax                 # ex: addl    (rFP,%ecx,4),%eax
4009f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4010f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4011f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
4012f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT: /* 0x96 */
4018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT.S */
4019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */
4020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
4022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = eax op (rFP,%ecx,4)".
4023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an x86 instruction or a function call.  (If the result
4024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than eax, you can override "result".)
4025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, and-int, or-int,
4027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int
4028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4030f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   2(rPC),%eax   # eax<- BB
4031f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   3(rPC),%ecx   # ecx<- CC
4032f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax   # eax<- vBB
4033f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    orl   (rFP,%ecx,4),%eax                 # ex: addl    (rFP,%ecx,4),%eax
4034f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4035f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4036f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
4037f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT: /* 0x97 */
4043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT.S */
4044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */
4045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
4047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = eax op (rFP,%ecx,4)".
4048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an x86 instruction or a function call.  (If the result
4049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than eax, you can override "result".)
4050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, and-int, or-int,
4052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int
4053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4055f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   2(rPC),%eax   # eax<- BB
4056f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   3(rPC),%ecx   # ecx<- CC
4057f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax   # eax<- vBB
4058f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    xorl   (rFP,%ecx,4),%eax                 # ex: addl    (rFP,%ecx,4),%eax
4059f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4060f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4061f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
4062f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT: /* 0x98 */
4068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_INT.S */
4069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop1.S */
4070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation in which both operands loaded to
4072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * registers (op0 in eax, op1 in ecx).
4073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl   2(rPC),%eax            # eax<- BB
4076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl   3(rPC),%ecx            # ecx<- CC
4077f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax            # eax<- vBB
4078f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx            # eax<- vBB
4079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sall    %cl,%eax                          # ex: addl    %ecx,%eax
4080f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4081f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4082f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
4083f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT: /* 0x99 */
4089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_INT.S */
4090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop1.S */
4091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation in which both operands loaded to
4093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * registers (op0 in eax, op1 in ecx).
4094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl   2(rPC),%eax            # eax<- BB
4097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl   3(rPC),%ecx            # ecx<- CC
4098f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax            # eax<- vBB
4099f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx            # eax<- vBB
4100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl    %cl,%eax                          # ex: addl    %ecx,%eax
4101f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4102f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4103f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
4104f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT: /* 0x9a */
4110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_INT.S */
4111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop1.S */
4112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation in which both operands loaded to
4114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * registers (op0 in eax, op1 in ecx).
4115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl   2(rPC),%eax            # eax<- BB
4118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl   3(rPC),%ecx            # ecx<- CC
4119f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax            # eax<- vBB
4120f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx            # eax<- vBB
4121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    shrl    %cl,%eax                          # ex: addl    %ecx,%eax
4122f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4123f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4124f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
4125f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_LONG: /* 0x9b */
4131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_LONG.S */
4132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */
4133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.
4135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
4139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
4140f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %edx %eax 0           # edx<- v[BB+0]
4141f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax %eax 1           # eax<- v[BB+1]
4142f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    addl (rFP,%ecx,4),%edx         # ex: addl   (rFP,%ecx,4),%edx
4143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    adcl 4(rFP,%ecx,4),%eax         # ex: adcl   4(rFP,%ecx,4),%eax
4144f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %edx rINST 0          # v[AA+0] <- edx
4145f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4146f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %eax rINST 1          # v[AA+1] <- eax
4147f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4148f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_LONG: /* 0x9c */
4154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_LONG.S */
4155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */
4156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.
4158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
4162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
4163f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %edx %eax 0           # edx<- v[BB+0]
4164f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax %eax 1           # eax<- v[BB+1]
4165f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    subl (rFP,%ecx,4),%edx         # ex: addl   (rFP,%ecx,4),%edx
4166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sbbl 4(rFP,%ecx,4),%eax         # ex: adcl   4(rFP,%ecx,4),%eax
4167f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %edx rINST 0          # v[AA+0] <- edx
4168f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4169f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %eax rINST 1          # v[AA+1] <- eax
4170f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4171f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_LONG: /* 0x9d */
4177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_LONG.S */
4178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Signed 64-bit integer multiply.
4180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * We could definately use more free registers for
4182f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee     * this code.   We spill rINSTw (ebx),
4183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * giving us eax, ebc, ecx and edx as computational
4184f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee     * temps.  On top of that, we'll spill edi (rFP)
41853b8a9072510222067b7c48fe2d59d1e58436be24buzbee     * for use as the vB pointer and esi (rPC) for use
4186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * as the vC pointer.  Yuck.
4187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* mul-long vAA, vBB, vCC */
4189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax              # eax<- B
4190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx              # ecx<- C
41913b8a9072510222067b7c48fe2d59d1e58436be24buzbee    SPILL_TMP2(%esi)                   # save Dalvik PC
4192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SPILL(rFP)
4193f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SPILL(rINST)
4194f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    leal      (rFP,%eax,4),%esi        # esi<- &v[B]
4195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    leal      (rFP,%ecx,4),rFP         # rFP<- &v[C]
4196f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      4(%esi),%ecx             # ecx<- Bmsw
4197f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    imull     (rFP),%ecx               # ecx<- (Bmsw*Clsw)
4198f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      4(rFP),%eax              # eax<- Cmsw
4199f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    imull     (%esi),%eax              # eax<- (Cmsw*Blsw)
4200f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    addl      %eax,%ecx                # ecx<- (Bmsw*Clsw)+(Cmsw*Blsw)
4201f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      (rFP),%eax               # eax<- Clsw
4202f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    mull      (%esi)                   # eax<- (Clsw*Alsw)
4203f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    UNSPILL(rINST)
4204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    UNSPILL(rFP)
4205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp       .LOP_MUL_LONG_continue
4206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_LONG: /* 0x9e */
4210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG.S */
4211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* div vAA, vBB, vCC */
4212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%eax              # eax<- CC
4213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%ecx              # ecx<- BB
4214f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %edx %eax 0
4215f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax %eax 1
4216f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     %edx,OUT_ARG2(%esp)
4217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl    %eax,%eax
4218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       .LOP_DIV_LONG_check_zero
4219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $-1,%eax
4220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       .LOP_DIV_LONG_check_neg1
4221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_notSpecial:
4222f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %edx %ecx 0
4223f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %ecx %ecx 1
4224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_notSpecial1:
4225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     %eax,OUT_ARG3(%esp)
4226f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     %edx,OUT_ARG0(%esp)
4227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     %ecx,OUT_ARG1(%esp)
4228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp      .LOP_DIV_LONG_continue
4229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_LONG: /* 0x9f */
4233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_LONG.S */
4234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG.S */
4235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* div vAA, vBB, vCC */
4236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%eax              # eax<- CC
4237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%ecx              # ecx<- BB
4238f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %edx %eax 0
4239f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax %eax 1
4240f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     %edx,OUT_ARG2(%esp)
4241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl    %eax,%eax
4242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       .LOP_REM_LONG_check_zero
4243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $-1,%eax
4244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       .LOP_REM_LONG_check_neg1
4245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_notSpecial:
4246f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %edx %ecx 0
4247f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %ecx %ecx 1
4248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_notSpecial1:
4249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     %eax,OUT_ARG3(%esp)
4250f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     %edx,OUT_ARG0(%esp)
4251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     %ecx,OUT_ARG1(%esp)
4252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp      .LOP_REM_LONG_continue
4253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_LONG: /* 0xa0 */
4258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_LONG.S */
4259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */
4260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.
4262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
4266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
4267f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %edx %eax 0           # edx<- v[BB+0]
4268f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax %eax 1           # eax<- v[BB+1]
4269f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andl (rFP,%ecx,4),%edx         # ex: addl   (rFP,%ecx,4),%edx
4270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andl 4(rFP,%ecx,4),%eax         # ex: adcl   4(rFP,%ecx,4),%eax
4271f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %edx rINST 0          # v[AA+0] <- edx
4272f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4273f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %eax rINST 1          # v[AA+1] <- eax
4274f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4275f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_LONG: /* 0xa1 */
4281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_LONG.S */
4282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */
4283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.
4285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
4289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
4290f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %edx %eax 0           # edx<- v[BB+0]
4291f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax %eax 1           # eax<- v[BB+1]
4292f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    orl (rFP,%ecx,4),%edx         # ex: addl   (rFP,%ecx,4),%edx
4293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orl 4(rFP,%ecx,4),%eax         # ex: adcl   4(rFP,%ecx,4),%eax
4294f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %edx rINST 0          # v[AA+0] <- edx
4295f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4296f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %eax rINST 1          # v[AA+1] <- eax
4297f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4298f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_LONG: /* 0xa2 */
4304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_LONG.S */
4305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */
4306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.
4308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
4312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
4313f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %edx %eax 0           # edx<- v[BB+0]
4314f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax %eax 1           # eax<- v[BB+1]
4315f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    xorl (rFP,%ecx,4),%edx         # ex: addl   (rFP,%ecx,4),%edx
4316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    xorl 4(rFP,%ecx,4),%eax         # ex: adcl   4(rFP,%ecx,4),%eax
4317f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %edx rINST 0          # v[AA+0] <- edx
4318f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4319f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %eax rINST 1          # v[AA+1] <- eax
4320f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4321f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_LONG: /* 0xa3 */
4327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_LONG.S */
4328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Long integer shift.  This is different from the generic 32/64-bit
4330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * binary operations because vAA/vBB are 64-bit but vCC (the shift
4331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * distance) is 32-bit.  Also, Dalvik requires us to mask off the low
4332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 6 bits of the shift distance.  x86 shifts automatically mask off
4333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31
4334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * case specially.
4335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* shl-long vAA, vBB, vCC */
4337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* ecx gets shift count */
4338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* Need to spill edx */
4339f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    /* rINSTw gets AA */
4340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
4341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
4342f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %edx %eax 1           # ecx<- v[BB+1]
4343f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R   %ecx %ecx              # ecx<- vCC
4344f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax %eax 0           # eax<- v[BB+0]
4345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    shldl     %eax,%edx
4346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sall      %cl,%eax
4347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testb     $32,%cl
4348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        2f
4349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %eax,%edx
4350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    xorl      %eax,%eax
4351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2:
4352f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %edx rINST 1          # v[AA+1]<- %edx
4353f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp       .LOP_SHL_LONG_finish
4355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_LONG: /* 0xa4 */
4359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_LONG.S */
4360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Long integer shift.  This is different from the generic 32/64-bit
4362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * binary operations because vAA/vBB are 64-bit but vCC (the shift
4363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * distance) is 32-bit.  Also, Dalvik requires us to mask off the low
4364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 6 bits of the shift distance.  x86 shifts automatically mask off
4365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31
4366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * case specially.
4367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* shr-long vAA, vBB, vCC */
4369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* ecx gets shift count */
4370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* Need to spill edx */
4371f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    /* rINSTw gets AA */
4372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
4373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
4374f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %edx %eax 1           # edx<- v[BB+1]
4375f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R   %ecx %ecx              # ecx<- vCC
4376f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax %eax 0           # eax<- v[BB+0]
4377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    shrdl     %edx,%eax
4378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl      %cl,%edx
4379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testb     $32,%cl
4380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        2f
4381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %edx,%eax
4382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl      $31,%edx
4383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2:
4384f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %edx rINST 1          # v[AA+1]<- edx
4385f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp       .LOP_SHR_LONG_finish
4387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_LONG: /* 0xa5 */
4391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_LONG.S */
4392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Long integer shift.  This is different from the generic 32/64-bit
4394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * binary operations because vAA/vBB are 64-bit but vCC (the shift
4395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * distance) is 32-bit.  Also, Dalvik requires us to mask off the low
4396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 6 bits of the shift distance.  x86 shifts automatically mask off
4397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31
4398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * case specially.
4399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* shr-long vAA, vBB, vCC */
4401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* ecx gets shift count */
4402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* Need to spill edx */
4403f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    /* rINSTw gets AA */
4404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
4405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
4406f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %edx %eax 1           # edx<- v[BB+1]
4407f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # ecx<- vCC
4408f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax %eax 0           # eax<- v[BB+0]
4409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    shrdl     %edx,%eax
4410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    shrl      %cl,%edx
4411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testb     $32,%cl
4412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        2f
4413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %edx,%eax
4414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    xorl      %edx,%edx
4415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2:
4416b703ba2fbbf626a087903b5ee890989d18fd0c2bbuzbee    SET_VREG_WORD %edx rINST 1          # v[AA+1]<- edx
4417f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp       .LOP_USHR_LONG_finish
4419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_FLOAT: /* 0xa6 */
4423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_FLOAT.S */
4424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */
4425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary float operation.
4427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-fp, sub-fp, mul-fp, div-fp
4429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4431f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   2(rPC),%eax          # eax<- CC
4432f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   3(rPC),%ecx          # ecx<- BB
4433f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    flds    (rFP,%eax,4)         # vCC to fp stack
4434f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fadds   (rFP,%ecx,4)         # ex: faddp
4435f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4436f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4437f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstps   (rFP,rINST,4)         # %st to vAA
4438f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_FLOAT: /* 0xa7 */
4444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_FLOAT.S */
4445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */
4446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary float operation.
4448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-fp, sub-fp, mul-fp, div-fp
4450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4452f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   2(rPC),%eax          # eax<- CC
4453f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   3(rPC),%ecx          # ecx<- BB
4454f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    flds    (rFP,%eax,4)         # vCC to fp stack
4455f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fsubs   (rFP,%ecx,4)         # ex: faddp
4456f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4457f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4458f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstps   (rFP,rINST,4)         # %st to vAA
4459f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_FLOAT: /* 0xa8 */
4465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_FLOAT.S */
4466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */
4467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary float operation.
4469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-fp, sub-fp, mul-fp, div-fp
4471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4473f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   2(rPC),%eax          # eax<- CC
4474f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   3(rPC),%ecx          # ecx<- BB
4475f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    flds    (rFP,%eax,4)         # vCC to fp stack
4476f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fmuls   (rFP,%ecx,4)         # ex: faddp
4477f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4478f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4479f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstps   (rFP,rINST,4)         # %st to vAA
4480f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_FLOAT: /* 0xa9 */
4486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_FLOAT.S */
4487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */
4488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary float operation.
4490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-fp, sub-fp, mul-fp, div-fp
4492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4494f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   2(rPC),%eax          # eax<- CC
4495f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   3(rPC),%ecx          # ecx<- BB
4496f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    flds    (rFP,%eax,4)         # vCC to fp stack
4497f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fdivs   (rFP,%ecx,4)         # ex: faddp
4498f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4499f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4500f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstps   (rFP,rINST,4)         # %st to vAA
4501f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_FLOAT: /* 0xaa */
4507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_FLOAT.S */
4508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* rem_float vAA, vBB, vCC */
4509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl   3(rPC),%ecx            # ecx<- BB
4510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl   2(rPC),%eax            # eax<- CC
4511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    flds     (rFP,%ecx,4)           # vCC to fp stack
4512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    flds     (rFP,%eax,4)           # vCC to fp stack
4513f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%ecx           # ecx<- AA
4514f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:
4516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fprem
4517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fstsw     %ax
4518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sahf
4519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jp        1b
4520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fstp      %st(1)
4521f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fstps    (rFP,%ecx,4)           # %st to vAA
4523f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_DOUBLE: /* 0xab */
4528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_DOUBLE.S */
4529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */
4530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary float operation.
4532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-fp, sub-fp, mul-fp, div-fp
4534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4536f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   2(rPC),%eax          # eax<- CC
4537f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   3(rPC),%ecx          # ecx<- BB
4538f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fldl    (rFP,%eax,4)         # vCC to fp stack
4539f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    faddl   (rFP,%ecx,4)         # ex: faddp
4540f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4541f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4542f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstpl   (rFP,rINST,4)         # %st to vAA
4543f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_DOUBLE: /* 0xac */
4549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_DOUBLE.S */
4550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */
4551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary float operation.
4553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-fp, sub-fp, mul-fp, div-fp
4555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4557f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   2(rPC),%eax          # eax<- CC
4558f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   3(rPC),%ecx          # ecx<- BB
4559f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fldl    (rFP,%eax,4)         # vCC to fp stack
4560f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fsubl   (rFP,%ecx,4)         # ex: faddp
4561f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4562f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4563f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstpl   (rFP,rINST,4)         # %st to vAA
4564f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_DOUBLE: /* 0xad */
4570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_DOUBLE.S */
4571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */
4572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary float operation.
4574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-fp, sub-fp, mul-fp, div-fp
4576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4578f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   2(rPC),%eax          # eax<- CC
4579f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   3(rPC),%ecx          # ecx<- BB
4580f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fldl    (rFP,%eax,4)         # vCC to fp stack
4581f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fmull   (rFP,%ecx,4)         # ex: faddp
4582f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4583f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4584f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstpl   (rFP,rINST,4)         # %st to vAA
4585f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_DOUBLE: /* 0xae */
4591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_DOUBLE.S */
4592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */
4593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary float operation.
4595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-fp, sub-fp, mul-fp, div-fp
4597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4599f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   2(rPC),%eax          # eax<- CC
4600f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   3(rPC),%ecx          # ecx<- BB
4601f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fldl    (rFP,%eax,4)         # vCC to fp stack
4602f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fdivl   (rFP,%ecx,4)         # ex: faddp
4603f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4604f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4605f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstpl   (rFP,rINST,4)         # %st to vAA
4606f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_DOUBLE: /* 0xaf */
4612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_DOUBLE.S */
4613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* rem_float vAA, vBB, vCC */
4614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl   3(rPC),%ecx            # ecx<- BB
4615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl   2(rPC),%eax            # eax<- CC
4616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fldl     (rFP,%ecx,4)           # vCC to fp stack
4617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fldl     (rFP,%eax,4)           # vCC to fp stack
4618f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%ecx           # ecx<- AA
4619f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
4620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:
4621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fprem
4622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fstsw     %ax
4623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sahf
4624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jp        1b
4625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fstp      %st(1)
4626f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
4627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fstpl    (rFP,%ecx,4)           # %st to vAA
4628f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_2ADDR: /* 0xb0 */
4633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT_2ADDR.S */
4634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */
4635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
4637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
4638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
4643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
4645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
4646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
4647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
4648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
4650f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx   rINSTbl,%ecx               # ecx<- A+
4651f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,rINST                 # rINST<- B
4652f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST              # eax<- vB
4653f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
4654f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,%cl                  # ecx<- A
4655f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    addl     %eax,(rFP,%ecx,4)                             # for ex: addl   %eax,(rFP,%ecx,4)
4656f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
4657f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_INT_2ADDR: /* 0xb1 */
4663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_INT_2ADDR.S */
4664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */
4665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
4667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
4668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
4673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
4675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
4676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
4677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
4678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
4680f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx   rINSTbl,%ecx               # ecx<- A+
4681f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,rINST                 # rINST<- B
4682f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST              # eax<- vB
4683f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
4684f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,%cl                  # ecx<- A
4685f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    subl     %eax,(rFP,%ecx,4)                             # for ex: addl   %eax,(rFP,%ecx,4)
4686f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
4687f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_2ADDR: /* 0xb2 */
4693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT_2ADDR.S */
4694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* mul vA, vB */
4695f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx   rINSTbl,%ecx               # ecx<- A+
4696f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,rINST                 # rINST<- B
4697f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST              # eax<- vB
4698f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,%cl                  # ecx<- A
4699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    imull   (rFP,%ecx,4),%eax
4700f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
4701f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax %ecx
4702f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
4703f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_2ADDR: /* 0xb3 */
4708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT_2ADDR.S */
4709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv2addr.S */
4710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 32-bit binary div/rem operation.  Handles special case of op0=minint and
4712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * op1=-1.
4713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* div/rem/2addr vA, vB */
4715f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx    rINSTbl,%ecx          # eax<- BA
4716f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,%ecx              # ecx<- B
4717f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx           # eax<- vBB
4718f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,rINSTbl         # rINST<- A
4719f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST          # eax<- vBB
4720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $0,%ecx
4721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       common_errDivideByZero
4722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $-1,%ecx
4723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne      .LOP_DIV_INT_2ADDR_continue_div2addr
4724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $0x80000000,%eax
4725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne      .LOP_DIV_INT_2ADDR_continue_div2addr
4726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     $0x80000000,%eax
4727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp      .LOP_DIV_INT_2ADDR_finish_div2addr
4728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_2ADDR: /* 0xb4 */
4734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT_2ADDR.S */
4735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv2addr.S */
4736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 32-bit binary div/rem operation.  Handles special case of op0=minint and
4738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * op1=-1.
4739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* div/rem/2addr vA, vB */
4741f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx    rINSTbl,%ecx          # eax<- BA
4742f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,%ecx              # ecx<- B
4743f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx           # eax<- vBB
4744f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,rINSTbl         # rINST<- A
4745f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST          # eax<- vBB
4746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $0,%ecx
4747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       common_errDivideByZero
4748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $-1,%ecx
4749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne      .LOP_REM_INT_2ADDR_continue_div2addr
4750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $0x80000000,%eax
4751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne      .LOP_REM_INT_2ADDR_continue_div2addr
4752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     $0,%edx
4753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp      .LOP_REM_INT_2ADDR_finish_div2addr
4754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_2ADDR: /* 0xb5 */
4760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT_2ADDR.S */
4761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */
4762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
4764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
4765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
4770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
4772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
4773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
4774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
4775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
4777f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx   rINSTbl,%ecx               # ecx<- A+
4778f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,rINST                 # rINST<- B
4779f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST              # eax<- vB
4780f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
4781f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,%cl                  # ecx<- A
4782f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andl     %eax,(rFP,%ecx,4)                             # for ex: addl   %eax,(rFP,%ecx,4)
4783f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
4784f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_2ADDR: /* 0xb6 */
4790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT_2ADDR.S */
4791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */
4792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
4794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
4795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
4800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
4802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
4803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
4804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
4805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
4807f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx   rINSTbl,%ecx               # ecx<- A+
4808f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,rINST                 # rINST<- B
4809f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST              # eax<- vB
4810f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
4811f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,%cl                  # ecx<- A
4812f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    orl     %eax,(rFP,%ecx,4)                             # for ex: addl   %eax,(rFP,%ecx,4)
4813f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
4814f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_2ADDR: /* 0xb7 */
4820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT_2ADDR.S */
4821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */
4822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
4824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
4825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
4830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
4832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
4833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
4834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
4835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
4837f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx   rINSTbl,%ecx               # ecx<- A+
4838f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,rINST                 # rINST<- B
4839f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST              # eax<- vB
4840f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
4841f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,%cl                  # ecx<- A
4842f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    xorl     %eax,(rFP,%ecx,4)                             # for ex: addl   %eax,(rFP,%ecx,4)
4843f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
4844f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT_2ADDR: /* 0xb8 */
4850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_INT_2ADDR.S */
4851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/shop2addr.S */
4852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "shift/2addr" operation.
4854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* shift/2addr vA, vB */
4856f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx    rINSTbl,%ecx           # eax<- BA
4857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl     $4,%ecx               # ecx<- B
4858f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx            # eax<- vBB
4859f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,rINSTbl          # rINST<- A
4860f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST           # eax<- vAA
4861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sall    %cl,%eax                          # ex: sarl %cl,%eax
4862f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
4863f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
4864f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
4865f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT_2ADDR: /* 0xb9 */
4871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_INT_2ADDR.S */
4872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/shop2addr.S */
4873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "shift/2addr" operation.
4875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* shift/2addr vA, vB */
4877f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx    rINSTbl,%ecx           # eax<- BA
4878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl     $4,%ecx               # ecx<- B
4879f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx            # eax<- vBB
4880f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,rINSTbl          # rINST<- A
4881f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST           # eax<- vAA
4882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl    %cl,%eax                          # ex: sarl %cl,%eax
4883f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
4884f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
4885f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
4886f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT_2ADDR: /* 0xba */
4892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_INT_2ADDR.S */
4893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/shop2addr.S */
4894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "shift/2addr" operation.
4896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* shift/2addr vA, vB */
4898f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx    rINSTbl,%ecx           # eax<- BA
4899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl     $4,%ecx               # ecx<- B
4900f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx            # eax<- vBB
4901f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,rINSTbl          # rINST<- A
4902f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST           # eax<- vAA
4903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    shrl    %cl,%eax                          # ex: sarl %cl,%eax
4904f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
4905f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
4906f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
4907f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_LONG_2ADDR: /* 0xbb */
4913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_LONG_2ADDR.S */
4914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */
4915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.
4917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
4919f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx              # ecx<- BA
4920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl      $4,%ecx                  # ecx<- B
4921f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax %ecx 0           # eax<- v[B+0]
4922f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %ecx %ecx 1           # eax<- v[B+1]
4923f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb      $0xF,rINSTbl             # rINST<- A
4924f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    addl %eax,(rFP,rINST,4)         # example: addl   %eax,(rFP,rINST,4)
4925f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    adcl %ecx,4(rFP,rINST,4)         # example: adcl   %ecx,4(rFP,rINST,4)
4926f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
4927f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
4928f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_LONG_2ADDR: /* 0xbc */
4934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_LONG_2ADDR.S */
4935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */
4936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.
4938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
4940f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx              # ecx<- BA
4941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl      $4,%ecx                  # ecx<- B
4942f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax %ecx 0           # eax<- v[B+0]
4943f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %ecx %ecx 1           # eax<- v[B+1]
4944f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb      $0xF,rINSTbl             # rINST<- A
4945f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    subl %eax,(rFP,rINST,4)         # example: addl   %eax,(rFP,rINST,4)
4946f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sbbl %ecx,4(rFP,rINST,4)         # example: adcl   %ecx,4(rFP,rINST,4)
4947f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
4948f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
4949f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
4950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_LONG_2ADDR: /* 0xbd */
4955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_LONG_2ADDR.S */
4956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Signed 64-bit integer multiply, 2-addr version
4958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * We could definately use more free registers for
4960f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee     * this code.  We must spill %edx (edx) because it
4961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * is used by imul.  We'll also spill rINST (ebx),
4962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * giving us eax, ebc, ecx and edx as computational
4963f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee     * temps.  On top of that, we'll spill %esi (edi)
4964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for use as the vA pointer and rFP (esi) for use
4965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * as the vB pointer.  Yuck.
4966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* mul-long/2addr vA, vB */
4968f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%eax             # eax<- BA
4969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andb      $0xf,%al                # eax<- A
4970f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl      $4,rINST                # rINST<- B
4971f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SPILL_TMP2(%esi)
4972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SPILL(rFP)
4973f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    leal      (rFP,%eax,4),%esi        # %esi<- &v[A]
4974f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    leal      (rFP,rINST,4),rFP        # rFP<- &v[B]
4975f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      4(%esi),%ecx             # ecx<- Amsw
4976f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    imull     (rFP),%ecx               # ecx<- (Amsw*Blsw)
4977f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      4(rFP),%eax              # eax<- Bmsw
4978f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    imull     (%esi),%eax              # eax<- (Bmsw*Alsw)
4979f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    addl      %eax,%ecx                # ecx<- (Amsw*Blsw)+(Bmsw*Alsw)
4980f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      (rFP),%eax               # eax<- Blsw
4981f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    mull      (%esi)                   # eax<- (Blsw*Alsw)
4982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp       .LOP_MUL_LONG_2ADDR_continue
4983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_LONG_2ADDR: /* 0xbe */
4987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG_2ADDR.S */
4988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* div/2addr vA, vB */
4989f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%eax
4990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    shrl      $4,%eax                  # eax<- B
4991f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb      $0xf,rINSTbl             # rINST<- A
4992f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %edx %eax 0
4993f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax %eax 1
4994f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     %edx,OUT_ARG2(%esp)
4995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl    %eax,%eax
4996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       .LOP_DIV_LONG_2ADDR_check_zero
4997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $-1,%eax
4998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       .LOP_DIV_LONG_2ADDR_check_neg1
4999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_notSpecial:
5000f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %edx rINST 0
5001f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %ecx rINST 1
5002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_notSpecial1:
5003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp      .LOP_DIV_LONG_2ADDR_continue
5004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_LONG_2ADDR: /* 0xbf */
5008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_LONG_2ADDR.S */
5009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG_2ADDR.S */
5010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* div/2addr vA, vB */
5011f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%eax
5012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    shrl      $4,%eax                  # eax<- B
5013f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb      $0xf,rINSTbl             # rINST<- A
5014f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %edx %eax 0
5015f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax %eax 1
5016f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     %edx,OUT_ARG2(%esp)
5017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl    %eax,%eax
5018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       .LOP_REM_LONG_2ADDR_check_zero
5019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $-1,%eax
5020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       .LOP_REM_LONG_2ADDR_check_neg1
5021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_notSpecial:
5022f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %edx rINST 0
5023f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %ecx rINST 1
5024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_notSpecial1:
5025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp      .LOP_REM_LONG_2ADDR_continue
5026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_LONG_2ADDR: /* 0xc0 */
5031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_LONG_2ADDR.S */
5032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */
5033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.
5035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5037f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx              # ecx<- BA
5038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl      $4,%ecx                  # ecx<- B
5039f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax %ecx 0           # eax<- v[B+0]
5040f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %ecx %ecx 1           # eax<- v[B+1]
5041f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb      $0xF,rINSTbl             # rINST<- A
5042f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andl %eax,(rFP,rINST,4)         # example: addl   %eax,(rFP,rINST,4)
5043f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andl %ecx,4(rFP,rINST,4)         # example: adcl   %ecx,4(rFP,rINST,4)
5044f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
5045f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
5046f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_LONG_2ADDR: /* 0xc1 */
5052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_LONG_2ADDR.S */
5053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */
5054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.
5056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5058f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx              # ecx<- BA
5059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl      $4,%ecx                  # ecx<- B
5060f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax %ecx 0           # eax<- v[B+0]
5061f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %ecx %ecx 1           # eax<- v[B+1]
5062f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb      $0xF,rINSTbl             # rINST<- A
5063f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    orl %eax,(rFP,rINST,4)         # example: addl   %eax,(rFP,rINST,4)
5064f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    orl %ecx,4(rFP,rINST,4)         # example: adcl   %ecx,4(rFP,rINST,4)
5065f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
5066f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
5067f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_LONG_2ADDR: /* 0xc2 */
5073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_LONG_2ADDR.S */
5074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */
5075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.
5077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5079f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx              # ecx<- BA
5080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl      $4,%ecx                  # ecx<- B
5081f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax %ecx 0           # eax<- v[B+0]
5082f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %ecx %ecx 1           # eax<- v[B+1]
5083f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb      $0xF,rINSTbl             # rINST<- A
5084f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    xorl %eax,(rFP,rINST,4)         # example: addl   %eax,(rFP,rINST,4)
5085f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    xorl %ecx,4(rFP,rINST,4)         # example: adcl   %ecx,4(rFP,rINST,4)
5086f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
5087f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
5088f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_LONG_2ADDR: /* 0xc3 */
5094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_LONG_2ADDR.S */
5095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Long integer shift, 2addr version.  vA is 64-bit value/result, vB is
5097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 32-bit shift distance.
5098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* shl-long/2addr vA, vB */
5100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* ecx gets shift count */
5101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* Need to spill edx */
5102f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    /* rINSTw gets AA */
5103f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx             # ecx<- BA
5104f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb      $0xf,rINSTbl            # rINST<- A
5105f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax rINST 0         # eax<- v[AA+0]
5106f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl      $4,%ecx                 # ecx<- B
5107f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %edx rINST 1         # edx<- v[AA+1]
5108f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx              # ecx<- vBB
5109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    shldl     %eax,%edx
5110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sall      %cl,%eax
5111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testb     $32,%cl
5112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        2f
5113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %eax,%edx
5114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    xorl      %eax,%eax
5115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2:
5116f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %edx rINST 1         # v[AA+1]<- edx
5117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp       .LOP_SHL_LONG_2ADDR_finish
5118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_LONG_2ADDR: /* 0xc4 */
5122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_LONG_2ADDR.S */
5123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Long integer shift, 2addr version.  vA is 64-bit value/result, vB is
5125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 32-bit shift distance.
5126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* shl-long/2addr vA, vB */
5128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* ecx gets shift count */
5129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* Need to spill edx */
5130f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    /* rINSTw gets AA */
5131f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx         # ecx<- BA
5132f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb      $0xf,rINSTbl        # rINST<- A
5133f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax rINST 0     # eax<- v[AA+0]
5134f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl      $4,%ecx             # ecx<- B
5135f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %edx rINST 1     # edx<- v[AA+1]
5136f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx           # ecx<- vBB
5137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    shrdl     %edx,%eax
5138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl      %cl,%edx
5139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testb     $32,%cl
5140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        2f
5141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %edx,%eax
5142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl      $31,%edx
5143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2:
5144f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %edx rINST 1     # v[AA+1]<- edx
5145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp       .LOP_SHR_LONG_2ADDR_finish
5146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_LONG_2ADDR: /* 0xc5 */
5150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_LONG_2ADDR.S */
5151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Long integer shift, 2addr version.  vA is 64-bit value/result, vB is
5153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 32-bit shift distance.
5154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* shl-long/2addr vA, vB */
5156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* ecx gets shift count */
5157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* Need to spill edx */
5158f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    /* rINSTw gets AA */
5159f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx             # ecx<- BA
5160f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb      $0xf,rINSTbl            # rINST<- A
5161f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax rINST 0         # eax<- v[AA+0]
5162f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl      $4,%ecx                 # ecx<- B
5163f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %edx rINST 1         # edx<- v[AA+1]
5164f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx               # ecx<- vBB
5165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    shrdl     %edx,%eax
5166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    shrl      %cl,%edx
5167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testb     $32,%cl
5168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        2f
5169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %edx,%eax
5170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    xorl      %edx,%edx
5171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2:
5172f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %edx rINST 1         # v[AA+1]<- edx
5173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp       .LOP_USHR_LONG_2ADDR_finish
5174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_FLOAT_2ADDR: /* 0xc6 */
5178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_FLOAT_2ADDR.S */
5179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */
5180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary float operation.
5182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-fp, sub-fp, mul-fp, div-fp
5184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5187f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx   rINSTbl,%ecx           # ecx<- A+
5188f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,%cl              # ecx<- A
5189f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    flds    (rFP,%ecx,4)          # vAA to fp stack
5190f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,rINST             # rINST<- B
5191f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fadds   (rFP,rINST,4)         # ex: faddp
5192f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
5193f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
5194f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstps    (rFP,%ecx,4)         # %st to vA
5195f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_FLOAT_2ADDR: /* 0xc7 */
5201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_FLOAT_2ADDR.S */
5202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */
5203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary float operation.
5205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-fp, sub-fp, mul-fp, div-fp
5207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5210f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx   rINSTbl,%ecx           # ecx<- A+
5211f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,%cl              # ecx<- A
5212f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    flds    (rFP,%ecx,4)          # vAA to fp stack
5213f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,rINST             # rINST<- B
5214f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fsubs   (rFP,rINST,4)         # ex: faddp
5215f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
5216f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
5217f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstps    (rFP,%ecx,4)         # %st to vA
5218f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_FLOAT_2ADDR: /* 0xc8 */
5224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_FLOAT_2ADDR.S */
5225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */
5226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary float operation.
5228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-fp, sub-fp, mul-fp, div-fp
5230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5233f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx   rINSTbl,%ecx           # ecx<- A+
5234f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,%cl              # ecx<- A
5235f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    flds    (rFP,%ecx,4)          # vAA to fp stack
5236f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,rINST             # rINST<- B
5237f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fmuls   (rFP,rINST,4)         # ex: faddp
5238f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
5239f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
5240f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstps    (rFP,%ecx,4)         # %st to vA
5241f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_FLOAT_2ADDR: /* 0xc9 */
5247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_FLOAT_2ADDR.S */
5248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */
5249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary float operation.
5251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-fp, sub-fp, mul-fp, div-fp
5253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5256f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx   rINSTbl,%ecx           # ecx<- A+
5257f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,%cl              # ecx<- A
5258f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    flds    (rFP,%ecx,4)          # vAA to fp stack
5259f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,rINST             # rINST<- B
5260f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fdivs   (rFP,rINST,4)         # ex: faddp
5261f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
5262f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
5263f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstps    (rFP,%ecx,4)         # %st to vA
5264f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_FLOAT_2ADDR: /* 0xca */
5270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_FLOAT_2ADDR.S */
5271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* rem_float/2addr vA, vB */
5272f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx   rINSTbl,%ecx                # ecx<- A+
5273f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,rINST                  # rINST<- B
5274f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    flds     (rFP,rINST,4)              # vBB to fp stack
5275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andb    $0xf,%cl                   # ecx<- A
5276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    flds     (rFP,%ecx,4)               # vAA to fp stack
5277f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
5278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:
5279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fprem
5280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fstsw     %ax
5281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sahf
5282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jp        1b
5283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fstp      %st(1)
5284f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
5285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fstps    (rFP,%ecx,4)               # %st to vA
5286f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_DOUBLE_2ADDR: /* 0xcb */
5291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_DOUBLE_2ADDR.S */
5292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */
5293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary float operation.
5295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-fp, sub-fp, mul-fp, div-fp
5297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5300f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx   rINSTbl,%ecx           # ecx<- A+
5301f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,%cl              # ecx<- A
5302f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fldl    (rFP,%ecx,4)          # vAA to fp stack
5303f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,rINST             # rINST<- B
5304f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    faddl   (rFP,rINST,4)         # ex: faddp
5305f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
5306f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
5307f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstpl    (rFP,%ecx,4)         # %st to vA
5308f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_DOUBLE_2ADDR: /* 0xcc */
5314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_DOUBLE_2ADDR.S */
5315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */
5316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary float operation.
5318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-fp, sub-fp, mul-fp, div-fp
5320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5323f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx   rINSTbl,%ecx           # ecx<- A+
5324f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,%cl              # ecx<- A
5325f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fldl    (rFP,%ecx,4)          # vAA to fp stack
5326f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,rINST             # rINST<- B
5327f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fsubl   (rFP,rINST,4)         # ex: faddp
5328f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
5329f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
5330f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstpl    (rFP,%ecx,4)         # %st to vA
5331f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_DOUBLE_2ADDR: /* 0xcd */
5337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_DOUBLE_2ADDR.S */
5338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */
5339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary float operation.
5341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-fp, sub-fp, mul-fp, div-fp
5343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5346f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx   rINSTbl,%ecx           # ecx<- A+
5347f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,%cl              # ecx<- A
5348f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fldl    (rFP,%ecx,4)          # vAA to fp stack
5349f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,rINST             # rINST<- B
5350f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fmull   (rFP,rINST,4)         # ex: faddp
5351f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
5352f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
5353f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstpl    (rFP,%ecx,4)         # %st to vA
5354f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_DOUBLE_2ADDR: /* 0xce */
5360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_DOUBLE_2ADDR.S */
5361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */
5362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary float operation.
5364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-fp, sub-fp, mul-fp, div-fp
5366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5369f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx   rINSTbl,%ecx           # ecx<- A+
5370f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,%cl              # ecx<- A
5371f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fldl    (rFP,%ecx,4)          # vAA to fp stack
5372f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,rINST             # rINST<- B
5373f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fdivl   (rFP,rINST,4)         # ex: faddp
5374f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
5375f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
5376f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fstpl    (rFP,%ecx,4)         # %st to vA
5377f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_DOUBLE_2ADDR: /* 0xcf */
5383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_DOUBLE_2ADDR.S */
5384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* rem_float/2addr vA, vB */
5385f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzx   rINSTbl,%ecx                # ecx<- A+
5386f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,rINST                  # rINST<- B
5387f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    fldl     (rFP,rINST,4)              # vBB to fp stack
5388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andb    $0xf,%cl                   # ecx<- A
5389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fldl     (rFP,%ecx,4)               # vAA to fp stack
5390f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 1 %edx
5391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:
5392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fprem
5393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fstsw     %ax
5394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sahf
5395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jp        1b
5396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fstp      %st(1)
5397f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
5398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fstpl    (rFP,%ecx,4)               # %st to vA
5399f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_LIT16: /* 0xd0 */
5404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT_LIT16.S */
5405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */
5406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
5408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = eax op ecx".
5409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an x86 instruction or a function call.  (If the result
5410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than eax, you can override "result".)
5411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit16, rsub-int,
5413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-int/lit16, or-int/lit16, xor-int/lit16
5414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit16 vA, vB, #+CCCC */
5416f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%eax               # eax<- 000000BA
5417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl     $4,%eax                   # eax<- B
5418f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax                # eax<- vB
5419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movswl   2(rPC),%ecx                # ecx<- ssssCCCC
5420f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,rINSTbl              # rINST<- A
5421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    addl %ecx,%eax                              # for example: addl %ecx, %eax
5422f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
5423f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
5424f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
5425f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RSUB_INT: /* 0xd1 */
5431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RSUB_INT.S */
5432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */
5433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
5435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = eax op ecx".
5436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an x86 instruction or a function call.  (If the result
5437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than eax, you can override "result".)
5438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit16, rsub-int,
5440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-int/lit16, or-int/lit16, xor-int/lit16
5441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit16 vA, vB, #+CCCC */
5443f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%eax               # eax<- 000000BA
5444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl     $4,%eax                   # eax<- B
5445f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax                # eax<- vB
5446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movswl   2(rPC),%ecx                # ecx<- ssssCCCC
5447f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,rINSTbl              # rINST<- A
5448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    subl %eax,%ecx                              # for example: addl %ecx, %eax
5449f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %ecx rINST
5450f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
5451f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
5452f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_LIT16: /* 0xd2 */
5458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT_LIT16.S */
5459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* mul/lit16 vA, vB, #+CCCC */
5460f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    /* Need A in rINST, ssssCCCC in ecx, vB in eax */
5461f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%eax               # eax<- 000000BA
5462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl     $4,%eax                   # eax<- B
5463f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax                # eax<- vB
5464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movswl   2(rPC),%ecx                # ecx<- ssssCCCC
5465f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,rINSTbl              # rINST<- A
5466f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    imull     %ecx,%eax                 # trashes edx
5467f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
5468f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
5469f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
5470f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_LIT16: /* 0xd3 */
5475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT_LIT16.S */
5476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit16.S */
5477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 32-bit binary div/rem operation.  Handles special case of op0=minint and
5479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * op1=-1.
5480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* div/rem/lit16 vA, vB, #+CCCC */
5482f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    /* Need A in rINST, ssssCCCC in ecx, vB in eax */
5483f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%eax         # eax<- 000000BA
5484f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,%eax             # eax<- B
5485f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax          # eax<- vB
5486f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movswl   2(rPC),%ecx          # ecx<- ssssCCCC
5487f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,rINSTbl        # rINST<- A
5488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $0,%ecx
5489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       common_errDivideByZero
5490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $-1,%ecx
5491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne      .LOP_DIV_INT_LIT16_continue_div
5492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $0x80000000,%eax
5493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne      .LOP_DIV_INT_LIT16_continue_div
5494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     $0x80000000,%eax
5495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp      .LOP_DIV_INT_LIT16_finish_div
5496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_LIT16: /* 0xd4 */
5502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT_LIT16.S */
5503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit16.S */
5504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 32-bit binary div/rem operation.  Handles special case of op0=minint and
5506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * op1=-1.
5507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* div/rem/lit16 vA, vB, #+CCCC */
5509f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    /* Need A in rINST, ssssCCCC in ecx, vB in eax */
5510f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%eax         # eax<- 000000BA
5511f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl     $4,%eax             # eax<- B
5512f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax          # eax<- vB
5513f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movswl   2(rPC),%ecx          # ecx<- ssssCCCC
5514f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,rINSTbl        # rINST<- A
5515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $0,%ecx
5516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       common_errDivideByZero
5517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $-1,%ecx
5518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne      .LOP_REM_INT_LIT16_continue_div
5519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $0x80000000,%eax
5520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne      .LOP_REM_INT_LIT16_continue_div
5521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     $0,%edx
5522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp      .LOP_REM_INT_LIT16_finish_div
5523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_LIT16: /* 0xd5 */
5529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT_LIT16.S */
5530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */
5531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
5533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = eax op ecx".
5534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an x86 instruction or a function call.  (If the result
5535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than eax, you can override "result".)
5536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit16, rsub-int,
5538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-int/lit16, or-int/lit16, xor-int/lit16
5539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit16 vA, vB, #+CCCC */
5541f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%eax               # eax<- 000000BA
5542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl     $4,%eax                   # eax<- B
5543f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax                # eax<- vB
5544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movswl   2(rPC),%ecx                # ecx<- ssssCCCC
5545f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,rINSTbl              # rINST<- A
5546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andl %ecx,%eax                              # for example: addl %ecx, %eax
5547f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
5548f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
5549f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
5550f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_LIT16: /* 0xd6 */
5556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT_LIT16.S */
5557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */
5558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
5560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = eax op ecx".
5561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an x86 instruction or a function call.  (If the result
5562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than eax, you can override "result".)
5563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit16, rsub-int,
5565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-int/lit16, or-int/lit16, xor-int/lit16
5566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit16 vA, vB, #+CCCC */
5568f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%eax               # eax<- 000000BA
5569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl     $4,%eax                   # eax<- B
5570f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax                # eax<- vB
5571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movswl   2(rPC),%ecx                # ecx<- ssssCCCC
5572f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,rINSTbl              # rINST<- A
5573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orl     %ecx,%eax                              # for example: addl %ecx, %eax
5574f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
5575f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
5576f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
5577f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_LIT16: /* 0xd7 */
5583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT_LIT16.S */
5584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */
5585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
5587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = eax op ecx".
5588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an x86 instruction or a function call.  (If the result
5589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than eax, you can override "result".)
5590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit16, rsub-int,
5592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-int/lit16, or-int/lit16, xor-int/lit16
5593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit16 vA, vB, #+CCCC */
5595f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl   rINSTbl,%eax               # eax<- 000000BA
5596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl     $4,%eax                   # eax<- B
5597f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax %eax                # eax<- vB
5598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movswl   2(rPC),%ecx                # ecx<- ssssCCCC
5599f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb     $0xf,rINSTbl              # rINST<- A
5600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    xor    %ecx,%eax                              # for example: addl %ecx, %eax
5601f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
5602f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
5603f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
5604f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_LIT8: /* 0xd8 */
5610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT_LIT8.S */
5611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */
5612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
5614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = eax op ecx".
5615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an x86 instruction or a function call.  (If the result
5616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit8, rsub-int/lit8
5619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-int/lit8, or-int/lit8, xor-int/lit8,
5620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
5621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit8 vAA, vBB, #+CC */
5623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax              # eax<- BB
5624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movsbl    3(rPC),%ecx              # ecx<- ssssssCC
5625f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R   %eax %eax             # eax<- rBB
5626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    addl %ecx,%eax                             # ex: addl %ecx,%eax
5627f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
5628f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG   %eax rINST
5629f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
5630f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RSUB_INT_LIT8: /* 0xd9 */
5636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RSUB_INT_LIT8.S */
5637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */
5638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
5640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = eax op ecx".
5641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an x86 instruction or a function call.  (If the result
5642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit8, rsub-int/lit8
5645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-int/lit8, or-int/lit8, xor-int/lit8,
5646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
5647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit8 vAA, vBB, #+CC */
5649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax              # eax<- BB
5650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movsbl    3(rPC),%ecx              # ecx<- ssssssCC
5651f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R   %eax %eax             # eax<- rBB
5652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    subl  %eax,%ecx                             # ex: addl %ecx,%eax
5653f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
5654f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG   %ecx rINST
5655f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
5656f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_LIT8: /* 0xda */
5662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT_LIT8.S */
5663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* mul/lit8 vAA, vBB, #+CC */
5664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax              # eax<- BB
5665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movsbl    3(rPC),%ecx              # ecx<- ssssssCC
5666f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R   %eax %eax             # eax<- rBB
5667f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    imull     %ecx,%eax                # trashes edx
5668f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
5669f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
5670f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG  %eax rINST
5671f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_LIT8: /* 0xdb */
5676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT_LIT8.S */
5677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit8.S */
5678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 32-bit div/rem "lit8" binary operation.  Handles special case of
5680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * op0=minint & op1=-1
5681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* div/rem/lit8 vAA, vBB, #+CC */
5683f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    2(rPC),%eax        # eax<- BB
5684f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movsbl    3(rPC),%ecx        # ecx<- ssssssCC
5685f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %eax %eax        # eax<- rBB
5686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $0,%ecx
5687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       common_errDivideByZero
5688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $0x80000000,%eax
5689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne      .LOP_DIV_INT_LIT8_continue_div
5690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $-1,%ecx
5691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne      .LOP_DIV_INT_LIT8_continue_div
5692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     $0x80000000,%eax
5693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp      .LOP_DIV_INT_LIT8_finish_div
5694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_LIT8: /* 0xdc */
5700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT_LIT8.S */
5701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit8.S */
5702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 32-bit div/rem "lit8" binary operation.  Handles special case of
5704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * op0=minint & op1=-1
5705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* div/rem/lit8 vAA, vBB, #+CC */
5707f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    2(rPC),%eax        # eax<- BB
5708f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movsbl    3(rPC),%ecx        # ecx<- ssssssCC
5709f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %eax %eax        # eax<- rBB
5710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $0,%ecx
5711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       common_errDivideByZero
5712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $0x80000000,%eax
5713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne      .LOP_REM_INT_LIT8_continue_div
5714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $-1,%ecx
5715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne      .LOP_REM_INT_LIT8_continue_div
5716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     $0,%edx
5717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp      .LOP_REM_INT_LIT8_finish_div
5718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_LIT8: /* 0xdd */
5724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT_LIT8.S */
5725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */
5726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
5728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = eax op ecx".
5729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an x86 instruction or a function call.  (If the result
5730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit8, rsub-int/lit8
5733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-int/lit8, or-int/lit8, xor-int/lit8,
5734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
5735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit8 vAA, vBB, #+CC */
5737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax              # eax<- BB
5738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movsbl    3(rPC),%ecx              # ecx<- ssssssCC
5739f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R   %eax %eax             # eax<- rBB
5740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andl %ecx,%eax                             # ex: addl %ecx,%eax
5741f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
5742f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG   %eax rINST
5743f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
5744f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_LIT8: /* 0xde */
5750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT_LIT8.S */
5751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */
5752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
5754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = eax op ecx".
5755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an x86 instruction or a function call.  (If the result
5756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit8, rsub-int/lit8
5759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-int/lit8, or-int/lit8, xor-int/lit8,
5760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
5761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit8 vAA, vBB, #+CC */
5763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax              # eax<- BB
5764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movsbl    3(rPC),%ecx              # ecx<- ssssssCC
5765f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R   %eax %eax             # eax<- rBB
5766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orl     %ecx,%eax                             # ex: addl %ecx,%eax
5767f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
5768f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG   %eax rINST
5769f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
5770f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_LIT8: /* 0xdf */
5776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT_LIT8.S */
5777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */
5778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
5780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = eax op ecx".
5781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an x86 instruction or a function call.  (If the result
5782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit8, rsub-int/lit8
5785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-int/lit8, or-int/lit8, xor-int/lit8,
5786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
5787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit8 vAA, vBB, #+CC */
5789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax              # eax<- BB
5790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movsbl    3(rPC),%ecx              # ecx<- ssssssCC
5791f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R   %eax %eax             # eax<- rBB
5792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    xor    %ecx,%eax                             # ex: addl %ecx,%eax
5793f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
5794f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG   %eax rINST
5795f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
5796f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT_LIT8: /* 0xe0 */
5802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_INT_LIT8.S */
5803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */
5804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
5806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = eax op ecx".
5807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an x86 instruction or a function call.  (If the result
5808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit8, rsub-int/lit8
5811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-int/lit8, or-int/lit8, xor-int/lit8,
5812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
5813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit8 vAA, vBB, #+CC */
5815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax              # eax<- BB
5816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movsbl    3(rPC),%ecx              # ecx<- ssssssCC
5817f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R   %eax %eax             # eax<- rBB
5818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sall  %cl,%eax                             # ex: addl %ecx,%eax
5819f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
5820f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG   %eax rINST
5821f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
5822f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT_LIT8: /* 0xe1 */
5828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_INT_LIT8.S */
5829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */
5830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
5832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = eax op ecx".
5833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an x86 instruction or a function call.  (If the result
5834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit8, rsub-int/lit8
5837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-int/lit8, or-int/lit8, xor-int/lit8,
5838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
5839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit8 vAA, vBB, #+CC */
5841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax              # eax<- BB
5842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movsbl    3(rPC),%ecx              # ecx<- ssssssCC
5843f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R   %eax %eax             # eax<- rBB
5844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl    %cl,%eax                             # ex: addl %ecx,%eax
5845f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
5846f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG   %eax rINST
5847f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
5848f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT_LIT8: /* 0xe2 */
5854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_INT_LIT8.S */
5855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */
5856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
5858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = eax op ecx".
5859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an x86 instruction or a function call.  (If the result
5860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit8, rsub-int/lit8
5863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-int/lit8, or-int/lit8, xor-int/lit8,
5864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
5865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit8 vAA, vBB, #+CC */
5867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax              # eax<- BB
5868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movsbl    3(rPC),%ecx              # ecx<- ssssssCC
5869f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R   %eax %eax             # eax<- rBB
5870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    shrl     %cl,%eax                             # ex: addl %ecx,%eax
5871f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
5872f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG   %eax rINST
5873f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
5874f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
5875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5879c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_IGET_VOLATILE: /* 0xe3 */
58803d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IGET_VOLATILE.S */
58813d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IGET.S */
58823d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /*
58833d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * General 32-bit instance field get.
58843d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     *
58853d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
58863d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     */
58873d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /* op vA, vB, field@CCCC */
58889f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
5889f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  2(rPC),%edx                         # edx<- 0000CCCC
58909f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
5891f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  rINSTbl,%ecx                        # ecx<- BA
5892f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,%ecx                            # ecx<- B
5893f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
5894f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,rINSTbl                       # rINST<- A
5895f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx                        # ecx<- fp[B], the object ptr
5896f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    (%eax,%edx,4),%eax                  # resolved entry
5897f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   %eax,%eax                           # is resolved entry null?
5898f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jne     .LOP_IGET_VOLATILE_finish                  # no, already resolved
5899f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %edx,OUT_ARG1(%esp)                 # needed by dvmResolveInstField
59009f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
59013d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    jmp     .LOP_IGET_VOLATILE_resolve
59023d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
59033d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
5904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5906c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_IPUT_VOLATILE: /* 0xe4 */
59073d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IPUT_VOLATILE.S */
59083d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IPUT.S */
59093d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
59103d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /*
59113d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * General 32-bit instance field put.
59123d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     *
59133d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short
59143d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     */
59153d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /* op vA, vB, field@CCCC */
59169f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
5917f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  2(rPC),%edx                         # %edx<- 0000CCCC
59189f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
5919f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  rINSTbl,%ecx                        # ecx<- BA
5920f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,%ecx                            # ecx<- B
5921f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
5922f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,rINSTbl                       # rINST<- A
5923f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx                        # ecx<- fp[B], the object ptr
5924f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    (%eax,%edx,4),%eax                  # resolved entry
5925f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   %eax,%eax                           # is resolved entry null?
5926f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jne     .LOP_IPUT_VOLATILE_finish                  # no, already resolved
5927f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %edx,OUT_ARG1(%esp)
59289f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
59293d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    jmp     .LOP_IPUT_VOLATILE_resolve
59303d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
59313d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
5932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5934c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_SGET_VOLATILE: /* 0xe5 */
59353d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SGET_VOLATILE.S */
59363d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SGET.S */
59373d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /*
59383d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * General 32-bit SGET handler.
59393d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     *
59403d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
59413d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     */
59423d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /* op vAA, field@BBBB */
59439f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
59443d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movzwl    2(rPC),%eax                        # eax<- field ref BBBB
59459f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
59463d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
59473d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
59483d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    testl     %eax,%eax                          # resolved entry null?
59493d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    je        .LOP_SGET_VOLATILE_resolve                # if not, make it so
59503d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SGET_VOLATILE_finish:     # field ptr in eax
59513d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movl      offStaticField_value(%eax),%eax
5952f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
5953f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
5954f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
5955f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
59563d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
59573d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
5958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5960c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_SPUT_VOLATILE: /* 0xe6 */
59613d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SPUT_VOLATILE.S */
59623d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SPUT.S */
59633d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /*
59643d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * General 32-bit SPUT handler.
59653d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     *
59663d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * for: sput, sput-boolean, sput-byte, sput-char, sput-short
59673d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     */
59683d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /* op vAA, field@BBBB */
59699f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
59703d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movzwl    2(rPC),%eax                        # eax<- field ref BBBB
59719f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
59723d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
59733d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
59743d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    testl     %eax,%eax                          # resolved entry null?
59753d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    je        .LOP_SPUT_VOLATILE_resolve                # if not, make it so
59763d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SPUT_VOLATILE_finish:     # field ptr in eax
5977f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx rINST
5978f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
5979f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
59803d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movl      %ecx,offStaticField_value(%eax)
5981f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
59823d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
59833d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
5984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5986c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_IGET_OBJECT_VOLATILE: /* 0xe7 */
59873d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IGET_OBJECT_VOLATILE.S */
59883d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IGET.S */
59893d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /*
59903d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * General 32-bit instance field get.
59913d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     *
59923d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
59933d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     */
59943d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /* op vA, vB, field@CCCC */
59959f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
5996f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  2(rPC),%edx                         # edx<- 0000CCCC
59979f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
5998f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  rINSTbl,%ecx                        # ecx<- BA
5999f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,%ecx                            # ecx<- B
6000f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
6001f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,rINSTbl                       # rINST<- A
6002f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx                        # ecx<- fp[B], the object ptr
6003f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    (%eax,%edx,4),%eax                  # resolved entry
6004f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   %eax,%eax                           # is resolved entry null?
6005f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jne     .LOP_IGET_OBJECT_VOLATILE_finish                  # no, already resolved
6006f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %edx,OUT_ARG1(%esp)                 # needed by dvmResolveInstField
60079f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
60083d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    jmp     .LOP_IGET_OBJECT_VOLATILE_resolve
60093d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
60103d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
6011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
60135387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_IGET_WIDE_VOLATILE: /* 0xe8 */
60145387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    /* (stub) */
60159f601a917c8878204482c37aec7005054b6776fabuzbee    SAVE_PC_FP_TO_SELF %ecx          # leaves rSELF in %ecx
60169f601a917c8878204482c37aec7005054b6776fabuzbee    movl %ecx,OUT_ARG0(%esp)         # self is first arg to function
60175387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    call      dvmMterp_OP_IGET_WIDE_VOLATILE     # do the real work
60189f601a917c8878204482c37aec7005054b6776fabuzbee    mov       rSELF,%ecx
60199f601a917c8878204482c37aec7005054b6776fabuzbee    LOAD_PC_FP_FROM_SELF             # retrieve updated values
6020f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST
60215387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    GOTO_NEXT
6022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
60245387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_IPUT_WIDE_VOLATILE: /* 0xe9 */
60255387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    /* (stub) */
60269f601a917c8878204482c37aec7005054b6776fabuzbee    SAVE_PC_FP_TO_SELF %ecx          # leaves rSELF in %ecx
60279f601a917c8878204482c37aec7005054b6776fabuzbee    movl %ecx,OUT_ARG0(%esp)         # self is first arg to function
60285387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    call      dvmMterp_OP_IPUT_WIDE_VOLATILE     # do the real work
60299f601a917c8878204482c37aec7005054b6776fabuzbee    mov       rSELF,%ecx
60309f601a917c8878204482c37aec7005054b6776fabuzbee    LOAD_PC_FP_FROM_SELF             # retrieve updated values
6031f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST
60325387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    GOTO_NEXT
6033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
60355387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_SGET_WIDE_VOLATILE: /* 0xea */
60365387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    /* (stub) */
60379f601a917c8878204482c37aec7005054b6776fabuzbee    SAVE_PC_FP_TO_SELF %ecx          # leaves rSELF in %ecx
60389f601a917c8878204482c37aec7005054b6776fabuzbee    movl %ecx,OUT_ARG0(%esp)         # self is first arg to function
60395387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    call      dvmMterp_OP_SGET_WIDE_VOLATILE     # do the real work
60409f601a917c8878204482c37aec7005054b6776fabuzbee    mov       rSELF,%ecx
60419f601a917c8878204482c37aec7005054b6776fabuzbee    LOAD_PC_FP_FROM_SELF             # retrieve updated values
6042f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST
60435387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    GOTO_NEXT
6044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
60465387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_SPUT_WIDE_VOLATILE: /* 0xeb */
60475387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    /* (stub) */
60489f601a917c8878204482c37aec7005054b6776fabuzbee    SAVE_PC_FP_TO_SELF %ecx          # leaves rSELF in %ecx
60499f601a917c8878204482c37aec7005054b6776fabuzbee    movl %ecx,OUT_ARG0(%esp)         # self is first arg to function
60505387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    call      dvmMterp_OP_SPUT_WIDE_VOLATILE     # do the real work
60519f601a917c8878204482c37aec7005054b6776fabuzbee    mov       rSELF,%ecx
60529f601a917c8878204482c37aec7005054b6776fabuzbee    LOAD_PC_FP_FROM_SELF             # retrieve updated values
6053f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST
60545387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    GOTO_NEXT
6055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
605796516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden.L_OP_BREAKPOINT: /* 0xec */
605896516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden/* File: x86/OP_BREAKPOINT.S */
6059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */
6060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_abort
6061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
60653a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden.L_OP_THROW_VERIFICATION_ERROR: /* 0xed */
6066be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee/* File: x86/OP_THROW_VERIFICATION_ERROR.S */
6067be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee    /*
6068be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee     * Handle a throw-verification-error instruction.  This throws an
6069be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee     * exception for an error discovered during verification.  The
6070be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee     * exception is indicated by AA, with some detail provided by BBBB.
6071be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee     */
6072be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee    /* op AA, ref@BBBB */
60739f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
6074be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee    movzwl   2(rPC),%eax                     # eax<- BBBB
60759f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx       # ecx<- self->method
6076f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
6077be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee    movl     %eax,OUT_ARG2(%esp)             # arg2<- BBBB
6078f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl     rINST,OUT_ARG1(%esp)            # arg1<- AA
6079be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee    movl     %ecx,OUT_ARG0(%esp)             # arg0<- method
6080be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee    call     dvmThrowVerificationError       # call(method, kind, ref)
6081be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee    jmp      common_exceptionThrown          # handle exception
6082be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee
6083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_EXECUTE_INLINE: /* 0xee */
6086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_EXECUTE_INLINE.S */
6087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Execute a "native inline" instruction.
6089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * We will be calling through a function table:
6091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * (*gDvmInlineOpsTable[opIndex].func)(arg0, arg1, arg2, arg3, pResult)
6093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6094f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee     * Ignores argument count - always loads 4.
6095f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee     *
6096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* [opt] execute-inline vAA, {vC, vD, vE, vF}, inline@BBBB */
60989f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
6099f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
6100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax               # eax<- BBBB
61019f601a917c8878204482c37aec7005054b6776fabuzbee    leal      offThread_retval(%ecx),%ecx # ecx<- & self->retval
6102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %ecx,OUT_ARG4(%esp)
6103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    call      .LOP_EXECUTE_INLINE_continue      # make call; will return after
6104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # successful?
6105f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 3 %edx
6106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_exceptionThrown    # no, handle exception
6107f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 3
6108f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
6109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6112b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden.L_OP_EXECUTE_INLINE_RANGE: /* 0xef */
6113b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden    /* (stub) */
61149f601a917c8878204482c37aec7005054b6776fabuzbee    SAVE_PC_FP_TO_SELF %ecx          # leaves rSELF in %ecx
61159f601a917c8878204482c37aec7005054b6776fabuzbee    movl %ecx,OUT_ARG0(%esp)         # self is first arg to function
6116b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden    call      dvmMterp_OP_EXECUTE_INLINE_RANGE     # do the real work
61179f601a917c8878204482c37aec7005054b6776fabuzbee    mov       rSELF,%ecx
61189f601a917c8878204482c37aec7005054b6776fabuzbee    LOAD_PC_FP_FROM_SELF             # retrieve updated values
6119f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST
6120b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden    GOTO_NEXT
6121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6123750d110b62cef538e193b6f91f5239b0c4b63ef1Andy McFadden.L_OP_INVOKE_OBJECT_INIT: /* 0xf0 */
61246af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden    /* (stub) */
61259f601a917c8878204482c37aec7005054b6776fabuzbee    SAVE_PC_FP_TO_SELF %ecx          # leaves rSELF in %ecx
61269f601a917c8878204482c37aec7005054b6776fabuzbee    movl %ecx,OUT_ARG0(%esp)         # self is first arg to function
61276af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden    call      dvmMterp_OP_INVOKE_OBJECT_INIT     # do the real work
61289f601a917c8878204482c37aec7005054b6776fabuzbee    mov       rSELF,%ecx
61299f601a917c8878204482c37aec7005054b6776fabuzbee    LOAD_PC_FP_FROM_SELF             # retrieve updated values
61306af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden    FETCH_INST
6131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
6132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6134291758c5c4902900c6f86794ba8ab9cad9b26197Andy McFadden.L_OP_RETURN_VOID_BARRIER: /* 0xf1 */
6135291758c5c4902900c6f86794ba8ab9cad9b26197Andy McFadden    /* (stub) */
61369f601a917c8878204482c37aec7005054b6776fabuzbee    SAVE_PC_FP_TO_SELF %ecx          # leaves rSELF in %ecx
61379f601a917c8878204482c37aec7005054b6776fabuzbee    movl %ecx,OUT_ARG0(%esp)         # self is first arg to function
6138291758c5c4902900c6f86794ba8ab9cad9b26197Andy McFadden    call      dvmMterp_OP_RETURN_VOID_BARRIER     # do the real work
61399f601a917c8878204482c37aec7005054b6776fabuzbee    mov       rSELF,%ecx
61409f601a917c8878204482c37aec7005054b6776fabuzbee    LOAD_PC_FP_FROM_SELF             # retrieve updated values
6141f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST
6142291758c5c4902900c6f86794ba8ab9cad9b26197Andy McFadden    GOTO_NEXT
6143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_QUICK: /* 0xf2 */
6146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_QUICK.S */
6147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* For: iget-quick, iget-object-quick */
6148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, offset@CCCC */
6149f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx              # ecx<- BA
6150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl      $4,%ecx                  # ecx<- B
6151f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # vB (object we're operating on)
6152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax               # eax<- field byte offset
6153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl      $0,%ecx                  # is object null?
6154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject
6155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,1),%eax
6156f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
6157f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
6158f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb      $0xf,rINSTbl             # rINST<- A
6159f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG  %eax rINST                # fp[A]<- result
6160f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
6161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_WIDE_QUICK: /* 0xf3 */
6165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_WIDE_QUICK.S */
6166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* For: iget-wide-quick */
6167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, offset@CCCC */
6168f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx              # ecx<- BA
6169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl      $4,%ecx                  # ecx<- B
6170f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # vB (object we're operating on)
6171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax               # eax<- field byte offset
6172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl      $0,%ecx                  # is object null?
6173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject
6174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    leal      (%ecx,%eax,1),%eax        # eax<- address of 64-bit source
6175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%eax),%ecx               # ecx<- lsw
6176f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      4(%eax),%eax              # eax<- msw
6177f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb      $0xf,rINSTbl             # rINST<- A
6178f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
6179f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %ecx rINST 0          # v[A+0]<- lsw
6180f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG_WORD %eax rINST 1          # v[A+1]<- msw
6181f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
6182f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
6183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_OBJECT_QUICK: /* 0xf4 */
6187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_OBJECT_QUICK.S */
6188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_QUICK.S */
6189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* For: iget-quick, iget-object-quick */
6190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, offset@CCCC */
6191f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx              # ecx<- BA
6192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl      $4,%ecx                  # ecx<- B
6193f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # vB (object we're operating on)
6194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax               # eax<- field byte offset
6195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl      $0,%ecx                  # is object null?
6196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject
6197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,1),%eax
6198f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
6199f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
6200f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb      $0xf,rINSTbl             # rINST<- A
6201f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG  %eax rINST                # fp[A]<- result
6202f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
6203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_QUICK: /* 0xf5 */
6208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_QUICK.S */
62093d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /* For: iput-quick */
6210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, offset@CCCC */
6211f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx              # ecx<- BA
6212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl      $4,%ecx                  # ecx<- B
6213f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # vB (object we're operating on)
6214f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb      $0xf,rINSTbl             # rINST<- A
6215f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  rINST,rINST             # rINST<- v[A]
6216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax               # eax<- field byte offset
6217f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl     %ecx,%ecx                 # is object null?
6218f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
6219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject
6220f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      rINST,(%ecx,%eax,1)
6221f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
6222f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
6223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_WIDE_QUICK: /* 0xf6 */
6227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_WIDE_QUICK.S */
6228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* For: iput-wide-quick */
6229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, offset@CCCC */
6230f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx              # ecx<- BA
6231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl      $4,%ecx                  # ecx<- B
6232f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # vB (object we're operating on)
6233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax               # eax<- field byte offset
6234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl      %ecx,%ecx                # is object null?
6235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject
6236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    leal      (%ecx,%eax,1),%ecx        # ecx<- Address of 64-bit target
6237f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb      $0xf,rINSTbl             # rINST<- A
6238f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD %eax rINST 0          # eax<- lsw
6239f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_WORD rINST rINST 1         # rINST<- msw
6240f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
6241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %eax,(%ecx)
6242f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      rINST,4(%ecx)
6243f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
6244f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
6245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_OBJECT_QUICK: /* 0xf7 */
6249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_OBJECT_QUICK.S */
62503d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /* For: iput-object-quick */
6251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, offset@CCCC */
6252f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx              # ecx<- BA
6253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl      $4,%ecx                  # ecx<- B
6254f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx               # vB (object we're operating on)
6255f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb      $0xf,rINSTbl             # rINST<- A
6256f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  rINST rINST             # rINST<- v[A]
6257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax               # eax<- field byte offset
62583d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    testl     %ecx,%ecx                 # is object null?
6259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject
6260f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl      rINST,(%ecx,%eax,1)
62619f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%eax
62623d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    jmp       .LOP_IPUT_OBJECT_QUICK_finish
6263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_QUICK: /* 0xf8 */
6267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK.S */
6268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle an optimized virtual method call.
6270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: [opt] invoke-virtual-quick, invoke-virtual-quick/range
6272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
6274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
6275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    4(rPC),%eax               # eax<- FEDC or CCCC
6276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%ecx               # ecx<- BBBB
6277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if     (!0)
6278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andl      $0xf,%eax                # eax<- C (or stays CCCC)
6279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6280f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %eax %eax               # eax<- vC ("this" ptr)
6281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # null?
6282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # yep, throw exception
6283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offObject_clazz(%eax),%eax # eax<- thisPtr->clazz
6284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offClassObject_vtable(%eax),%eax # eax<- thisPtr->clazz->vtable
6285f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC                           # might throw later - get ready
6286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%eax,%ecx,4),%eax        # eax<- vtable[BBBB]
6287c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    jmp       common_invokeMethodNoRange
6288c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
6289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_QUICK_RANGE: /* 0xf9 */
6292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK_RANGE.S */
6293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK.S */
6294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle an optimized virtual method call.
6296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: [opt] invoke-virtual-quick, invoke-virtual-quick/range
6298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
6300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
6301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    4(rPC),%eax               # eax<- FEDC or CCCC
6302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%ecx               # ecx<- BBBB
6303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if     (!1)
6304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andl      $0xf,%eax                # eax<- C (or stays CCCC)
6305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6306f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %eax %eax               # eax<- vC ("this" ptr)
6307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # null?
6308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # yep, throw exception
6309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offObject_clazz(%eax),%eax # eax<- thisPtr->clazz
6310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offClassObject_vtable(%eax),%eax # eax<- thisPtr->clazz->vtable
6311f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC                           # might throw later - get ready
6312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%eax,%ecx,4),%eax        # eax<- vtable[BBBB]
6313c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    jmp       common_invokeMethodRange
6314c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
6315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_QUICK: /* 0xfa */
6319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK.S */
6320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle an optimized "super" method call.
6322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: [opt] invoke-super-quick, invoke-super-quick/range
6324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
6326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
63279f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
6328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    4(rPC),%eax               # eax<- GFED or CCCC
63299f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_method(%ecx),%ecx # ecx<- current method
6330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if       (!0)
6331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andl      $0xf,%eax                # eax<- D (or stays CCCC)
6332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offMethod_clazz(%ecx),%ecx # ecx<- method->clazz
6334f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %eax %eax               # eax<- "this"
6335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offClassObject_super(%ecx),%ecx # ecx<- method->clazz->super
6336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # null "this"?
6337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # "this" is null, throw exception
6338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax               # eax<- BBBB
6339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offClassObject_vtable(%ecx),%ecx # ecx<- vtable
6340f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
6341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax        # eax<- super->vtable[BBBB]
6342c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    jmp       common_invokeMethodNoRange
6343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_QUICK_RANGE: /* 0xfb */
6347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK_RANGE.S */
6348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK.S */
6349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle an optimized "super" method call.
6351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: [opt] invoke-super-quick, invoke-super-quick/range
6353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
6355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
63569f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
6357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    4(rPC),%eax               # eax<- GFED or CCCC
63589f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_method(%ecx),%ecx # ecx<- current method
6359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if       (!1)
6360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andl      $0xf,%eax                # eax<- D (or stays CCCC)
6361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offMethod_clazz(%ecx),%ecx # ecx<- method->clazz
6363f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %eax %eax               # eax<- "this"
6364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offClassObject_super(%ecx),%ecx # ecx<- method->clazz->super
6365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # null "this"?
6366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # "this" is null, throw exception
6367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzwl    2(rPC),%eax               # eax<- BBBB
6368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offClassObject_vtable(%ecx),%ecx # ecx<- vtable
6369f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
6370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      (%ecx,%eax,4),%eax        # eax<- super->vtable[BBBB]
6371c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    jmp       common_invokeMethodRange
6372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6376c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_IPUT_OBJECT_VOLATILE: /* 0xfc */
63773d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IPUT_OBJECT_VOLATILE.S */
63783d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IPUT_OBJECT.S */
63793d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /*
63803d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * Object field put.
63813d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     *
63823d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * for: iput-object
63833d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     */
63843d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /* op vA, vB, field@CCCC */
63859f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
6386f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzwl  2(rPC),%edx                         # edx<- 0000CCCC
63879f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
6388f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl  rINSTbl,%ecx                        # ecx<- BA
6389f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    sarl    $4,%ecx                            # ecx<- B
6390f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
6391f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andb    $0xf,rINSTbl                       # rINST<- A
6392f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %ecx %ecx                        # ecx<- fp[B], the object ptr
6393f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    (%eax,%edx,4),%eax                  # resolved entry
6394f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   %eax,%eax                           # is resolved entry null?
6395f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    jne     .LOP_IPUT_OBJECT_VOLATILE_finish                  # no, already resolved
6396f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %edx,OUT_ARG1(%esp)
63979f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
63983d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    jmp     .LOP_IPUT_OBJECT_VOLATILE_resolve
63993d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
64003d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
6401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6403c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_SGET_OBJECT_VOLATILE: /* 0xfd */
64043d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SGET_OBJECT_VOLATILE.S */
64053d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SGET.S */
64063d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /*
64073d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * General 32-bit SGET handler.
64083d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     *
64093d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
64103d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     */
64113d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /* op vAA, field@BBBB */
64129f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
64133d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movzwl    2(rPC),%eax                        # eax<- field ref BBBB
64149f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
64153d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
64163d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
64173d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    testl     %eax,%eax                          # resolved entry null?
64183d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    je        .LOP_SGET_OBJECT_VOLATILE_resolve                # if not, make it so
64193d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SGET_OBJECT_VOLATILE_finish:     # field ptr in eax
64203d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movl      offStaticField_value(%eax),%eax
6421f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 2 %edx
6422f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 2
6423f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SET_VREG %eax rINST
6424f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
64253d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
64263d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
6427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6429c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_SPUT_OBJECT_VOLATILE: /* 0xfe */
64303d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SPUT_OBJECT_VOLATILE.S */
64313d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SPUT_OBJECT.S */
64323d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /*
64333d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * SPUT object handler.
64343d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     */
64353d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /* op vAA, field@BBBB */
64369f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
64373d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movzwl    2(rPC),%eax                        # eax<- field ref BBBB
64389f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
64393d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
64403d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField
64413d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    testl     %eax,%eax                          # resolved entry null?
64423d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    je        .LOP_SPUT_OBJECT_VOLATILE_resolve                # if not, make it so
6443d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee.LOP_SPUT_OBJECT_VOLATILE_finish:                              # field ptr in eax
6444f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl    rINSTbl,%ecx                       # ecx<- AA
6445f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R  %ecx %ecx
64463d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    jmp       .LOP_SPUT_OBJECT_VOLATILE_continue
64473d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
64483d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
6449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
645190f15431b24a4004fab2db70f273155fcd1c42a4Dan Bornstein.L_OP_DISPATCH_FF: /* 0xff */
645290f15431b24a4004fab2db70f273155fcd1c42a4Dan Bornstein/* File: x86/OP_DISPATCH_FF.S */
645371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    leal      256(rINST),%edx
645471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_JUMBO_R %edx
6455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
645671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
6457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
645871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_CONST_CLASS_JUMBO: /* 0x100 */
645971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_CONST_CLASS_JUMBO.S */
646071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* const-class/jumbo vBBBB, Class@AAAAAAAA */
64619f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
646271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax              # eax<- AAAAAAAA
64639f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx# ecx<- self->methodClassDex
646471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResClasses(%ecx),%ecx # ecx<- dvmDex->pResClasses
646571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax       # eax<- rResClasses[AAAAAAAA]
646671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 4 %edx
646771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                # resolved yet?
646871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_CONST_CLASS_JUMBO_resolve
646971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG  %eax rINST               # vBBBB<- rResClasses[AAAAAAAA]
647071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 4
6471f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
6472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
647371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
647471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
647571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_CHECK_CAST_JUMBO: /* 0x101 */
647671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_CHECK_CAST_JUMBO.S */
647771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
647871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Check to see if a cast from one class to another is allowed.
647971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
648071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* check-cast/jumbo vBBBB, class@AAAAAAAA */
64819f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
648271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R  rINST,rINST             # rINST<- vBBBB (object)
648371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax               # eax<- AAAAAAAA
64849f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex
648571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     rINST,rINST               # is oject null?
648671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses
648771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_CHECK_CAST_JUMBO_okay          # null obj, cast always succeeds
648871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax        # eax<- resolved class
648971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offObject_clazz(rINST),%ecx # ecx<- obj->clazz
649071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                 # have we resolved this before?
649171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_CHECK_CAST_JUMBO_resolve       # no, go do it now
649271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CHECK_CAST_JUMBO_resolved:
649371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpl      %eax,%ecx                 # same class (trivial success)?
649471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne       .LOP_CHECK_CAST_JUMBO_fullcheck     # no, do full check
649571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CHECK_CAST_JUMBO_okay:
649671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 4 %edx
649771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 4
6498f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
6499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
650071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
650171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
650271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_INSTANCE_OF_JUMBO: /* 0x102 */
650371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_INSTANCE_OF_JUMBO.S */
650471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
650571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Check to see if an object reference is an instance of a class.
650671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
650771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Most common situation is a non-null object, being compared against
650871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * an already-resolved class.
650971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
651071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* instance-of/jumbo vBBBB, vCCCC, class@AAAAAAAA */
651171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  8(rPC),%eax                 # eax<- CCCC
651271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R %eax %eax                # eax<- vCCCC (obj)
65139f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
651471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                   # object null?
65159f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%ecx  # ecx<- pDvmDex
651671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      .LOP_INSTANCE_OF_JUMBO_store           # null obj, not instance, store it
651771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%edx                 # edx<- AAAAAAAA
651871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses
651971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%ecx,%edx,4),%ecx          # ecx<- resolved class
652071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offObject_clazz(%eax),%eax  # eax<- obj->clazz
652171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                   # have we resolved this before?
652271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      .LOP_INSTANCE_OF_JUMBO_resolve         # not resolved, do it now
652371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_JUMBO_resolved:  # eax<- obj->clazz, ecx<- resolved class
652471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpl    %eax,%ecx                   # same class (trivial success)?
652571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      .LOP_INSTANCE_OF_JUMBO_trivial         # yes, trivial finish
652671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_INSTANCE_OF_JUMBO_fullcheck       # no, do full check
6527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
652871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
652971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
653071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_NEW_INSTANCE_JUMBO: /* 0x103 */
653171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_NEW_INSTANCE_JUMBO.S */
6532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
653371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Create a new instance of a class.
6534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
653571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* new-instance/jumbo vBBBB, class@AAAAAAAA */
65369f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
653771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax               # eax<- AAAAAAAA
65389f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- pDvmDex
653971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses
6540f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
654171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%ecx        # ecx<- resolved class
654271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %ecx,%ecx                 # resolved?
654371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_NEW_INSTANCE_JUMBO_resolve       # no, go do it
654471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_JUMBO_resolved:  # on entry, ecx<- class
654571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpb      $CLASS_INITIALIZED,offClassObject_status(%ecx)
654671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_NEW_INSTANCE_JUMBO_initialized
654771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       .LOP_NEW_INSTANCE_JUMBO_needinit
6548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
654971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
655071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
655171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_NEW_ARRAY_JUMBO: /* 0x104 */
655271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_NEW_ARRAY_JUMBO.S */
6553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
655471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Allocate an array of objects, specified with the array class
655571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * and a count.
6556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
655771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * The verifier guarantees that this is an array class, so we don't
655871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * check for it here.
6559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
656071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* new-array/jumbo vBBBB, vCCCC, class@AAAAAAAA */
65619f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
6562f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
65639f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex
656471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%eax                       # eax<- AAAAAAAA
656571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offDvmDex_pResClasses(%ecx),%ecx  # ecx<- pDvmDex->pResClasses
656671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%ecx,%eax,4),%ecx                # ecx<- resolved class
656771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  8(rPC),%eax                       # eax<- CCCC
656871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R %eax %eax                      # eax<- vCCCC (array length)
656971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax
657071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    js      common_errNegativeArraySize       # bail
657171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                         # already resolved?
657271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_NEW_ARRAY_JUMBO_finish                # yes, fast path
657371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_NEW_ARRAY_JUMBO_resolve               # resolve now
6574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
657571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
657671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
657771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_FILLED_NEW_ARRAY_JUMBO: /* 0x105 */
657871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_FILLED_NEW_ARRAY_JUMBO.S */
6579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
658071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Create a new array with elements filled from registers.
6581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
658271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* filled-new-array/jumbo {vCCCC..v(CCCC+BBBB-1)}, type@AAAAAAAA */
65839f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%eax
65849f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%eax),%eax # eax<- pDvmDex
658571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%ecx                       # ecx<- AAAAAAAA
658671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offDvmDex_pResClasses(%eax),%eax  # eax<- pDvmDex->pResClasses
658771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%eax,%ecx,4),%eax                # eax<- resolved class
658871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
658971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                         # already resolved?
659071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_FILLED_NEW_ARRAY_JUMBO_continue              # yes, continue
659171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    # less frequent path, so we'll redo some work
65929f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%eax
659371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $0,OUT_ARG2(%esp)                # arg2<- false
659471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG1(%esp)               # arg1<- AAAAAAAA
65959f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%eax),%eax         # eax<- self->method
659671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_FILLED_NEW_ARRAY_JUMBO_more
6597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
659871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
659971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
660071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_JUMBO: /* 0x106 */
660171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_JUMBO.S */
6602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
660371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field get.
660471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
660571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iget/jumbo, iget-object/jumbo, iget-boolean/jumbo, iget-byte/jumbo,
660671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      iget-char/jumbo, iget-short/jumbo
6607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
660871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
66099f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
661071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%edx                         # edx<- AAAAAAAA
66119f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
661271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  8(rPC),%ecx                         # ecx<- CCCC
661371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
661471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R %ecx %ecx                        # ecx<- fp[CCCC], the object ptr
661571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%eax,%edx,4),%eax                  # resolved entry
661671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # is resolved entry null?
661771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_JUMBO_finish                  # no, already resolved
661871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG1(%esp)                 # needed by dvmResolveInstField
66199f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
662071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_IGET_JUMBO_resolve
6621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
662271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
662371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
662471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_WIDE_JUMBO: /* 0x107 */
662571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_WIDE_JUMBO.S */
6626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
662771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 64-bit instance field get.
6628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
662971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* iget-wide/jumbo vBBBB, vCCCC, field@AAAA */
66309f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
663171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%edx                         # edx<- AAAAAAAA
66329f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
663371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  8(rPC),%ecx                         # ecx<- CCCC
663471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
663571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R %ecx %ecx                        # ecx<- fp[CCCC], the object ptr
663671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%eax,%edx,4),%eax                  # resolved entry
663771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # is resolved entry null?
663871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_WIDE_JUMBO_finish                  # no, already resolved
663971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG1(%esp)                 # for dvmResolveInstField
66409f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
664171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_IGET_WIDE_JUMBO_resolve
664271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
664371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
664471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
664571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_OBJECT_JUMBO: /* 0x108 */
664671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_OBJECT_JUMBO.S */
664771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_JUMBO.S */
664871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
664971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field get.
6650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
665171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iget/jumbo, iget-object/jumbo, iget-boolean/jumbo, iget-byte/jumbo,
665271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      iget-char/jumbo, iget-short/jumbo
6653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
665471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
66559f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
665671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%edx                         # edx<- AAAAAAAA
66579f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
665871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  8(rPC),%ecx                         # ecx<- CCCC
665971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
666071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R %ecx %ecx                        # ecx<- fp[CCCC], the object ptr
666171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%eax,%edx,4),%eax                  # resolved entry
666271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # is resolved entry null?
666371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_OBJECT_JUMBO_finish                  # no, already resolved
666471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG1(%esp)                 # needed by dvmResolveInstField
66659f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
666671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_IGET_OBJECT_JUMBO_resolve
6667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
666971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
667071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
667171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_BOOLEAN_JUMBO: /* 0x109 */
667271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_BOOLEAN_JUMBO.S */
667371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_JUMBO.S */
6674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
667571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field get.
6676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
667771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iget/jumbo, iget-object/jumbo, iget-boolean/jumbo, iget-byte/jumbo,
667871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      iget-char/jumbo, iget-short/jumbo
6679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
668071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
66819f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
668271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%edx                         # edx<- AAAAAAAA
66839f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
668471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  8(rPC),%ecx                         # ecx<- CCCC
668571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
668671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R %ecx %ecx                        # ecx<- fp[CCCC], the object ptr
668771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%eax,%edx,4),%eax                  # resolved entry
668871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # is resolved entry null?
668971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_BOOLEAN_JUMBO_finish                  # no, already resolved
669071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG1(%esp)                 # needed by dvmResolveInstField
66919f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
669271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_IGET_BOOLEAN_JUMBO_resolve
6693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
669471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
669571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
669671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
669771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_BYTE_JUMBO: /* 0x10a */
669871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_BYTE_JUMBO.S */
669971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_JUMBO.S */
6700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
670171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field get.
6702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
670371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iget/jumbo, iget-object/jumbo, iget-boolean/jumbo, iget-byte/jumbo,
670471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      iget-char/jumbo, iget-short/jumbo
6705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
670671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
67079f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
670871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%edx                         # edx<- AAAAAAAA
67099f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
671071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  8(rPC),%ecx                         # ecx<- CCCC
671171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
671271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R %ecx %ecx                        # ecx<- fp[CCCC], the object ptr
671371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%eax,%edx,4),%eax                  # resolved entry
671471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # is resolved entry null?
671571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_BYTE_JUMBO_finish                  # no, already resolved
671671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG1(%esp)                 # needed by dvmResolveInstField
67179f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
671871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_IGET_BYTE_JUMBO_resolve
6719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
672071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
672171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
672271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
672371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_CHAR_JUMBO: /* 0x10b */
672471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_CHAR_JUMBO.S */
672571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_JUMBO.S */
6726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
672771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field get.
6728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
672971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iget/jumbo, iget-object/jumbo, iget-boolean/jumbo, iget-byte/jumbo,
673071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      iget-char/jumbo, iget-short/jumbo
6731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
673271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
67339f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
673471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%edx                         # edx<- AAAAAAAA
67359f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
673671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  8(rPC),%ecx                         # ecx<- CCCC
673771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
673871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R %ecx %ecx                        # ecx<- fp[CCCC], the object ptr
673971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%eax,%edx,4),%eax                  # resolved entry
674071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # is resolved entry null?
674171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_CHAR_JUMBO_finish                  # no, already resolved
674271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG1(%esp)                 # needed by dvmResolveInstField
67439f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
674471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_IGET_CHAR_JUMBO_resolve
6745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
674771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
674871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
674971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_SHORT_JUMBO: /* 0x10c */
675071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_SHORT_JUMBO.S */
675171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_JUMBO.S */
6752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
675371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field get.
675471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
675571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iget/jumbo, iget-object/jumbo, iget-boolean/jumbo, iget-byte/jumbo,
675671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      iget-char/jumbo, iget-short/jumbo
6757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
675871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
67599f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
676071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%edx                         # edx<- AAAAAAAA
67619f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
676271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  8(rPC),%ecx                         # ecx<- CCCC
676371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
676471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R %ecx %ecx                        # ecx<- fp[CCCC], the object ptr
676571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%eax,%edx,4),%eax                  # resolved entry
676671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # is resolved entry null?
676771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_SHORT_JUMBO_finish                  # no, already resolved
676871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG1(%esp)                 # needed by dvmResolveInstField
67699f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
677071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_IGET_SHORT_JUMBO_resolve
677171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
6772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
677371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
677471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
677571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_JUMBO: /* 0x10d */
677671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_JUMBO.S */
6777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
677871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field put.
6779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
678071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iput/jumbo, iput-object/jumbo, iput-boolean/jumbo, iput-byte/jumbo,
678171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao            iput-char/jumbo, iput-short/jumbo
6782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
678371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
67849f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
678571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%edx                         # edx<- AAAAAAAA
67869f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
678771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  8(rPC),%ecx                         # ecx<- CCCC
678871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
678971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R %ecx %ecx                        # ecx<- fp[CCCC], the object ptr
679071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%eax,%edx,4),%eax                  # resolved entry
679171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # is resolved entry null?
679271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_JUMBO_finish                  # no, already resolved
679371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG1(%esp)
67949f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
679571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_IPUT_JUMBO_resolve
6796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
679771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
679871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
679971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_WIDE_JUMBO: /* 0x10e */
680071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_WIDE_JUMBO.S */
680171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
680271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 64-bit instance field put.
680371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
680471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* iput-wide/jumbo vBBBB, vCCCC, field@AAAAAAAA */
68059f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
680671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%edx                         # edx<- AAAAAAAA
68079f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
680871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  8(rPC),%ecx                         # ecx<- CCCC
680971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
681071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R %ecx %ecx                        # ecx<- fp[CCCC], the object ptr
681171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%eax,%edx,4),%eax                  # resolved entry
681271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # is resolved entry null?
681371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_WIDE_JUMBO_finish                  # no, already resolved
681471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG1(%esp)
68159f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
681671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_IPUT_WIDE_JUMBO_resolve
6817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
681871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
681971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
682071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_OBJECT_JUMBO: /* 0x10f */
682171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_OBJECT_JUMBO.S */
682271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
682371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo object field put.
682471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
682571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* iput-object/jumbo vBBBB, vCCCC, field@AAAAAAAA */
68269f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
682771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%edx                         # edx<- AAAAAAAA
68289f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
682971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  8(rPC),%ecx                         # ecx<- CCCC
683071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
683171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R %ecx %ecx                        # ecx<- fp[CCCC], the object ptr
683271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%eax,%edx,4),%eax                  # resolved entry
683371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # is resolved entry null?
683471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_OBJECT_JUMBO_finish                  # no, already resolved
683571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG1(%esp)
68369f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
683771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_IPUT_OBJECT_JUMBO_resolve
683871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
683971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
684071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
684171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_BOOLEAN_JUMBO: /* 0x110 */
684271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_BOOLEAN_JUMBO.S */
684371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_JUMBO.S */
684471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
684571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field put.
684671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
684771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iput/jumbo, iput-object/jumbo, iput-boolean/jumbo, iput-byte/jumbo,
684871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao            iput-char/jumbo, iput-short/jumbo
684971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
685071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
68519f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
685271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%edx                         # edx<- AAAAAAAA
68539f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
685471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  8(rPC),%ecx                         # ecx<- CCCC
685571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
685671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R %ecx %ecx                        # ecx<- fp[CCCC], the object ptr
685771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%eax,%edx,4),%eax                  # resolved entry
685871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # is resolved entry null?
685971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_BOOLEAN_JUMBO_finish                  # no, already resolved
686071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG1(%esp)
68619f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
686271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_IPUT_BOOLEAN_JUMBO_resolve
6863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
686571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
686671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
686771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_BYTE_JUMBO: /* 0x111 */
686871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_BYTE_JUMBO.S */
686971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_JUMBO.S */
6870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
687171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field put.
687271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
687371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iput/jumbo, iput-object/jumbo, iput-boolean/jumbo, iput-byte/jumbo,
687471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao            iput-char/jumbo, iput-short/jumbo
6875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
687671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
68779f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
687871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%edx                         # edx<- AAAAAAAA
68799f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
688071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  8(rPC),%ecx                         # ecx<- CCCC
688171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
688271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R %ecx %ecx                        # ecx<- fp[CCCC], the object ptr
688371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%eax,%edx,4),%eax                  # resolved entry
688471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # is resolved entry null?
688571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_BYTE_JUMBO_finish                  # no, already resolved
688671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG1(%esp)
68879f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
688871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_IPUT_BYTE_JUMBO_resolve
6889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
689171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
689271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
689371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_CHAR_JUMBO: /* 0x112 */
689471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_CHAR_JUMBO.S */
689571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_JUMBO.S */
689671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
689771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field put.
689871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
689971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iput/jumbo, iput-object/jumbo, iput-boolean/jumbo, iput-byte/jumbo,
690071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao            iput-char/jumbo, iput-short/jumbo
690171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
690271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
69039f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
690471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%edx                         # edx<- AAAAAAAA
69059f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
690671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  8(rPC),%ecx                         # ecx<- CCCC
690771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
690871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R %ecx %ecx                        # ecx<- fp[CCCC], the object ptr
690971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%eax,%edx,4),%eax                  # resolved entry
691071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # is resolved entry null?
691171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_CHAR_JUMBO_finish                  # no, already resolved
691271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG1(%esp)
69139f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
691471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_IPUT_CHAR_JUMBO_resolve
6915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
691771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
691871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
691971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_SHORT_JUMBO: /* 0x113 */
692071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_SHORT_JUMBO.S */
692171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_JUMBO.S */
6922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
692371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field put.
692471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
692571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iput/jumbo, iput-object/jumbo, iput-boolean/jumbo, iput-byte/jumbo,
692671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao            iput-char/jumbo, iput-short/jumbo
6927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
692871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
69299f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
693071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%edx                         # edx<- AAAAAAAA
69319f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
693271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  8(rPC),%ecx                         # ecx<- CCCC
693371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
693471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R %ecx %ecx                        # ecx<- fp[CCCC], the object ptr
693571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%eax,%edx,4),%eax                  # resolved entry
693671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # is resolved entry null?
693771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_SHORT_JUMBO_finish                  # no, already resolved
693871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG1(%esp)
69399f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%edx
694071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_IPUT_SHORT_JUMBO_resolve
6941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
694371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
694471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
694571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_JUMBO: /* 0x114 */
694671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_JUMBO.S */
694771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
694871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SGET handler.
694971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
695071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sget/jumbo, sget-object/jumbo, sget-boolean/jumbo, sget-byte/jumbo,
695171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sget-char/jumbo, sget-short/jumbo
695271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
695371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
69549f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
69559f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
695671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax                        # eax<- field ref AAAAAAAA
695771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
695871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
695971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                          # resolved entry null?
696071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_SGET_JUMBO_resolve                # if not, make it so
696171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_JUMBO_finish:     # field ptr in eax
696271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offStaticField_value(%eax),%eax
696371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 4 %edx
696471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 4
696571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST
696671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
6967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
696871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
696971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
697071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_WIDE_JUMBO: /* 0x115 */
697171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_WIDE_JUMBO.S */
6972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
697371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 64-bit SGET handler.
697471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
6975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
697671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* sget-wide/jumbo vBBBB, field@AAAAAAAA */
69779f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
69789f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
697971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax                        # eax<- field ref AAAAAAAA
698071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
698171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
698271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                          # resolved entry null?
698371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_SGET_WIDE_JUMBO_resolve                # if not, make it so
698471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_WIDE_JUMBO_finish:     # field ptr in eax
698571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offStaticField_value(%eax),%ecx    # ecx<- lsw
698671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      4+offStaticField_value(%eax),%eax  # eax<- msw
698771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
698871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
698971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %ecx rINST 0
699071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %eax rINST 1
699171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
6992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
699371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
699471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
699571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_OBJECT_JUMBO: /* 0x116 */
699671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_OBJECT_JUMBO.S */
699771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_JUMBO.S */
699871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
699971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SGET handler.
700071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
700171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sget/jumbo, sget-object/jumbo, sget-boolean/jumbo, sget-byte/jumbo,
700271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sget-char/jumbo, sget-short/jumbo
700371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
700471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
70059f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
70069f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
700771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax                        # eax<- field ref AAAAAAAA
700871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
700971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
701071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                          # resolved entry null?
701171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_SGET_OBJECT_JUMBO_resolve                # if not, make it so
701271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_OBJECT_JUMBO_finish:     # field ptr in eax
701371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offStaticField_value(%eax),%eax
701471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 4 %edx
701571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 4
701671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST
701771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
7018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
702071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
702171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
702271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_BOOLEAN_JUMBO: /* 0x117 */
702371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_BOOLEAN_JUMBO.S */
702471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_JUMBO.S */
702571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
702671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SGET handler.
702771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
702871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sget/jumbo, sget-object/jumbo, sget-boolean/jumbo, sget-byte/jumbo,
702971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sget-char/jumbo, sget-short/jumbo
703071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
703171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
70329f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
70339f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
703471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax                        # eax<- field ref AAAAAAAA
703571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
703671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
703771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                          # resolved entry null?
703871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_SGET_BOOLEAN_JUMBO_resolve                # if not, make it so
703971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_BOOLEAN_JUMBO_finish:     # field ptr in eax
704071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offStaticField_value(%eax),%eax
704171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 4 %edx
704271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 4
704371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST
7044f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
7045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
704771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
704871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
704971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_BYTE_JUMBO: /* 0x118 */
705071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_BYTE_JUMBO.S */
705171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_JUMBO.S */
7052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
705371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SGET handler.
705471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
705571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sget/jumbo, sget-object/jumbo, sget-boolean/jumbo, sget-byte/jumbo,
705671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sget-char/jumbo, sget-short/jumbo
7057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
705871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
70599f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
70609f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
706171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax                        # eax<- field ref AAAAAAAA
706271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
706371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
706471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                          # resolved entry null?
706571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_SGET_BYTE_JUMBO_resolve                # if not, make it so
706671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_BYTE_JUMBO_finish:     # field ptr in eax
706771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offStaticField_value(%eax),%eax
706871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 4 %edx
706971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 4
707071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST
707171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
7072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
707471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
707571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
707671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_CHAR_JUMBO: /* 0x119 */
707771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_CHAR_JUMBO.S */
707871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_JUMBO.S */
707971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
708071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SGET handler.
708171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
708271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sget/jumbo, sget-object/jumbo, sget-boolean/jumbo, sget-byte/jumbo,
708371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sget-char/jumbo, sget-short/jumbo
708471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
708571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
70869f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
70879f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
708871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax                        # eax<- field ref AAAAAAAA
708971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
709071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
709171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                          # resolved entry null?
709271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_SGET_CHAR_JUMBO_resolve                # if not, make it so
709371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_CHAR_JUMBO_finish:     # field ptr in eax
709471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offStaticField_value(%eax),%eax
709571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 4 %edx
709671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 4
709771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST
709871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
7099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
710171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
710271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
710371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_SHORT_JUMBO: /* 0x11a */
710471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_SHORT_JUMBO.S */
710571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_JUMBO.S */
710671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
710771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SGET handler.
710871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
710971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sget/jumbo, sget-object/jumbo, sget-boolean/jumbo, sget-byte/jumbo,
711071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sget-char/jumbo, sget-short/jumbo
711171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
711271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
71139f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
71149f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
711571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax                        # eax<- field ref AAAAAAAA
711671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
711771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
711871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                          # resolved entry null?
711971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_SGET_SHORT_JUMBO_resolve                # if not, make it so
712071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_SHORT_JUMBO_finish:     # field ptr in eax
712171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offStaticField_value(%eax),%eax
712271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 4 %edx
712371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 4
712471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST
7125f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
7126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
712871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
712971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
713071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_JUMBO: /* 0x11b */
713171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_JUMBO.S */
713271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
713371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SPUT handler.
713471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
713571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sput/jumbo, sput-boolean/jumbo, sput-byte/jumbo, sput-char/jumbo,
713671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sput-short/jumbo
713771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
713871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
71399f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
71409f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
714171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax                        # eax<- field ref AAAAAAAA
714271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
714371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
714471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                          # resolved entry null?
714571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_SPUT_JUMBO_resolve                # if not, make it so
714671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_JUMBO_finish:     # field ptr in eax
714771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R  %ecx rINST
714871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 4 %edx
714971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 4
715071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %ecx,offStaticField_value(%eax)
7151f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
7152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
715371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
715471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
715571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_WIDE_JUMBO: /* 0x11c */
715671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_WIDE_JUMBO.S */
715771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
715871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 64-bit SPUT handler.
715971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
716071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* sput-wide/jumbo vBBBB, field@AAAAAAAA */
71619f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
71629f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
716371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax                        # eax<- field ref AAAAAAAA
716471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
716571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
716671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                          # resolved entry null?
716771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_SPUT_WIDE_JUMBO_resolve                # if not, make it so
716871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_WIDE_JUMBO_finish:     # field ptr in eax
716971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_WORD %ecx rINST 0                  # ecx<- lsw
717071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_WORD rINST rINST 1                 # rINST<- msw
717171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 4 %edx
717271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 4
717371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %ecx,offStaticField_value(%eax)
717471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      rINST,4+offStaticField_value(%eax)
7175f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
7176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
717771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
717871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
717971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_OBJECT_JUMBO: /* 0x11d */
718071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_OBJECT_JUMBO.S */
718171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
718271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo SPUT object handler.
7183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
718471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* sput-object/jumbo vBBBB, field@AAAAAAAA */
71859f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
718671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax                        # eax<- field ref AAAAAAAA
71879f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
718871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
718971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField
719071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                          # resolved entry null?
719171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_SPUT_OBJECT_JUMBO_resolve                # if not, make it so
719271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_OBJECT_JUMBO_finish:                              # field ptr in eax
719371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R  %ecx rINST
719471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       .LOP_SPUT_OBJECT_JUMBO_continue
7195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
719671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
719771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
719871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_BOOLEAN_JUMBO: /* 0x11e */
719971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_BOOLEAN_JUMBO.S */
720071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_JUMBO.S */
720171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
720271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SPUT handler.
720371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
720471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sput/jumbo, sput-boolean/jumbo, sput-byte/jumbo, sput-char/jumbo,
720571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sput-short/jumbo
720671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
720771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
72089f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
72099f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
721071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax                        # eax<- field ref AAAAAAAA
721171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
721271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
721371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                          # resolved entry null?
721471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_SPUT_BOOLEAN_JUMBO_resolve                # if not, make it so
721571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_BOOLEAN_JUMBO_finish:     # field ptr in eax
721671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R  %ecx rINST
721771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 4 %edx
721871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 4
721971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %ecx,offStaticField_value(%eax)
7220f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
7221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
722371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
722471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
722571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_BYTE_JUMBO: /* 0x11f */
722671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_BYTE_JUMBO.S */
722771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_JUMBO.S */
7228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
722971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SPUT handler.
723071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
723171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sput/jumbo, sput-boolean/jumbo, sput-byte/jumbo, sput-char/jumbo,
723271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sput-short/jumbo
7233f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee     */
723471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
72359f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
72369f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
723771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax                        # eax<- field ref AAAAAAAA
723871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
723971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
724071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                          # resolved entry null?
724171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_SPUT_BYTE_JUMBO_resolve                # if not, make it so
724271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_BYTE_JUMBO_finish:     # field ptr in eax
724371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R  %ecx rINST
724471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 4 %edx
724571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 4
724671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %ecx,offStaticField_value(%eax)
7247f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
7248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
725071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
725171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
725271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_CHAR_JUMBO: /* 0x120 */
725371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_CHAR_JUMBO.S */
725471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_JUMBO.S */
7255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
725671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SPUT handler.
725771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
725871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sput/jumbo, sput-boolean/jumbo, sput-byte/jumbo, sput-char/jumbo,
725971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sput-short/jumbo
7260f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee     */
726171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
72629f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
72639f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
726471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax                        # eax<- field ref AAAAAAAA
726571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
726671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
726771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                          # resolved entry null?
726871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_SPUT_CHAR_JUMBO_resolve                # if not, make it so
726971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_CHAR_JUMBO_finish:     # field ptr in eax
727071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R  %ecx rINST
727171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 4 %edx
727271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 4
727371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %ecx,offStaticField_value(%eax)
7274f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
7275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
727771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
727871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
727971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_SHORT_JUMBO: /* 0x121 */
728071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_SHORT_JUMBO.S */
728171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_JUMBO.S */
728271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
728371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SPUT handler.
728471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
728571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sput/jumbo, sput-boolean/jumbo, sput-byte/jumbo, sput-char/jumbo,
728671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sput-short/jumbo
728771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
728871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
72899f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
72909f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
729171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax                        # eax<- field ref AAAAAAAA
729271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
729371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
729471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                          # resolved entry null?
729571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_SPUT_SHORT_JUMBO_resolve                # if not, make it so
729671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_SHORT_JUMBO_finish:     # field ptr in eax
729771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R  %ecx rINST
729871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 4 %edx
729971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 4
730071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %ecx,offStaticField_value(%eax)
730171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
7302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
730471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
730571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
730671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_INVOKE_VIRTUAL_JUMBO: /* 0x122 */
730771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_INVOKE_VIRTUAL_JUMBO.S */
7308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
730971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Handle a jumbo virtual method call.
7310f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee     */
731171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* invoke-virtual/jumbo vBBBB, {vCCCC..v(CCCC+BBBB-1)}, meth@AAAAAAAA */
73129f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%eax
731371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%ecx                 # ecx<- AAAAAAAA
73149f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%eax),%eax  # eax<- pDvmDex
7315f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
731671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResMethods(%eax),%eax   # eax<- pDvmDex->pResMethods
731771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%eax,%ecx,4),%eax          # eax<- resolved baseMethod
731871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                   # already resolved?
731971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne       .LOP_INVOKE_VIRTUAL_JUMBO_continue        # yes, continue
73209f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%eax
732171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %ecx,OUT_ARG1(%esp)         # arg1<- ref
73229f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_method(%eax),%eax   # eax<- self->method
732371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       .LOP_INVOKE_VIRTUAL_JUMBO_more
7324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
732571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
732671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
732771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_INVOKE_SUPER_JUMBO: /* 0x123 */
732871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_INVOKE_SUPER_JUMBO.S */
7329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
733071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Handle a jumbo "super" method call.
7331f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee     */
733271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* invoke-super/jumbo {vCCCC..v(CCCC+BBBB-1)}, meth@AAAAAAAA */
73339f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,rINST
733471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax               # eax<- AAAAAAAA
73359f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(rINST),%ecx # ecx<- pDvmDex
733671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
733771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods
733871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%ecx        # ecx<- resolved baseMethod
73399f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_method(rINST),%eax # eax<- method
734071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl    8(rPC),rINST              # rINST<- CCCC
734171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R  rINST rINST             # rINST<- "this" ptr
734271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     rINST,rINST               # null "this"?
734371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        common_errNullObject      # yes, throw
734471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offMethod_clazz(%eax),%eax # eax<- method->clazz
734571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %ecx,%ecx                 # already resolved?
734671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne       .LOP_INVOKE_SUPER_JUMBO_continue      # yes - go on
734771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       .LOP_INVOKE_SUPER_JUMBO_resolve
7348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
734971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
735071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
735171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_INVOKE_DIRECT_JUMBO: /* 0x124 */
735271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_INVOKE_DIRECT_JUMBO.S */
735371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
735471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Handle a jumbo direct method call.
735571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
735671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * (We could defer the "is 'this' pointer null" test to the common
735771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * method invocation code, and use a flag to indicate that static
735871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * calls don't count.  If we do this as part of copying the arguments
735971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * out we could avoiding loading the first arg twice.)
736071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
736171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* invoke-direct/jumbo {vCCCC..v(CCCC+BBBB-1)}, meth@AAAAAAAA */
73629f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
736371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax              # eax<- AAAAAAAA
73649f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex
736571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
736671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResMethods(%ecx),%ecx  # ecx<- pDvmDex->pResMethods
736771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl    8(rPC),%edx              # edx<- CCCC
736871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax       # eax<- resolved methodToCall
736971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                # already resolved?
737071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R  %ecx %edx              # ecx<- "this" ptr
737171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_INVOKE_DIRECT_JUMBO_resolve      # not resolved, do it now
737271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_DIRECT_JUMBO_finish:
737371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %ecx,%ecx                # null "this"?
737471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne       common_invokeMethodJumbo # no, continue on
737571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       common_errNullObject
7376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
737771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
737871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
737971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_INVOKE_STATIC_JUMBO: /* 0x125 */
738071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_INVOKE_STATIC_JUMBO.S */
738171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
738271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Handle a jumbo static method call.
738371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
738471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* invoke-static/jumbo {vCCCC..v(CCCC+BBBB-1)}, meth@AAAAAAAA */
73859f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
738671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax               # eax<- AAAAAAAA
73879f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex
7388f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
738971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offDvmDex_pResMethods(%ecx),%ecx  # ecx<- pDvmDex->pResMethods
739071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax        # eax<- resolved methodToCall
739171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax
739271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne       common_invokeMethodJumbo
73939f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
73949f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_method(%ecx),%ecx # ecx<- self->method
739571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      2(rPC),%eax               # eax<- AAAAAAAA
739671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offMethod_clazz(%ecx),%ecx# ecx<- method->clazz
739771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %eax,OUT_ARG1(%esp)       # arg1<- AAAAAAAA
739871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %ecx,OUT_ARG0(%esp)       # arg0<- clazz
739971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       .LOP_INVOKE_STATIC_JUMBO_continue
7400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
740171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
740271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
740371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_INVOKE_INTERFACE_JUMBO: /* 0x126 */
740471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_INVOKE_INTERFACE_JUMBO.S */
7405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
740671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Handle a jumbo interface method call.
7407f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee     */
740871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* invoke-interface/jumbo {vCCCC..v(CCCC+BBBB-1)}, meth@AAAAAAAA */
740971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl     8(rPC),%eax              # eax<- CCCC
74109f601a917c8878204482c37aec7005054b6776fabuzbee    movl       rSELF,%ecx
741171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R   %eax %eax              # eax<- "this"
741271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
741371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl      %eax,%eax                # null this?
741471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je         common_errNullObject     # yes, fail
741571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl       offObject_clazz(%eax),%eax# eax<- thisPtr->clazz
741671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl       %eax,OUT_ARG0(%esp)                 # arg0<- class
74179f601a917c8878204482c37aec7005054b6776fabuzbee    movl       offThread_methodClassDex(%ecx),%eax   # eax<- methodClassDex
74189f601a917c8878204482c37aec7005054b6776fabuzbee    movl       offThread_method(%ecx),%ecx           # ecx<- method
741971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl       %eax,OUT_ARG3(%esp)                 # arg3<- dex
742071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl       2(rPC),%eax                         # eax<- AAAAAAAA
742171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl       %ecx,OUT_ARG2(%esp)                 # arg2<- method
742271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl       %eax,OUT_ARG1(%esp)                 # arg1<- AAAAAAAA
742371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp        .LOP_INVOKE_INTERFACE_JUMBO_continue
7424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
742571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
742671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
742771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_27FF: /* 0x127 */
742871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_27FF.S */
742971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
743071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
743371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
743471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
743571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_28FF: /* 0x128 */
743671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_28FF.S */
743771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
743871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
744171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
744271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
744371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_29FF: /* 0x129 */
744471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_29FF.S */
744571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
744671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
744971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
745071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
745171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_2AFF: /* 0x12a */
745271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_2AFF.S */
745371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
745471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
745771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
745871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
745971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_2BFF: /* 0x12b */
746071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_2BFF.S */
746171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
746271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
746571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
746671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
746771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_2CFF: /* 0x12c */
746871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_2CFF.S */
746971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
747071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
747371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
747471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
747571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_2DFF: /* 0x12d */
747671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_2DFF.S */
747771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
747871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
748171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
748271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
748371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_2EFF: /* 0x12e */
748471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_2EFF.S */
748571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
748671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
748971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
749071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
749171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_2FFF: /* 0x12f */
749271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_2FFF.S */
749371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
749471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
749771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
749871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
749971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_30FF: /* 0x130 */
750071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_30FF.S */
750171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
750271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
750571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
750671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
750771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_31FF: /* 0x131 */
750871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_31FF.S */
750971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
751071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
751371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
751471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
751571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_32FF: /* 0x132 */
751671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_32FF.S */
751771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
751871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
752171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
752271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
752371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_33FF: /* 0x133 */
752471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_33FF.S */
752571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
752671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
752971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
753071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
753171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_34FF: /* 0x134 */
753271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_34FF.S */
753371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
753471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
753771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
753871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
753971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_35FF: /* 0x135 */
754071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_35FF.S */
754171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
754271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
754571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
754671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
754771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_36FF: /* 0x136 */
754871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_36FF.S */
754971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
755071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
755371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
755471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
755571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_37FF: /* 0x137 */
755671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_37FF.S */
755771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
755871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
756171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
756271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
756371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_38FF: /* 0x138 */
756471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_38FF.S */
756571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
756671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
756971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
757071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
757171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_39FF: /* 0x139 */
757271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_39FF.S */
757371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
757471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
757771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
757871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
757971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_3AFF: /* 0x13a */
758071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_3AFF.S */
758171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
758271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
758571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
758671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
758771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_3BFF: /* 0x13b */
758871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_3BFF.S */
758971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
759071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
759371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
759471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
759571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_3CFF: /* 0x13c */
759671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_3CFF.S */
759771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
759871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
760171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
760271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
760371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_3DFF: /* 0x13d */
760471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_3DFF.S */
760571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
760671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
760971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
761071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
761171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_3EFF: /* 0x13e */
761271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_3EFF.S */
761371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
761471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
761771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
761871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
761971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_3FFF: /* 0x13f */
762071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_3FFF.S */
762171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
762271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
762571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
762671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
762771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_40FF: /* 0x140 */
762871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_40FF.S */
762971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
763071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
763371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
763471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
763571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_41FF: /* 0x141 */
763671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_41FF.S */
763771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
763871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
764171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
764271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
764371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_42FF: /* 0x142 */
764471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_42FF.S */
764571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
764671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
76483d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
764971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
765071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
765171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_43FF: /* 0x143 */
765271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_43FF.S */
765371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
765471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
76553d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
7656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
765771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
765871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
765971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_44FF: /* 0x144 */
766071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_44FF.S */
766171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
766271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
766571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
766671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
766771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_45FF: /* 0x145 */
766871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_45FF.S */
766971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
767071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
767371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
767471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
767571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_46FF: /* 0x146 */
767671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_46FF.S */
767771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
767871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
768171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
768271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
768371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_47FF: /* 0x147 */
768471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_47FF.S */
768571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
768671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
768971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
769071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
769171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_48FF: /* 0x148 */
769271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_48FF.S */
769371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
769471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
769771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
769871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
769971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_49FF: /* 0x149 */
770071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_49FF.S */
770171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
770271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
770571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
770671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
770771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_4AFF: /* 0x14a */
770871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_4AFF.S */
770971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
771071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7711c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
7712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
771371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
771471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
771571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_4BFF: /* 0x14b */
771671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_4BFF.S */
771771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
771871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
772171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
772271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
772371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_4CFF: /* 0x14c */
772471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_4CFF.S */
772571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
772671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
772971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
773071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
773171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_4DFF: /* 0x14d */
773271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_4DFF.S */
773371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
773471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
773771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
773871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
773971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_4EFF: /* 0x14e */
774071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_4EFF.S */
774171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
774271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
774571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
774671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
774771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_4FFF: /* 0x14f */
774871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_4FFF.S */
774971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
775071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
775371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
775471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
775571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_50FF: /* 0x150 */
775671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_50FF.S */
775771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
775871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
776171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
776271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
776371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_51FF: /* 0x151 */
776471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_51FF.S */
776571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
776671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7768c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
776971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
777071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
777171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_52FF: /* 0x152 */
777271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_52FF.S */
777371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
777471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
777771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
777871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
777971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_53FF: /* 0x153 */
778071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_53FF.S */
778171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
778271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
778571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
778671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
778771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_54FF: /* 0x154 */
778871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_54FF.S */
778971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
779071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
779371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
779471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
779571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_55FF: /* 0x155 */
779671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_55FF.S */
779771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
779871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
780171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
780271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
780371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_56FF: /* 0x156 */
780471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_56FF.S */
780571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
780671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
780971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
781071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
781171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_57FF: /* 0x157 */
781271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_57FF.S */
781371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
781471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
7815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
781771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
781871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
781971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_58FF: /* 0x158 */
782071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_58FF.S */
782171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
782271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
782371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
782471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
782571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
782671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
782771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_59FF: /* 0x159 */
782871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_59FF.S */
782971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
783071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
783171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
783271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
783371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
783471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
783571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_5AFF: /* 0x15a */
783671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_5AFF.S */
783771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
783871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
783971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
784071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
784171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
784271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
784371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_5BFF: /* 0x15b */
784471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_5BFF.S */
784571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
784671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
784771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
784871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
784971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
785071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
785171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_5CFF: /* 0x15c */
785271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_5CFF.S */
785371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
785471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
785571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
785671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
785771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
785871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
785971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_5DFF: /* 0x15d */
786071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_5DFF.S */
786171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
786271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
786371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
786471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
786571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
786671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
786771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_5EFF: /* 0x15e */
786871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_5EFF.S */
786971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
787071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
787171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
787271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
787371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
787471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
787571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_5FFF: /* 0x15f */
787671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_5FFF.S */
787771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
787871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
787971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
788071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
788171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
788271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
788371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_60FF: /* 0x160 */
788471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_60FF.S */
788571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
788671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
788771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
788871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
788971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
789071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
789171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_61FF: /* 0x161 */
789271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_61FF.S */
789371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
789471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
789571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
789671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
789771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
789871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
789971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_62FF: /* 0x162 */
790071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_62FF.S */
790171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
790271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
790371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
790471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
790571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
790671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
790771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_63FF: /* 0x163 */
790871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_63FF.S */
790971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
791071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
791171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
791271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
791371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
791471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
791571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_64FF: /* 0x164 */
791671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_64FF.S */
791771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
791871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
791971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
792071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
792171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
792271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
792371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_65FF: /* 0x165 */
792471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_65FF.S */
792571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
792671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
792771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
792871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
792971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
793071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
793171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_66FF: /* 0x166 */
793271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_66FF.S */
793371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
793471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
793571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
793671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
793771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
793871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
793971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_67FF: /* 0x167 */
794071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_67FF.S */
794171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
794271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
794371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
794471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
794571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
794671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
794771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_68FF: /* 0x168 */
794871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_68FF.S */
794971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
795071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
795171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
795271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
795371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
795471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
795571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_69FF: /* 0x169 */
795671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_69FF.S */
795771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
795871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
795971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
796071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
796171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
796271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
796371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_6AFF: /* 0x16a */
796471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_6AFF.S */
796571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
796671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
796771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
796871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
796971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
797071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
797171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_6BFF: /* 0x16b */
797271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_6BFF.S */
797371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
797471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
797571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
797671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
797771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
797871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
797971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_6CFF: /* 0x16c */
798071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_6CFF.S */
798171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
798271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
798371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
798471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
798571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
798671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
798771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_6DFF: /* 0x16d */
798871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_6DFF.S */
798971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
799071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
799171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
799271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
799371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
799471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
799571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_6EFF: /* 0x16e */
799671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_6EFF.S */
799771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
799871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
799971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
800071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
800171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
800271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
800371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_6FFF: /* 0x16f */
800471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_6FFF.S */
800571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
800671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
800771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
800871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
800971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
801071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
801171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_70FF: /* 0x170 */
801271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_70FF.S */
801371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
801471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
801571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
801671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
801771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
801871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
801971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_71FF: /* 0x171 */
802071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_71FF.S */
802171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
802271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
802371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
802471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
802571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
802671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
802771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_72FF: /* 0x172 */
802871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_72FF.S */
802971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
803071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
803171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
803271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
803371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
803471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
803571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_73FF: /* 0x173 */
803671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_73FF.S */
803771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
803871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
803971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
804071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
804171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
804271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
804371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_74FF: /* 0x174 */
804471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_74FF.S */
804571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
804671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
804771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
804871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
804971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
805071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
805171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_75FF: /* 0x175 */
805271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_75FF.S */
805371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
805471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
805571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
805671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
805771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
805871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
805971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_76FF: /* 0x176 */
806071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_76FF.S */
806171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
806271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
806371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
806471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
806571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
806671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
806771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_77FF: /* 0x177 */
806871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_77FF.S */
806971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
807071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
807171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
807271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
807371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
807471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
807571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_78FF: /* 0x178 */
807671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_78FF.S */
807771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
807871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
807971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
808071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
808171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
808271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
808371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_79FF: /* 0x179 */
808471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_79FF.S */
808571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
808671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
808771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
808871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
808971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
809071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
809171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_7AFF: /* 0x17a */
809271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_7AFF.S */
809371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
809471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
809571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
809671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
809771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
809871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
809971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_7BFF: /* 0x17b */
810071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_7BFF.S */
810171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
810271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
810371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
810471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
810571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
810671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
810771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_7CFF: /* 0x17c */
810871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_7CFF.S */
810971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
811071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
811171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
811271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
811371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
811471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
811571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_7DFF: /* 0x17d */
811671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_7DFF.S */
811771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
811871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
811971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
812071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
812171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
812271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
812371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_7EFF: /* 0x17e */
812471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_7EFF.S */
812571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
812671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
812771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
812871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
812971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
813071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
813171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_7FFF: /* 0x17f */
813271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_7FFF.S */
813371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
813471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
813571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
813671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
813771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
813871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
813971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_80FF: /* 0x180 */
814071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_80FF.S */
814171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
814271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
814371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
814471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
814571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
814671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
814771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_81FF: /* 0x181 */
814871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_81FF.S */
814971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
815071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
815171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
815271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
815371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
815471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
815571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_82FF: /* 0x182 */
815671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_82FF.S */
815771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
815871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
815971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
816071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
816171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
816271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
816371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_83FF: /* 0x183 */
816471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_83FF.S */
816571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
816671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
816771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
816871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
816971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
817071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
817171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_84FF: /* 0x184 */
817271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_84FF.S */
817371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
817471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
817571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
817671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
817771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
817871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
817971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_85FF: /* 0x185 */
818071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_85FF.S */
818171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
818271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
818371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
818471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
818571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
818671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
818771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_86FF: /* 0x186 */
818871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_86FF.S */
818971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
819071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
819171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
819271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
819371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
819471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
819571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_87FF: /* 0x187 */
819671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_87FF.S */
819771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
819871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
819971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
820071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
820171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
820271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
820371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_88FF: /* 0x188 */
820471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_88FF.S */
820571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
820671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
820771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
820871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
820971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
821071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
821171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_89FF: /* 0x189 */
821271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_89FF.S */
821371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
821471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
821571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
821671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
821771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
821871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
821971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_8AFF: /* 0x18a */
822071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_8AFF.S */
822171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
822271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
822371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
822471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
822571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
822671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
822771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_8BFF: /* 0x18b */
822871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_8BFF.S */
822971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
823071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
823171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
823271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
823371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
823471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
823571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_8CFF: /* 0x18c */
823671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_8CFF.S */
823771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
823871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
823971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
824071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
824171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
824271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
824371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_8DFF: /* 0x18d */
824471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_8DFF.S */
824571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
824671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
824771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
824871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
824971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
825071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
825171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_8EFF: /* 0x18e */
825271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_8EFF.S */
825371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
825471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
825571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
825671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
825771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
825871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
825971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_8FFF: /* 0x18f */
826071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_8FFF.S */
826171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
826271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
826371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
826471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
826571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
826671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
826771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_90FF: /* 0x190 */
826871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_90FF.S */
826971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
827071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
827171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
827271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
827371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
827471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
827571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_91FF: /* 0x191 */
827671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_91FF.S */
827771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
827871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
827971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
828071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
828171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
828271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
828371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_92FF: /* 0x192 */
828471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_92FF.S */
828571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
828671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
828771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
828871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
828971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
829071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
829171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_93FF: /* 0x193 */
829271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_93FF.S */
829371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
829471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
829571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
829671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
829771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
829871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
829971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_94FF: /* 0x194 */
830071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_94FF.S */
830171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
830271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
830371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
830471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
830571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
830671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
830771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_95FF: /* 0x195 */
830871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_95FF.S */
830971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
831071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
831171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
831271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
831371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
831471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
831571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_96FF: /* 0x196 */
831671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_96FF.S */
831771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
831871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
831971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
832071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
832171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
832271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
832371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_97FF: /* 0x197 */
832471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_97FF.S */
832571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
832671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
832771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
832871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
832971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
833071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
833171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_98FF: /* 0x198 */
833271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_98FF.S */
833371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
833471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
833571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
833671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
833771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
833871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
833971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_99FF: /* 0x199 */
834071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_99FF.S */
834171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
834271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
834371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
834471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
834571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
834671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
834771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_9AFF: /* 0x19a */
834871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_9AFF.S */
834971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
835071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
835171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
835271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
835371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
835471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
835571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_9BFF: /* 0x19b */
835671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_9BFF.S */
835771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
835871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
835971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
836071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
836171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
836271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
836371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_9CFF: /* 0x19c */
836471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_9CFF.S */
836571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
836671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
836771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
836871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
836971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
837071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
837171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_9DFF: /* 0x19d */
837271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_9DFF.S */
837371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
837471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
837571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
837671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
837771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
837871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
837971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_9EFF: /* 0x19e */
838071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_9EFF.S */
838171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
838271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
838371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
838471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
838571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
838671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
838771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_9FFF: /* 0x19f */
838871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_9FFF.S */
838971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
839071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
839171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
839271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
839371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
839471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
839571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A0FF: /* 0x1a0 */
839671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_A0FF.S */
839771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
839871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
839971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
840071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
840171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
840271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
840371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A1FF: /* 0x1a1 */
840471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_A1FF.S */
840571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
840671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
840771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
840871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
840971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
841071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
841171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A2FF: /* 0x1a2 */
841271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_A2FF.S */
841371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
841471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
841571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
841671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
841771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
841871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
841971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A3FF: /* 0x1a3 */
842071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_A3FF.S */
842171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
842271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
842371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
842471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
842571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
842671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
842771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A4FF: /* 0x1a4 */
842871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_A4FF.S */
842971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
843071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
843171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
843271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
843371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
843471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
843571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A5FF: /* 0x1a5 */
843671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_A5FF.S */
843771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
843871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
843971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
844071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
844171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
844271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
844371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A6FF: /* 0x1a6 */
844471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_A6FF.S */
844571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
844671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
844771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
844871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
844971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
845071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
845171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A7FF: /* 0x1a7 */
845271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_A7FF.S */
845371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
845471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
845571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
845671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
845771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
845871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
845971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A8FF: /* 0x1a8 */
846071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_A8FF.S */
846171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
846271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
846371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
846471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
846571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
846671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
846771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A9FF: /* 0x1a9 */
846871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_A9FF.S */
846971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
847071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
847171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
847271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
847371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
847471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
847571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_AAFF: /* 0x1aa */
847671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_AAFF.S */
847771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
847871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
847971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
848071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
848171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
848271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
848371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_ABFF: /* 0x1ab */
848471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_ABFF.S */
848571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
848671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
848771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
848871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
848971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
849071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
849171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_ACFF: /* 0x1ac */
849271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_ACFF.S */
849371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
849471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
849571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
849671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
849771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
849871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
849971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_ADFF: /* 0x1ad */
850071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_ADFF.S */
850171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
850271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
850371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
850471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
850571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
850671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
850771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_AEFF: /* 0x1ae */
850871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_AEFF.S */
850971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
851071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
851171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
851271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
851371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
851471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
851571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_AFFF: /* 0x1af */
851671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_AFFF.S */
851771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
851871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
851971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
852071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
852171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
852271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
852371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B0FF: /* 0x1b0 */
852471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_B0FF.S */
852571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
852671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
852771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
852871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
852971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
853071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
853171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B1FF: /* 0x1b1 */
853271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_B1FF.S */
853371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
853471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
853571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
853671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
853771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
853871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
853971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B2FF: /* 0x1b2 */
854071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_B2FF.S */
854171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
854271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
854371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
854471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
854571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
854671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
854771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B3FF: /* 0x1b3 */
854871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_B3FF.S */
854971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
855071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
855171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
855271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
855371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
855471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
855571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B4FF: /* 0x1b4 */
855671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_B4FF.S */
855771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
855871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
855971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
856071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
856171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
856271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
856371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B5FF: /* 0x1b5 */
856471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_B5FF.S */
856571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
856671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
856771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
856871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
856971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
857071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
857171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B6FF: /* 0x1b6 */
857271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_B6FF.S */
857371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
857471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
857571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
857671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
857771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
857871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
857971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B7FF: /* 0x1b7 */
858071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_B7FF.S */
858171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
858271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
858371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
858471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
858571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
858671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
858771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B8FF: /* 0x1b8 */
858871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_B8FF.S */
858971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
859071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
859171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
859271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
859371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
859471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
859571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B9FF: /* 0x1b9 */
859671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_B9FF.S */
859771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
859871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
859971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
860071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
860171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
860271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
860371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_BAFF: /* 0x1ba */
860471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_BAFF.S */
860571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
860671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
860771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
860871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
860971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
861071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
861171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_BBFF: /* 0x1bb */
861271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_BBFF.S */
861371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
861471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
861571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
861671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
861771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
861871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
861971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_BCFF: /* 0x1bc */
862071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_BCFF.S */
862171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
862271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
862371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
862471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
862571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
862671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
862771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_BDFF: /* 0x1bd */
862871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_BDFF.S */
862971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
863071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
863171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
863271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
863371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
863471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
863571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_BEFF: /* 0x1be */
863671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_BEFF.S */
863771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
863871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
863971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
864071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
864171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
864271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
864371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_BFFF: /* 0x1bf */
864471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_BFFF.S */
864571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
864671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
864771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
864871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
864971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
865071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
865171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C0FF: /* 0x1c0 */
865271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_C0FF.S */
865371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
865471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
865571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
865671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
865771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
865871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
865971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C1FF: /* 0x1c1 */
866071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_C1FF.S */
866171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
866271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
866371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
866471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
866571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
866671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
866771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C2FF: /* 0x1c2 */
866871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_C2FF.S */
866971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
867071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
867171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
867271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
867371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
867471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
867571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C3FF: /* 0x1c3 */
867671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_C3FF.S */
867771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
867871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
867971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
868071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
868171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
868271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
868371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C4FF: /* 0x1c4 */
868471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_C4FF.S */
868571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
868671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
868771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
868871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
868971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
869071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
869171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C5FF: /* 0x1c5 */
869271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_C5FF.S */
869371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
869471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
869571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
869671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
869771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
869871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
869971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C6FF: /* 0x1c6 */
870071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_C6FF.S */
870171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
870271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
870371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
870471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
870571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
870671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
870771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C7FF: /* 0x1c7 */
870871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_C7FF.S */
870971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
871071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
871171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
871271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
871371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
871471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
871571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C8FF: /* 0x1c8 */
871671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_C8FF.S */
871771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
871871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
871971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
872071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
872171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
872271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
872371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C9FF: /* 0x1c9 */
872471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_C9FF.S */
872571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
872671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
872771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
872871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
872971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
873071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
873171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_CAFF: /* 0x1ca */
873271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_CAFF.S */
873371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
873471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
873571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
873671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
873771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
873871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
873971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_CBFF: /* 0x1cb */
874071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_CBFF.S */
874171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
874271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
874371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
874471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
874571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
874671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
874771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_CCFF: /* 0x1cc */
874871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_CCFF.S */
874971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
875071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
875171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
875271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
875371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
875471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
875571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_CDFF: /* 0x1cd */
875671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_CDFF.S */
875771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
875871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
875971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
876071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
876171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
876271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
876371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_CEFF: /* 0x1ce */
876471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_CEFF.S */
876571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
876671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
876771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
876871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
876971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
877071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
877171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_CFFF: /* 0x1cf */
877271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_CFFF.S */
877371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
877471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
877571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
877671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
877771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
877871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
877971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D0FF: /* 0x1d0 */
878071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_D0FF.S */
878171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
878271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
878371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
878471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
878571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
878671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
878771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D1FF: /* 0x1d1 */
878871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_D1FF.S */
878971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
879071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
879171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
879271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
879371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
879471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
879571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D2FF: /* 0x1d2 */
879671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_D2FF.S */
879771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
879871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
879971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
880071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
880171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
880271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
880371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D3FF: /* 0x1d3 */
880471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_D3FF.S */
880571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
880671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
880771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
880871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
880971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
881071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
881171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D4FF: /* 0x1d4 */
881271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_D4FF.S */
881371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
881471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
881571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
881671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
881771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
881871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
881971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D5FF: /* 0x1d5 */
882071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_D5FF.S */
882171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
882271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
882371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
882471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
882571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
882671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
882771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D6FF: /* 0x1d6 */
882871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_D6FF.S */
882971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
883071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
883171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
883271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
883371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
883471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
883571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D7FF: /* 0x1d7 */
883671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_D7FF.S */
883771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
883871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
883971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
884071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
884171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
884271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
884371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D8FF: /* 0x1d8 */
884471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_D8FF.S */
884571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
884671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
884771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
884871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
884971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
885071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
885171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D9FF: /* 0x1d9 */
885271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_D9FF.S */
885371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
885471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
885571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
885671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
885771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
885871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
885971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_DAFF: /* 0x1da */
886071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_DAFF.S */
886171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
886271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
886371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
886471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
886571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
886671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
886771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_DBFF: /* 0x1db */
886871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_DBFF.S */
886971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
887071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
887171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
887271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
887371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
887471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
887571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_DCFF: /* 0x1dc */
887671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_DCFF.S */
887771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
887871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
887971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
888071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
888171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
888271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
888371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_DDFF: /* 0x1dd */
888471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_DDFF.S */
888571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
888671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
888771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
888871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
888971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
889071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
889171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_DEFF: /* 0x1de */
889271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_DEFF.S */
889371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
889471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
889571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
889671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
889771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
889871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
889971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_DFFF: /* 0x1df */
890071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_DFFF.S */
890171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
890271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
890371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
890471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
890571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
890671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
890771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E0FF: /* 0x1e0 */
890871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_E0FF.S */
890971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
891071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
891171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
891271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
891371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
891471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
891571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E1FF: /* 0x1e1 */
891671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_E1FF.S */
891771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
891871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
891971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
892071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
892171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
892271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
892371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E2FF: /* 0x1e2 */
892471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_E2FF.S */
892571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
892671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
892771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
892871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
892971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
893071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
893171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E3FF: /* 0x1e3 */
893271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_E3FF.S */
893371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
893471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
893571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
893671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
893771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
893871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
893971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E4FF: /* 0x1e4 */
894071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_E4FF.S */
894171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
894271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
894371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
894471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
894571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
894671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
894771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E5FF: /* 0x1e5 */
894871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_E5FF.S */
894971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
895071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
895171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
895271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
895371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
895471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
895571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E6FF: /* 0x1e6 */
895671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_E6FF.S */
895771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
895871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
895971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
896071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
896171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
896271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
896371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E7FF: /* 0x1e7 */
896471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_E7FF.S */
896571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
896671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
896771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
896871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
896971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
897071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
897171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E8FF: /* 0x1e8 */
897271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_E8FF.S */
897371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
897471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
897571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
897671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
897771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
897871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
897971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E9FF: /* 0x1e9 */
898071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_E9FF.S */
898171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
898271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
898371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
898471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
898571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
898671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
898771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_EAFF: /* 0x1ea */
898871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_EAFF.S */
898971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
899071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
899171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
899271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
899371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
899471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
899571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_EBFF: /* 0x1eb */
899671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_EBFF.S */
899771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
899871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
899971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
900071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
900171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
900271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
900371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_ECFF: /* 0x1ec */
900471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_ECFF.S */
900571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
900671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
900771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
900871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
900971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
901071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
901171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_EDFF: /* 0x1ed */
901271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_EDFF.S */
901371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
901471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
901571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
901671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
901771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
901871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
901971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_EEFF: /* 0x1ee */
902071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_EEFF.S */
902171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
902271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
902371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
902471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
902571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
902671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
902771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_EFFF: /* 0x1ef */
902871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_EFFF.S */
902971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
903071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
903171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
903271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
903371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
903471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
903571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F0FF: /* 0x1f0 */
903671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_F0FF.S */
903771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
903871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
903971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
904071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
904171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
904271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
904371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F1FF: /* 0x1f1 */
904471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_F1FF.S */
904571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
904671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
904771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
904871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
904971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
905071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
905171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F2FF: /* 0x1f2 */
905271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_F2FF.S */
905371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
905471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
905571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
905671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
905771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
905871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
905971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F3FF: /* 0x1f3 */
906071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_F3FF.S */
906171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
906271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
906371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
906471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
906571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
906671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
906771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F4FF: /* 0x1f4 */
906871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_F4FF.S */
906971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
907071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
907171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
907271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
907371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
907471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
907571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F5FF: /* 0x1f5 */
907671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_F5FF.S */
907771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
907871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
907971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
908071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
908171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
908271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
908371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F6FF: /* 0x1f6 */
908471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_F6FF.S */
908571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
908671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
908771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
908871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
908971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
909071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
909171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F7FF: /* 0x1f7 */
909271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_F7FF.S */
909371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
909471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
909571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
909671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
909771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
909871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
909971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F8FF: /* 0x1f8 */
910071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_F8FF.S */
910171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
910271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
910371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
910471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
910571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
910671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
910771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F9FF: /* 0x1f9 */
910871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_F9FF.S */
910971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
911071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
911171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
911271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
911371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
911471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
911571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_FAFF: /* 0x1fa */
911671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_FAFF.S */
911771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
911871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
911971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
912071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
912171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
912271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
912371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_FBFF: /* 0x1fb */
912471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_FBFF.S */
912571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
912671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
912771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
912871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
912971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
913071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
913171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_FCFF: /* 0x1fc */
913271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_FCFF.S */
913371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
913471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
913571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
913671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
913771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
913871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
913971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_FDFF: /* 0x1fd */
914071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_FDFF.S */
914171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
914271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
914371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
914471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
914571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
914671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
914771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_FEFF: /* 0x1fe */
914871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_FEFF.S */
914971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */
915071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_abort
915171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
915271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
915371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
915471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
915571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_THROW_VERIFICATION_ERROR_JUMBO: /* 0x1ff */
915671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_THROW_VERIFICATION_ERROR_JUMBO.S */
915771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
915871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Handle a jumbo throw-verification-error instruction.  This throws an
915971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * exception for an error discovered during verification.  The
916071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * exception is indicated by BBBB, with some detail provided by AAAAAAAA.
916171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
916271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop BBBB, ref@AAAAAAAA */
91639f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
916471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     2(rPC),%eax                     # eax<- AAAAAAAA
91659f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx       # ecx<- self->method
916671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
916771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG2(%esp)             # arg2<- AAAAAAAA
916871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     rINST,OUT_ARG1(%esp)            # arg1<- BBBB
916971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)             # arg0<- method
917071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmThrowVerificationError       # call(method, kind, ref)
917171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown          # handle exception
917271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
917371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
917471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
9175b387fe1b970a216c09d2abc98c893ff1fff3e512Andy McFadden    .size   .L_OP_NOP, .-.L_OP_NOP
917671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .global dvmAsmInstructionEnd
917771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhaodvmAsmInstructionEnd:
917871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
917971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/*
918071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ===========================================================================
918171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *  Sister implementations
918271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ===========================================================================
918371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */
918471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .global dvmAsmSisterStart
918571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .type   dvmAsmSisterStart, %function
918671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .text
918771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 4
918871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhaodvmAsmSisterStart:
918971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
919071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CONST_STRING */
919171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
919271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* This is the less common path, so we'll redo some work
919371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao   here rather than force spills on the common path */
919471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CONST_STRING_resolve:
91959f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%eax
919671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,rINST                # rINST<- AA
919771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
91989f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%eax),%eax # eax<- self->method
919971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   2(rPC),%ecx               # ecx<- BBBB
920071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%eax),%eax
920171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG1(%esp)
920271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG0(%esp)
920371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveString          # go resolve
920471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax                 # failed?
920571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je       common_exceptionThrown
920671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST
920771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
920871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
920971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
921071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
921171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CONST_STRING_JUMBO */
921271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
921371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* This is the less common path, so we'll redo some work
921471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao   here rather than force spills on the common path */
921571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CONST_STRING_JUMBO_resolve:
92169f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%eax
921771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,rINST                # rINST<- AA
921871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
92199f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%eax),%eax # eax<- self->method
922071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     2(rPC),%ecx               # ecx<- BBBBBBBB
922171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%eax),%eax
922271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG1(%esp)
922371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG0(%esp)
922471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveString          # go resolve
922571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax                 # failed?
922671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je       common_exceptionThrown
922771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST
922871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 3 %edx
922971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 3
923071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
923171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
923271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CONST_CLASS */
923371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
923471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* This is the less common path, so we'll redo some work
923571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao   here rather than force spills on the common path */
923671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CONST_CLASS_resolve:
92379f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%eax
923871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,rINST                # rINST<- AA
923971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
92409f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%eax),%eax # eax<- self->method
924171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     $1,OUT_ARG2(%esp)        # true
924271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   2(rPC),%ecx               # ecx<- BBBB
924371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%eax),%eax
924471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG1(%esp)
924571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG0(%esp)
924671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveClass           # go resolve
924771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax                 # failed?
924871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je       common_exceptionThrown
924971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST
925071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
925171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
925271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
925371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
925471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_MONITOR_ENTER */
925571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
925671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_MONITOR_ENTER_continue:
925771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG0(%esp)
925871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG1(%esp)
925971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmLockObject               # dvmLockObject(self,object)
926071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 1
926171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT
926271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
926371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_MONITOR_EXIT */
926471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
926571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_MONITOR_EXIT_continue:
926671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmUnlockObject             # unlock(self,obj)
926771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 1 %edx
926871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                   # success?
926971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 1
927071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_exceptionThrown      # no, exception pending
927171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
927271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_MONITOR_EXIT_errNullObject:
927371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 1                        # advance before throw
927471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_errNullObject
927571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
927671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CHECK_CAST */
927771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
927871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
927971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Trivial test failed, need to perform full check.  This is common.
928071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  ecx holds obj->clazz
928171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  eax holds class resolved from BBBB
928271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  rINST holds object
928371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
928471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CHECK_CAST_fullcheck:
928571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,sReg0                 # we'll need the desired class on failure
928671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG1(%esp)
928771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG0(%esp)
928871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmInstanceofNonTrivial    # eax<- boolean result
928971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                  # failed?
929071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_CHECK_CAST_okay           # no, success
929171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
929271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    # A cast has failed.  We need to throw a ClassCastException.
929371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
929471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offObject_clazz(rINST),%eax
929571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG0(%esp)                 # arg0<- obj->clazz
929671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    sReg0,%ecx
929771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG1(%esp)                 # arg1<- desired class
929871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmThrowClassCastException
929971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
930071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
930171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
930271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Resolution required.  This is the least-likely path, and we're
930371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * going to have to recreate some data.
930471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
930571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  rINST holds object
930671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
930771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CHECK_CAST_resolve:
93089f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
930971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
931071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  2(rPC),%eax                # eax<- BBBB
93119f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%ecx),%ecx  # ecx<- self->method
931271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG1(%esp)        # arg1<- BBBB
931371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%ecx),%ecx # ecx<- metho->clazz
931471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $0,OUT_ARG2(%esp)         # arg2<- false
931571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG0(%esp)        # arg0<- method->clazz
931671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveClass            # eax<- resolved ClassObject ptr
931771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                  # got null?
931871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_exceptionThrown     # yes, handle exception
931971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offObject_clazz(rINST),%ecx  # ecx<- obj->clazz
932071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_CHECK_CAST_resolved       # pick up where we left off
932171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
932271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INSTANCE_OF */
932371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
932471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
932571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Trivial test failed, need to perform full check.  This is common.
932671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  eax holds obj->clazz
932771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  ecx holds class resolved from BBBB
932871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  rINST has BA
932971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
933071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_fullcheck:
933171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG0(%esp)
933271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG1(%esp)
933371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmInstanceofNonTrivial     # eax<- boolean result
933471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    # fall through to OP_INSTANCE_OF_store
933571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
933671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
933771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * eax holds boolean result
933871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * rINST holds BA
933971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
934071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_store:
934171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
934271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    andb    $0xf,rINSTbl               # <- A
934371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
934471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST                 # vA<- eax
934571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
934671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
934771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
934871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Trivial test succeeded, save and bail.
934971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds A
935071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
935171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_trivial:
935271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
935371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    andb    $0xf,rINSTbl               # <- A
935471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
935571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $1,%eax
935671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST                 # vA<- true
935771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
935871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
935971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
936071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Resolution required.  This is the least-likely path.
936171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
936271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  edx holds BBBB
936371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  rINST holds BA
936471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
936571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_resolve:
936671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG1(%esp)         # arg1<- BBBB
93679f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
93689f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%ecx),%ecx
936971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $1,OUT_ARG2(%esp)          # arg2<- true
937071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%ecx),%ecx  # ecx<- method->clazz
937171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
937271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG0(%esp)         # arg0<- method->clazz
937371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveClass             # eax<- resolved ClassObject ptr
937471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                   # success?
937571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_exceptionThrown      # no, handle exception
937671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* Now, we need to sync up with fast path.  We need eax to
937771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * hold the obj->clazz, and ecx to hold the resolved class
937871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */
937971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,%ecx                   # ecx<- resolved class
938071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,%eax                # eax<- BA
938171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    sarl    $4,%eax                    # eax<- B
938271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R %eax %eax                # eax<- vB (obj)
938371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offObject_clazz(%eax),%eax  # eax<- obj->clazz
938471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_INSTANCE_OF_resolved
938571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
938671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_NEW_INSTANCE */
938771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
938871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_initialized:  # on entry, ecx<- class
938971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* TODO: remove test for interface/abstract, now done in verifier */
939071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     $(ACC_INTERFACE|ACC_ABSTRACT),offClassObject_accessFlags(%ecx)
939171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $ALLOC_DONT_TRACK,OUT_ARG1(%esp)
939271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne       .LOP_NEW_INSTANCE_abstract
939371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_finish: # ecx=class
939471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
939571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmAllocObject             # eax<- new object
939671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
939771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax                  # success?
939871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je       common_exceptionThrown     # no, bail out
939971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST
940071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
940171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
940271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
940371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
940471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Class initialization required.
940571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
940671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  ecx holds class object
940771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
940871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_needinit:
940971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                    # save object
941071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG0(%esp)
941171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmInitClass                # initialize class
941271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)                  # restore object
941371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                   # success?
941471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_NEW_INSTANCE_initialized     # success, continue
941571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown      # go deal with init exception
941671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
941771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
941871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Resolution required.  This is the least-likely path.
941971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
942071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
942171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_resolve:
94229f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
942371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  2(rPC),%eax
94249f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%ecx),%ecx   # ecx<- self->method
942571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG1(%esp)
942671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%ecx),%ecx  # ecx<- method->clazz
942771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $0,OUT_ARG2(%esp)
942871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG0(%esp)
942971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveClass             # call(clazz,off,flags)
943071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,%ecx                   # ecx<- resolved ClassObject ptr
943171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                   # success?
943271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_NEW_INSTANCE_resolved        # good to go
943371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown      # no, handle exception
943471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
943571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
943671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * TODO: remove this
943771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * We can't instantiate an abstract class or interface, so throw an
943871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * InstantiationError with the class descriptor as the message.
943971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
944071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  ecx holds class object
944171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
944271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_abstract:
944371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offClassObject_descriptor(%ecx),%eax
944471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $.LstrInstantiationError,OUT_ARG0(%esp)
944571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG1(%esp)
944671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmThrowExceptionWithClassMessage
944771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
944871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
944971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_NEW_ARRAY */
945071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
945171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
945271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Resolve class.  (This is an uncommon case.)
945371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  ecx holds class (null here)
945471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  eax holds array length (vB)
945571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
945671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_ARRAY_resolve:
94579f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
945871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%eax)                   # save array length
94599f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%ecx),%ecx  # ecx<- self->method
946071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  2(rPC),%eax                # eax<- CCCC
946171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%ecx),%ecx # ecx<- method->clazz
946271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG1(%esp)
946371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $0,OUT_ARG2(%esp)
946471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG0(%esp)
946571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveClass            # eax<- call(clazz,ref,flag)
946671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,%ecx
946771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%eax)
946871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                  # successful resolution?
946971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_exceptionThrown     # no, bail.
947071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao# fall through to OP_NEW_ARRAY_finish
947171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
947271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
947371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Finish allocation
947471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
947571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * ecx holds class
947671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * eax holds array length (vB)
947771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
947871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_ARRAY_finish:
947971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG0(%esp)
948071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG1(%esp)
948171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $ALLOC_DONT_TRACK,OUT_ARG2(%esp)
948271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmAllocArrayByClass    # eax<- call(clazz,length,flags)
948371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
948471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax               # failed?
948571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_exceptionThrown  # yup - go handle
948671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST
948771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
948871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
948971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
949071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_FILLED_NEW_ARRAY */
949171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
949271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_more:
949371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%eax),%eax        # eax<- method->clazz
949471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG0(%esp)               # arg0<- clazz
949571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveClass                   # eax<- call(clazz,ref,flag)
949671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                         # null?
949771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_exceptionThrown            # yes, handle it
949871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
949971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao       # note: fall through to .LOP_FILLED_NEW_ARRAY_continue
950071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
950171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
950271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * On entry:
950371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *    eax holds array class [r0]
950471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *    rINST holds AA or BB [r10]
950571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *    ecx is scratch
950671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
950771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_continue:
950871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offClassObject_descriptor(%eax),%ecx  # ecx<- arrayClass->descriptor
950971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $ALLOC_DONT_TRACK,OUT_ARG2(%esp)     # arg2<- flags
951071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzbl  1(%ecx),%ecx                          # ecx<- descriptor[1]
951171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG0(%esp)                   # arg0<- arrayClass
95129f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%eax
951371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpb    $'I',%cl                             # supported?
951471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      1f
951571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpb    $'L',%cl
951671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      1f
951771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpb    $'[',%cl
951871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_FILLED_NEW_ARRAY_notimpl                  # no, not handled yet
951971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1:
95209f601a917c8878204482c37aec7005054b6776fabuzbee    movl    %ecx,offThread_retval+4(%eax)           # save type
952171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if      (!0)
952271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(rINST)                              # save copy, need "B" later
952371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    sarl    $4,rINST
952471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
952571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,OUT_ARG1(%esp)                  # arg1<- A or AA (length)
952671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmAllocArrayByClass     # eax<- call(arrayClass, length, flags)
95279f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
952871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                             # alloc successful?
952971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_exceptionThrown                # no, handle exception
95309f601a917c8878204482c37aec7005054b6776fabuzbee    movl    %eax,offThread_retval(%ecx)             # retval.l<- new array
953171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  4(rPC),%ecx                           # ecx<- FEDC or CCCC
953271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    leal    offArrayObject_contents(%eax),%eax    # eax<- newArray->contents
953371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
953471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* at this point:
953571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *     eax is pointer to tgt
953671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *     rINST is length
953771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *     ecx is FEDC or CCCC
953871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *     TMP_SPILL1 is BA
953971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *  We now need to copy values from registers into the array
954071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */
954171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
954271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if 0
954371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    # set up src pointer
954471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP2(%esi)
954571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP3(%edi)
954671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    leal    (rFP,%ecx,4),%esi # set up src ptr
954771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,%edi         # set up dst ptr
954871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,%ecx        # load count register
954971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    rep
955071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movsd
955171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP2(%esi)
955271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP3(%edi)
95539f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
95549f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_retval+4(%ecx),%eax      # eax<- type
955571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 3 %edx
955671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .else
955771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl  rINST,rINST
955871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je     4f
955971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%edx)        # restore "BA"
956071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    andl   $0x0f,%edx        # edx<- 0000000A
956171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    sall   $16,%edx          # edx<- 000A0000
956271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orl    %ecx,%edx          # edx<- 000AFEDC
956371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao3:
956471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl   $0xf,%ecx
956571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    andl   %edx,%ecx          # ecx<- next reg to load
956671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R %ecx %ecx
956771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    shrl   $4,%edx
956871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    leal   4(%eax),%eax
956971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl   %ecx,-4(%eax)
957071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    sub    $1,rINST
957171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne    3b
957271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao4:
95739f601a917c8878204482c37aec7005054b6776fabuzbee    movl   rSELF,%ecx
95749f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_retval+4(%ecx),%eax      # eax<- type
957571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 3 %edx
957671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
957771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
957871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpb    $'I',%al                        # Int array?
957971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      5f                               # skip card mark if so
95809f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_retval(%ecx),%eax        # eax<- object head
95819f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_cardTable(%ecx),%ecx     # card table base
958271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    shrl    $GC_CARD_SHIFT,%eax             # convert to card num
958371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movb    %cl,(%ecx,%eax)                  # mark card based on object head
958471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao5:
958571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 3
958671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
958771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
958871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
958971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
959071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Throw an exception indicating that we have not implemented this
959171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * mode of filled-new-array.
959271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
959371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_notimpl:
959471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $.LstrInternalErrorA,%eax
959571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG0(%esp)
959671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $.LstrFilledNewArrayNotImplA,%eax
959771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG1(%esp)
959871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmThrowException
959971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
960071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
960171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_FILLED_NEW_ARRAY_RANGE */
960271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
960371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_RANGE_more:
960471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%eax),%eax        # eax<- method->clazz
960571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG0(%esp)               # arg0<- clazz
960671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveClass                   # eax<- call(clazz,ref,flag)
960771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                         # null?
960871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_exceptionThrown            # yes, handle it
960971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
961071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao       # note: fall through to .LOP_FILLED_NEW_ARRAY_RANGE_continue
961171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
961271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
961371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * On entry:
961471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *    eax holds array class [r0]
961571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *    rINST holds AA or BB [r10]
961671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *    ecx is scratch
961771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
961871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_RANGE_continue:
961971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offClassObject_descriptor(%eax),%ecx  # ecx<- arrayClass->descriptor
962071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $ALLOC_DONT_TRACK,OUT_ARG2(%esp)     # arg2<- flags
962171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzbl  1(%ecx),%ecx                          # ecx<- descriptor[1]
962271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG0(%esp)                   # arg0<- arrayClass
96239f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%eax
962471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpb    $'I',%cl                             # supported?
962571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      1f
962671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpb    $'L',%cl
962771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      1f
962871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpb    $'[',%cl
962971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_FILLED_NEW_ARRAY_RANGE_notimpl                  # no, not handled yet
963071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1:
96319f601a917c8878204482c37aec7005054b6776fabuzbee    movl    %ecx,offThread_retval+4(%eax)           # save type
963271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if      (!1)
963371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(rINST)                              # save copy, need "B" later
963471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    sarl    $4,rINST
963571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
963671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,OUT_ARG1(%esp)                  # arg1<- A or AA (length)
963771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmAllocArrayByClass     # eax<- call(arrayClass, length, flags)
96389f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
963971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                             # alloc successful?
964071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_exceptionThrown                # no, handle exception
96419f601a917c8878204482c37aec7005054b6776fabuzbee    movl    %eax,offThread_retval(%ecx)             # retval.l<- new array
964271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  4(rPC),%ecx                           # ecx<- FEDC or CCCC
964371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    leal    offArrayObject_contents(%eax),%eax    # eax<- newArray->contents
964471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
964571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* at this point:
964671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *     eax is pointer to tgt
964771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *     rINST is length
964871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *     ecx is FEDC or CCCC
964971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *     TMP_SPILL1 is BA
965071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *  We now need to copy values from registers into the array
965171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */
965271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
965371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if 1
965471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    # set up src pointer
965571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP2(%esi)
965671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP3(%edi)
965771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    leal    (rFP,%ecx,4),%esi # set up src ptr
965871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,%edi         # set up dst ptr
965971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,%ecx        # load count register
966071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    rep
966171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movsd
966271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP2(%esi)
966371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP3(%edi)
96649f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
96659f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_retval+4(%ecx),%eax      # eax<- type
966671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 3 %edx
966771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .else
966871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl  rINST,rINST
966971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je     4f
967071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%edx)        # restore "BA"
967171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    andl   $0x0f,%edx        # edx<- 0000000A
967271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    sall   $16,%edx          # edx<- 000A0000
967371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orl    %ecx,%edx          # edx<- 000AFEDC
967471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao3:
967571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl   $0xf,%ecx
967671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    andl   %edx,%ecx          # ecx<- next reg to load
967771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R %ecx %ecx
967871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    shrl   $4,%edx
967971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    leal   4(%eax),%eax
968071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl   %ecx,-4(%eax)
968171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    sub    $1,rINST
968271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne    3b
968371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao4:
96849f601a917c8878204482c37aec7005054b6776fabuzbee    movl   rSELF,%ecx
96859f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_retval+4(%ecx),%eax      # eax<- type
968671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 3 %edx
968771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
968871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
968971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpb    $'I',%al                        # Int array?
969071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      5f                               # skip card mark if so
96919f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_retval(%ecx),%eax        # eax<- object head
96929f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_cardTable(%ecx),%ecx     # card table base
969371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    shrl    $GC_CARD_SHIFT,%eax             # convert to card num
969471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movb    %cl,(%ecx,%eax)                  # mark card based on object head
969571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao5:
969671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 3
969771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
969871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
969971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
970071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
970171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Throw an exception indicating that we have not implemented this
970271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * mode of filled-new-array.
970371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
970471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_RANGE_notimpl:
970571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $.LstrInternalErrorA,%eax
970671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG0(%esp)
970771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $.LstrFilledNewArrayNotImplA,%eax
970871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG1(%esp)
970971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmThrowException
971071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
971171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
971271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CMPL_FLOAT */
971371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
971471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMPL_FLOAT_isNaN:
971571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $-1,%ecx
971671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       .LOP_CMPL_FLOAT_finish
971771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
971871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CMPG_FLOAT */
971971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
972071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMPG_FLOAT_isNaN:
972171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $1,%ecx
972271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       .LOP_CMPG_FLOAT_finish
972371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
972471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CMPL_DOUBLE */
972571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
972671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMPL_DOUBLE_isNaN:
972771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $-1,%ecx
972871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       .LOP_CMPL_DOUBLE_finish
972971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
973071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CMPG_DOUBLE */
973171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
973271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMPG_DOUBLE_isNaN:
973371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $1,%ecx
973471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       .LOP_CMPG_DOUBLE_finish
973571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
973671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CMP_LONG */
973771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
973871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMP_LONG_bigger:
973971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $1,%ecx
974071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       .LOP_CMP_LONG_finish
974171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMP_LONG_smaller:
974271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $-1,%ecx
974371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMP_LONG_finish:
974471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %ecx rINST
974571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
974671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
974771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
974871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
974971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_AGET_WIDE */
975071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
975171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_AGET_WIDE_finish:
975271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    leal      offArrayObject_contents(%eax,%ecx,8),%eax
975371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%eax),%ecx
975471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      4(%eax),%eax
975571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %ecx rINST 0
975671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %eax rINST 1
975771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
975871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
975971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
976071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
976171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_APUT_WIDE */
976271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
976371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_APUT_WIDE_finish:
976471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    leal      offArrayObject_contents(%eax,%ecx,8),%eax
976571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_WORD %ecx rINST 0
976671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_WORD rINST rINST 1
976771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      rINST,4(%eax)
976871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
976971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %ecx,(%eax)
977071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
977171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
977271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
977371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_APUT_OBJECT */
977471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
977571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* On entry:
977671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax<- array object
977771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx<- index
977871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST<- vAA
977971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
978071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_APUT_OBJECT_continue:
978171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    leal      offArrayObject_contents(%eax,%ecx,4),%ecx
978271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     rINST,rINST                    # storing null reference?
978371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        .LOP_APUT_OBJECT_skip_check
978471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                         # save target address
978571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP2(%eax)                         # save object head
978671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offObject_clazz(%eax),%eax     # eax<- arrayObj->clazz
978771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offObject_clazz(rINST),%ecx    # ecx<- obj->clazz
978871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %eax,OUT_ARG1(%esp)
978971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %ecx,OUT_ARG0(%esp)
979071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %ecx,sReg0                     # store the two classes for later
979171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %eax,sReg1
979271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call      dvmCanPutArrayElement          # test object type vs. array type
979371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)                       # recover target address
979471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax
97959f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%eax
979671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne       .LOP_APUT_OBJECT_types_okay
979771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
979871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    # The types don't match.  We need to throw an ArrayStoreException.
979971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
980071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      sReg0,%eax                     # restore the two classes...
980171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %eax,OUT_ARG0(%esp)
980271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      sReg1,%ecx
980371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %ecx,OUT_ARG1(%esp)
980471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call      dvmThrowArrayStoreException    # ...and throw
980571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       common_exceptionThrown
980671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
980771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_APUT_OBJECT_types_okay:
98089f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_cardTable(%eax),%eax   # get card table base
980971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      rINST,(%ecx)                   # store into array
981071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP2(%ecx)                       # recover object head
981171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
981271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    shrl      $GC_CARD_SHIFT,%ecx           # object head to card number
981371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movb      %al,(%eax,%ecx)                # mark card using object head
981471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
981571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
981671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
981771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_APUT_OBJECT_skip_check:
981871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      rINST,(%ecx)
981971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
982071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
982171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
982271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
982371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET */
982471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
982571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
982671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_resolve:
982771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
98289f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
982971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
983071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
983171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                  # pass in method->clazz
983271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
983371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
983471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           #  returns InstrField ptr
983571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_finish
983671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
983771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
983871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_finish:
983971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
984071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
984171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
984271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
984371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds A
984471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
984571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
984671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
984771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
984871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl   (%ecx,%eax,1),%ecx                  # ecx<- obj.field (8/16/32 bits)
984971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,%eax                          # eax<- A
985071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
985171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %ecx %eax
985271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
985371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
985471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
985571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_WIDE */
985671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
985771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
985871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_WIDE_resolve:
985971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
98609f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
986171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
986271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save objpointer across call
986371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rPC,OUT_ARG0(%esp)                  # pass in method->clazz
986471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
986571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
986671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # returns InstrField ptr
986771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_WIDE_finish
986871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
986971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
987071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_WIDE_finish:
987171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
987271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
987371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
987471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
987571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds A
987671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
987771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
987871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
987971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
988071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    leal    (%ecx,%eax,1),%eax                  # eax<- address of field
988171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%eax),%ecx                         # ecx<- lsw
988271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    4(%eax),%eax                        # eax<- msw
988371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
988471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %ecx rINST 0
988571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %eax rINST 1
988671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
988771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
988871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
988971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_OBJECT */
989071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
989171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
989271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_OBJECT_resolve:
989371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
98949f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
989571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
989671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
989771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                  # pass in method->clazz
989871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
989971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
990071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           #  returns InstrField ptr
990171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_OBJECT_finish
990271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
990371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
990471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_OBJECT_finish:
990571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
990671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
990771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
990871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
990971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds A
991071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
991171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
991271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
991371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
991471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl   (%ecx,%eax,1),%ecx                  # ecx<- obj.field (8/16/32 bits)
991571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,%eax                          # eax<- A
991671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
991771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %ecx %eax
991871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
991971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
992071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
992171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_BOOLEAN */
992271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
992371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
992471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BOOLEAN_resolve:
992571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
99269f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
992771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
992871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
992971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                  # pass in method->clazz
993071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
993171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
993271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           #  returns InstrField ptr
993371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_BOOLEAN_finish
993471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
993571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
993671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BOOLEAN_finish:
993771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
993871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
993971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
994071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
994171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds A
994271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
994371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
994471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
994571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
994671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzbl   (%ecx,%eax,1),%ecx                  # ecx<- obj.field (8/16/32 bits)
994771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,%eax                          # eax<- A
994871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
994971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %ecx %eax
995071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
995171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
995271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
995371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_BYTE */
995471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
995571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
995671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BYTE_resolve:
995771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
99589f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
995971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
996071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
996171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                  # pass in method->clazz
996271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
996371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
996471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           #  returns InstrField ptr
996571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_BYTE_finish
996671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
996771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
996871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BYTE_finish:
996971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
997071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
997171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
997271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
997371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds A
997471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
997571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
997671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
997771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
997871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movsbl   (%ecx,%eax,1),%ecx                  # ecx<- obj.field (8/16/32 bits)
997971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,%eax                          # eax<- A
998071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
998171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %ecx %eax
998271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
998371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
998471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
998571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_CHAR */
998671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
998771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
998871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_CHAR_resolve:
998971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
99909f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
999171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
999271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
999371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                  # pass in method->clazz
999471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
999571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
999671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           #  returns InstrField ptr
999771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_CHAR_finish
999871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
999971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1000071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_CHAR_finish:
1000171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1000271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1000371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1000471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1000571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds A
1000671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1000771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
1000871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
1000971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
1001071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   (%ecx,%eax,1),%ecx                  # ecx<- obj.field (8/16/32 bits)
1001171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,%eax                          # eax<- A
1001271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1001371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %ecx %eax
1001471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1001571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1001671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1001771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_SHORT */
1001871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1001971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1002071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_SHORT_resolve:
1002171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
100229f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1002371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1002471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1002571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                  # pass in method->clazz
1002671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1002771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1002871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           #  returns InstrField ptr
1002971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_SHORT_finish
1003071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
1003171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1003271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_SHORT_finish:
1003371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1003471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1003571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1003671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1003771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds A
1003871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1003971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
1004071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
1004171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
1004271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movswl   (%ecx,%eax,1),%ecx                  # ecx<- obj.field (8/16/32 bits)
1004371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,%eax                          # eax<- A
1004471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1004571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %ecx %eax
1004671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1004771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1004871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1004971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT */
1005071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1005171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1005271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_resolve:
1005371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
100549f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1005571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1005671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1005771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                 # pass in method->clazz
1005871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1005971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1006071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # returns InstrField ptr
1006171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_finish
1006271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
1006371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1006471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_finish:
1006571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1006671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1006771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1006871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1006971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds A
1007071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1007171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R rINST rINST                       # rINST<- v[A]
1007271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax   # eax<- byte offset of field
1007371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                            # object null?
1007471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                 # object was null
1007571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1007671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl   rINST,(%ecx,%eax,1)            # obj.field <- v[A](8/16/32 bits)
1007771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1007871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1007971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1008071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_WIDE */
1008171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1008271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1008371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_WIDE_resolve:
1008471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
100859f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1008671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1008771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1008871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                 # pass in method->clazz
1008971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1009071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1009171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           #  ... which returns InstrField ptr
1009271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_WIDE_finish
1009371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
1009471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1009571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_WIDE_finish:
1009671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1009771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1009871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1009971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1010071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   %edx is scratch, but needs to be unspilled
1010171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds A
1010271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1010371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
1010471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
1010571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
1010671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    leal    (%ecx,%eax,1),%eax                  # eax<- address of field
1010771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_WORD %ecx rINST 0                  # ecx<- lsw
1010871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_WORD rINST rINST 1                 # rINST<- msw
1010971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1011071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,4(%eax)
1011171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,(%eax)
1011271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1011371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1011471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1011571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_OBJECT */
1011671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1011771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1011871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_OBJECT_resolve:
1011971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
101209f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1012171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1012271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1012371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                 # pass in method->clazz
1012471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1012571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1012671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # returns InstrField ptr
1012771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_OBJECT_finish
1012871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
1012971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1013071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_OBJECT_finish:
1013171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1013271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1013371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1013471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1013571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   %edx is scratch, but needs to be unspilled
1013671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds A
1013771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1013871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R rINST rINST                      # rINST<- v[A]
1013971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
1014071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
1014171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
1014271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,(%ecx,%eax)      # obj.field <- v[A](8/16/32 bits)
101439f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%eax
1014471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   rINST,rINST                         # stored a NULL?
101459f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_cardTable(%eax),%eax        # get card table base
1014671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1014771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      1f                                  # skip card mark if null store
1014871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    shrl    $GC_CARD_SHIFT,%ecx                # object head to card number
1014971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movb    %al,(%eax,%ecx)                     # mark card using object head
1015071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1:
1015171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1015271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1015371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1015471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_BOOLEAN */
1015571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1015671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1015771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BOOLEAN_resolve:
1015871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
101599f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1016071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1016171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1016271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                 # pass in method->clazz
1016371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1016471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1016571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # returns InstrField ptr
1016671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_BOOLEAN_finish
1016771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
1016871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1016971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BOOLEAN_finish:
1017071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1017171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1017271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1017371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1017471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds A
1017571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1017671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R rINST rINST                       # rINST<- v[A]
1017771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax   # eax<- byte offset of field
1017871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                            # object null?
1017971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                 # object was null
1018071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1018171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movb   rINSTbl,(%ecx,%eax,1)            # obj.field <- v[A](8/16/32 bits)
1018271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1018371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1018471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1018571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_BYTE */
1018671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1018771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1018871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BYTE_resolve:
1018971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
101909f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1019171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1019271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1019371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                 # pass in method->clazz
1019471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1019571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1019671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # returns InstrField ptr
1019771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_BYTE_finish
1019871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
1019971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1020071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BYTE_finish:
1020171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1020271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1020371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1020471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1020571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds A
1020671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1020771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R rINST rINST                       # rINST<- v[A]
1020871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax   # eax<- byte offset of field
1020971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                            # object null?
1021071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                 # object was null
1021171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1021271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movb   rINSTbl,(%ecx,%eax,1)            # obj.field <- v[A](8/16/32 bits)
1021371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1021471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1021571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1021671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_CHAR */
1021771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1021871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1021971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_CHAR_resolve:
1022071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
102219f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1022271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1022371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1022471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                 # pass in method->clazz
1022571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1022671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1022771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # returns InstrField ptr
1022871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_CHAR_finish
1022971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
1023071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1023171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_CHAR_finish:
1023271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1023371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1023471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1023571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1023671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds A
1023771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1023871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R rINST rINST                       # rINST<- v[A]
1023971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax   # eax<- byte offset of field
1024071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                            # object null?
1024171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                 # object was null
1024271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1024371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movw   rINSTw,(%ecx,%eax,1)            # obj.field <- v[A](8/16/32 bits)
1024471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1024571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1024671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1024771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_SHORT */
1024871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1024971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1025071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_SHORT_resolve:
1025171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
102529f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1025371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1025471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1025571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                 # pass in method->clazz
1025671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1025771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1025871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # returns InstrField ptr
1025971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_SHORT_finish
1026071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
1026171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1026271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_SHORT_finish:
1026371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1026471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1026571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1026671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1026771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds A
1026871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1026971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R rINST rINST                       # rINST<- v[A]
1027071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax   # eax<- byte offset of field
1027171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                            # object null?
1027271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                 # object was null
1027371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1027471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movw   rINSTw,(%ecx,%eax,1)            # obj.field <- v[A](8/16/32 bits)
1027571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1027671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1027771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1027871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET */
1027971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1028071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1028171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1028271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1028371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_resolve:
102849f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1028571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   2(rPC),%eax                        # eax<- field ref BBBB
102869f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1028771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1028871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1028971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1029071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1029171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1029271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1029371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SGET_finish                 # success, continue
1029471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1029571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1029671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_WIDE */
1029771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1029871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1029971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1030071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1030171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_WIDE_resolve:
103029f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1030371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   2(rPC),%eax                        # eax<- field ref BBBB
103049f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1030571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1030671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1030771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1030871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1030971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1031071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1031171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SGET_WIDE_finish                 # success, continue
1031271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1031371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1031471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_OBJECT */
1031571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1031671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1031771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1031871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1031971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_OBJECT_resolve:
103209f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1032171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   2(rPC),%eax                        # eax<- field ref BBBB
103229f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1032371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1032471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1032571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1032671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1032771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1032871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1032971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SGET_OBJECT_finish                 # success, continue
1033071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1033171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1033271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_BOOLEAN */
1033371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1033471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1033571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1033671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1033771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_BOOLEAN_resolve:
103389f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1033971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   2(rPC),%eax                        # eax<- field ref BBBB
103409f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1034171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1034271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1034371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1034471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1034571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1034671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1034771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SGET_BOOLEAN_finish                 # success, continue
1034871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1034971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1035071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_BYTE */
1035171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1035271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1035371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1035471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1035571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_BYTE_resolve:
103569f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1035771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   2(rPC),%eax                        # eax<- field ref BBBB
103589f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1035971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1036071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1036171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1036271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1036371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1036471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1036571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SGET_BYTE_finish                 # success, continue
1036671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1036771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1036871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_CHAR */
1036971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1037071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1037171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1037271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1037371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_CHAR_resolve:
103749f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1037571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   2(rPC),%eax                        # eax<- field ref BBBB
103769f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1037771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1037871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1037971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1038071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1038171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1038271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1038371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SGET_CHAR_finish                 # success, continue
1038471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1038571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1038671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_SHORT */
1038771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1038871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1038971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1039071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1039171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_SHORT_resolve:
103929f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1039371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   2(rPC),%eax                        # eax<- field ref BBBB
103949f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1039571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1039671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1039771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1039871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1039971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1040071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1040171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SGET_SHORT_finish                 # success, continue
1040271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1040371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1040471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT */
1040571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1040671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1040771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1040871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1040971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_resolve:
104109f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1041171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   2(rPC),%eax                        # eax<- field ref BBBB
104129f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1041371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1041471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1041571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1041671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1041771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1041871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1041971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SPUT_finish                 # success, continue
1042071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1042171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1042271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_WIDE */
1042371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1042471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1042571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1042671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1042771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_WIDE_resolve:
104289f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1042971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   2(rPC),%eax                        # eax<- field ref BBBB
104309f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1043171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1043271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1043371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1043471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1043571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1043671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1043771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SPUT_WIDE_finish                 # success, continue
1043871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1043971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1044071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_OBJECT */
1044171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1044271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1044371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_OBJECT_continue:
1044471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %ecx,offStaticField_value(%eax)    # do the store
1044571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %ecx,%ecx                          # stored null object ptr?
1044671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1044771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        1f                                 # skip card mark if null
104489f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
1044971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offField_clazz(%eax),%eax          # eax<- method->clazz
104509f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_cardTable(%ecx),%ecx       # get card table base
1045171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    shrl      $GC_CARD_SHIFT,%eax               # head to card number
1045271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movb      %cl,(%ecx,%eax)                    # mark card
1045371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1:
1045471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1045571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1045671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1045771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_OBJECT_resolve:
104589f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1045971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   2(rPC),%eax                        # eax<- field ref BBBB
104609f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1046171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1046271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1046371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1046471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1046571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1046671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1046771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SPUT_OBJECT_finish                 # success, continue
1046871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1046971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1047071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_BOOLEAN */
1047171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1047271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1047371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1047471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1047571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_BOOLEAN_resolve:
104769f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1047771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   2(rPC),%eax                        # eax<- field ref BBBB
104789f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1047971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1048071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1048171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1048271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1048371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1048471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1048571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SPUT_BOOLEAN_finish                 # success, continue
1048671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1048771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1048871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_BYTE */
1048971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1049071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1049171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1049271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1049371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_BYTE_resolve:
104949f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1049571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   2(rPC),%eax                        # eax<- field ref BBBB
104969f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1049771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1049871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1049971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1050071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1050171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1050271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1050371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SPUT_BYTE_finish                 # success, continue
1050471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1050571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1050671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_CHAR */
1050771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1050871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1050971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1051071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1051171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_CHAR_resolve:
105129f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1051371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   2(rPC),%eax                        # eax<- field ref BBBB
105149f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1051571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1051671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1051771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1051871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1051971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1052071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1052171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SPUT_CHAR_finish                 # success, continue
1052271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1052371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1052471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_SHORT */
1052571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1052671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1052771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1052871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1052971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_SHORT_resolve:
105309f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1053171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   2(rPC),%eax                        # eax<- field ref BBBB
105329f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1053371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1053471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1053571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1053671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1053771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1053871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1053971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SPUT_SHORT_finish                 # success, continue
1054071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1054171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1054271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_VIRTUAL */
1054371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1054471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1054571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_VIRTUAL_more:
1054671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offMethod_clazz(%eax),%eax  # ecx<- method->clazz
1054771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %eax,OUT_ARG0(%esp)         # arg0<- clazz
1054871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- flags
1054971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call      dvmResolveMethod            # eax<- call(clazz, ref, flags)
1055071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                   # got null?
1055171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne       .LOP_INVOKE_VIRTUAL_continue        # no, continue
1055271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       common_exceptionThrown      # yes, handle exception
1055371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1055471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* At this point:
1055571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax = resolved base method
1055671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx = scratch
1055771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1055871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_VIRTUAL_continue:
1055971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl    4(rPC),%ecx               # ecx<- GFED or CCCC
1056071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if       (!0)
1056171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    andl      $0xf,%ecx                # ecx<- D (or stays CCCC)
1056271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1056371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R  %ecx %ecx               # ecx<- "this"
1056471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl    offMethod_methodIndex(%eax),%eax  # eax<- baseMethod->methodIndex
1056571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %ecx,%ecx                 # null this?
1056671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        common_errNullObject      # go if so
1056771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offObject_clazz(%ecx),%ecx  # ecx<- thisPtr->clazz
1056871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offClassObject_vtable(%ecx),%ecx # ecx<- thisPtr->clazz->vtable
1056971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax        # eax<- vtable[methodIndex]
1057071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       common_invokeMethodNoRange
1057171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1057271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_SUPER */
1057371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1057471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1057571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * At this point:
1057671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  ecx = resolved base method [r0]
1057771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  eax = method->clazz [r9]
1057871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1057971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_continue:
1058071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offClassObject_super(%eax),%eax   # eax<- method->clazz->super
1058171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  offMethod_methodIndex(%ecx),%ecx  # ecx<- baseMthod->methodIndex
1058271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpl    offClassObject_vtableCount(%eax),%ecx # compare(methodIndex,vtableCount)
1058371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jae     .LOP_INVOKE_SUPER_nsm           # method not present in superclass
1058471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offClassObject_vtable(%eax),%eax   # eax<- ...clazz->super->vtable
1058571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%eax,%ecx,4),%eax        # eax<- vtable[methodIndex]
1058671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_invokeMethodNoRange
1058771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1058871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1058971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* At this point:
1059071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * ecx = null (needs to be resolved base method)
1059171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * eax = method->clazz
1059271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    */
1059371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_resolve:
1059471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%eax)                    # method->clazz
1059571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG0(%esp)         # arg0<- method->clazz
1059671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  2(rPC),%ecx                 # ecx<- BBBB
1059771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $METHOD_VIRTUAL,OUT_ARG2(%esp)  # arg2<- resolver method type
1059871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG1(%esp)         # arg1<- ref
1059971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveMethod            # eax<- call(clazz, ref, flags)
1060071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                   # got null?
1060171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,%ecx                   # ecx<- resolved base method
1060271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%eax)                  # restore method->clazz
1060371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_INVOKE_SUPER_continue        # good to go - continue
1060471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown      # handle exception
1060571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1060671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1060771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Throw a NoSuchMethodError with the method name as the message.
1060871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  ecx = resolved base method
1060971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1061071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_nsm:
1061171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_name(%ecx),%eax
1061271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     %eax,OUT_ARG1(%esp)
1061371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_errNoSuchMethod
1061471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1061571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_DIRECT */
1061671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1061771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1061871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * On entry:
1061971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   TMP_SPILL  <- "this" register
1062071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Things a bit ugly on this path, but it's the less
1062171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * frequent one.  We'll have to do some reloading.
1062271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1062371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_DIRECT_resolve:
1062471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     SPILL_TMP1(%ecx)
106259f601a917c8878204482c37aec7005054b6776fabuzbee     movl     rSELF,%ecx
106269f601a917c8878204482c37aec7005054b6776fabuzbee     movl     offThread_method(%ecx),%ecx  # ecx<- self->method
1062771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     movzwl   2(rPC),%eax      # reference (BBBB or CCCC)
1062871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     movl     offMethod_clazz(%ecx),%ecx # ecx<- method->clazz
1062971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     movl     $METHOD_DIRECT,OUT_ARG2(%esp)
1063071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     movl     %eax,OUT_ARG1(%esp)
1063171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     movl     %ecx,OUT_ARG0(%esp)
1063271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     call     dvmResolveMethod # eax<- call(clazz, ref, flags)
1063371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     UNSPILL_TMP1(%ecx)
1063471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     testl    %eax,%eax
1063571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     jne      .LOP_INVOKE_DIRECT_finish
1063671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     jmp      common_exceptionThrown
1063771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1063871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_STATIC */
1063971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1064071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_STATIC_continue:
1064171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $METHOD_STATIC,%eax
1064271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %eax,OUT_ARG2(%esp)       # arg2<- flags
1064371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call      dvmResolveMethod          # call(clazz,ref,flags)
1064471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                 # got null?
1064571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne       common_invokeMethodNoRange
1064671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       common_exceptionThrown
1064771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1064871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_INTERFACE */
1064971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1065071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_INTERFACE_continue:
1065171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call       dvmFindInterfaceMethodInCache # eax<- call(class, ref, method, dex)
1065271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl      %eax,%eax
1065371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je         common_exceptionThrown
1065471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp        common_invokeMethodNoRange
1065571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1065671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_VIRTUAL_RANGE */
1065771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1065871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1065971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_VIRTUAL_RANGE_more:
1066071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offMethod_clazz(%eax),%eax  # ecx<- method->clazz
1066171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %eax,OUT_ARG0(%esp)         # arg0<- clazz
1066271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- flags
1066371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call      dvmResolveMethod            # eax<- call(clazz, ref, flags)
1066471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                   # got null?
1066571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne       .LOP_INVOKE_VIRTUAL_RANGE_continue        # no, continue
1066671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       common_exceptionThrown      # yes, handle exception
1066771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1066871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* At this point:
1066971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax = resolved base method
1067071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx = scratch
1067171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1067271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_VIRTUAL_RANGE_continue:
1067371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl    4(rPC),%ecx               # ecx<- GFED or CCCC
1067471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if       (!1)
1067571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    andl      $0xf,%ecx                # ecx<- D (or stays CCCC)
1067671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1067771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R  %ecx %ecx               # ecx<- "this"
1067871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl    offMethod_methodIndex(%eax),%eax  # eax<- baseMethod->methodIndex
1067971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %ecx,%ecx                 # null this?
1068071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        common_errNullObject      # go if so
1068171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offObject_clazz(%ecx),%ecx  # ecx<- thisPtr->clazz
1068271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offClassObject_vtable(%ecx),%ecx # ecx<- thisPtr->clazz->vtable
1068371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax        # eax<- vtable[methodIndex]
1068471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       common_invokeMethodRange
1068571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1068671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_SUPER_RANGE */
1068771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1068871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1068971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * At this point:
1069071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  ecx = resolved base method [r0]
1069171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  eax = method->clazz [r9]
1069271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1069371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_RANGE_continue:
1069471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offClassObject_super(%eax),%eax   # eax<- method->clazz->super
1069571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  offMethod_methodIndex(%ecx),%ecx  # ecx<- baseMthod->methodIndex
1069671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpl    offClassObject_vtableCount(%eax),%ecx # compare(methodIndex,vtableCount)
1069771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jae     .LOP_INVOKE_SUPER_RANGE_nsm           # method not present in superclass
1069871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offClassObject_vtable(%eax),%eax   # eax<- ...clazz->super->vtable
1069971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%eax,%ecx,4),%eax        # eax<- vtable[methodIndex]
1070071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_invokeMethodRange
1070171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1070271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1070371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* At this point:
1070471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * ecx = null (needs to be resolved base method)
1070571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * eax = method->clazz
1070671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    */
1070771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_RANGE_resolve:
1070871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%eax)                    # method->clazz
1070971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG0(%esp)         # arg0<- method->clazz
1071071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  2(rPC),%ecx                 # ecx<- BBBB
1071171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $METHOD_VIRTUAL,OUT_ARG2(%esp)  # arg2<- resolver method type
1071271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG1(%esp)         # arg1<- ref
1071371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveMethod            # eax<- call(clazz, ref, flags)
1071471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                   # got null?
1071571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,%ecx                   # ecx<- resolved base method
1071671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%eax)                  # restore method->clazz
1071771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_INVOKE_SUPER_RANGE_continue        # good to go - continue
1071871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown      # handle exception
1071971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1072071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1072171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Throw a NoSuchMethodError with the method name as the message.
1072271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  ecx = resolved base method
1072371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1072471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_RANGE_nsm:
1072571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_name(%ecx),%eax
1072671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     %eax,OUT_ARG1(%esp)
1072771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_errNoSuchMethod
1072871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1072971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_DIRECT_RANGE */
1073071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1073171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1073271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * On entry:
1073371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   TMP_SPILL  <- "this" register
1073471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Things a bit ugly on this path, but it's the less
1073571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * frequent one.  We'll have to do some reloading.
1073671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1073771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_DIRECT_RANGE_resolve:
1073871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     SPILL_TMP1(%ecx)
107399f601a917c8878204482c37aec7005054b6776fabuzbee     movl     rSELF,%ecx
107409f601a917c8878204482c37aec7005054b6776fabuzbee     movl     offThread_method(%ecx),%ecx  # ecx<- self->method
1074171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     movzwl   2(rPC),%eax      # reference (BBBB or CCCC)
1074271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     movl     offMethod_clazz(%ecx),%ecx # ecx<- method->clazz
1074371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     movl     $METHOD_DIRECT,OUT_ARG2(%esp)
1074471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     movl     %eax,OUT_ARG1(%esp)
1074571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     movl     %ecx,OUT_ARG0(%esp)
1074671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     call     dvmResolveMethod # eax<- call(clazz, ref, flags)
1074771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     UNSPILL_TMP1(%ecx)
1074871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     testl    %eax,%eax
1074971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     jne      .LOP_INVOKE_DIRECT_RANGE_finish
1075071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     jmp      common_exceptionThrown
1075171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1075271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_STATIC_RANGE */
1075371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1075471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_STATIC_RANGE_continue:
1075571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $METHOD_STATIC,%eax
1075671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %eax,OUT_ARG2(%esp)       # arg2<- flags
1075771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call      dvmResolveMethod          # call(clazz,ref,flags)
1075871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                 # got null?
1075971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne       common_invokeMethodRange
1076071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       common_exceptionThrown
1076171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1076271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_INTERFACE_RANGE */
1076371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1076471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_INTERFACE_RANGE_continue:
1076571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call       dvmFindInterfaceMethodInCache # eax<- call(class, ref, method, dex)
1076671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl      %eax,%eax
1076771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je         common_exceptionThrown
1076871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp        common_invokeMethodRange
1076971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1077071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_FLOAT_TO_INT */
1077171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1077271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1077371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FLOAT_TO_INT_continue:
1077471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if 0
1077571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     $0x80000000,%eax
1077671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    xorl     4(rFP,%ecx,4),%eax
1077771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orl      (rFP,%ecx,4),%eax
1077871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .else
1077971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpl     $0x80000000,(rFP,%ecx,4)
1078071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1078171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je       .LOP_FLOAT_TO_INT_special_case # fix up result
1078271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1078371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FLOAT_TO_INT_finish:
1078471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 1
1078571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1078671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1078771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FLOAT_TO_INT_special_case:
1078871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    fnstsw   %ax
1078971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    sahf
1079071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jp       .LOP_FLOAT_TO_INT_isNaN
1079171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    adcl     $-1,(rFP,%ecx,4)
1079271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if 0
1079371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    adcl     $-1,4(rFP,%ecx,4)
1079471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1079571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao   jmp       .LOP_FLOAT_TO_INT_finish
1079671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FLOAT_TO_INT_isNaN:
1079771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $0,(rFP,%ecx,4)
1079871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if 0
1079971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $0,4(rFP,%ecx,4)
1080071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1080171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       .LOP_FLOAT_TO_INT_finish
1080271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1080371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_FLOAT_TO_LONG */
1080471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1080571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1080671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FLOAT_TO_LONG_continue:
1080771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if 1
1080871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     $0x80000000,%eax
1080971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    xorl     4(rFP,%ecx,4),%eax
1081071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orl      (rFP,%ecx,4),%eax
1081171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .else
1081271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpl     $0x80000000,(rFP,%ecx,4)
1081371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1081471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je       .LOP_FLOAT_TO_LONG_special_case # fix up result
1081571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1081671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FLOAT_TO_LONG_finish:
1081771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 1
1081871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1081971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1082071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FLOAT_TO_LONG_special_case:
1082171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    fnstsw   %ax
1082271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    sahf
1082371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jp       .LOP_FLOAT_TO_LONG_isNaN
1082471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    adcl     $-1,(rFP,%ecx,4)
1082571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if 1
1082671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    adcl     $-1,4(rFP,%ecx,4)
1082771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1082871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao   jmp       .LOP_FLOAT_TO_LONG_finish
1082971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FLOAT_TO_LONG_isNaN:
1083071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $0,(rFP,%ecx,4)
1083171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if 1
1083271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $0,4(rFP,%ecx,4)
1083371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1083471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       .LOP_FLOAT_TO_LONG_finish
1083571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1083671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_DOUBLE_TO_INT */
1083771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1083871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1083971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DOUBLE_TO_INT_continue:
1084071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if 0
1084171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     $0x80000000,%eax
1084271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    xorl     4(rFP,%ecx,4),%eax
1084371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orl      (rFP,%ecx,4),%eax
1084471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .else
1084571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpl     $0x80000000,(rFP,%ecx,4)
1084671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1084771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je       .LOP_DOUBLE_TO_INT_special_case # fix up result
1084871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1084971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DOUBLE_TO_INT_finish:
1085071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 1
1085171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1085271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1085371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DOUBLE_TO_INT_special_case:
1085471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    fnstsw   %ax
1085571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    sahf
1085671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jp       .LOP_DOUBLE_TO_INT_isNaN
1085771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    adcl     $-1,(rFP,%ecx,4)
1085871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if 0
1085971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    adcl     $-1,4(rFP,%ecx,4)
1086071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1086171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao   jmp       .LOP_DOUBLE_TO_INT_finish
1086271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DOUBLE_TO_INT_isNaN:
1086371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $0,(rFP,%ecx,4)
1086471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if 0
1086571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $0,4(rFP,%ecx,4)
1086671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1086771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       .LOP_DOUBLE_TO_INT_finish
1086871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1086971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_DOUBLE_TO_LONG */
1087071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1087171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1087271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DOUBLE_TO_LONG_continue:
1087371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if 1
1087471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     $0x80000000,%eax
1087571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    xorl     4(rFP,%ecx,4),%eax
1087671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orl      (rFP,%ecx,4),%eax
1087771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .else
1087871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpl     $0x80000000,(rFP,%ecx,4)
1087971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1088071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je       .LOP_DOUBLE_TO_LONG_special_case # fix up result
1088171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1088271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DOUBLE_TO_LONG_finish:
1088371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 1
1088471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1088571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1088671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DOUBLE_TO_LONG_special_case:
1088771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    fnstsw   %ax
1088871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    sahf
1088971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jp       .LOP_DOUBLE_TO_LONG_isNaN
1089071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    adcl     $-1,(rFP,%ecx,4)
1089171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if 1
1089271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    adcl     $-1,4(rFP,%ecx,4)
1089371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1089471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao   jmp       .LOP_DOUBLE_TO_LONG_finish
1089571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DOUBLE_TO_LONG_isNaN:
1089671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $0,(rFP,%ecx,4)
1089771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if 1
1089871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $0,4(rFP,%ecx,4)
1089971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1090071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       .LOP_DOUBLE_TO_LONG_finish
1090171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1090271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_DIV_INT */
1090371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_INT_continue_div:
1090471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cltd
1090571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    idivl   %ecx
1090671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_INT_finish_div:
1090771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST
1090871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1090971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1091071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1091171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1091271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_REM_INT */
1091371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_INT_continue_div:
1091471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cltd
1091571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    idivl   %ecx
1091671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_INT_finish_div:
1091771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %edx rINST
1091871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1091971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1092071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1092171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1092271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_MUL_LONG */
1092371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1092471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_MUL_LONG_continue:
1092571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    leal      (%ecx,%edx),%edx     # full result now in %edx:%eax
1092671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP2(%esi)             # Restore Dalvik PC
1092771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %ecx       # Fetch next instruction
1092871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %edx,4(rFP,rINST,4)  # v[B+1]<- %edx
1092971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %eax,(rFP,rINST,4)   # v[B]<- %eax
1093071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1093171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %ecx
1093271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1093371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_DIV_LONG */
1093471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1093571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_LONG_continue:
1093671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     __divdi3
1093771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_LONG_finish:
1093871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %edx rINST 1
1093971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %eax rINST 0
1094071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1094171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1094271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1094371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1094471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_LONG_check_zero:
1094571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %edx,%edx
1094671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_DIV_LONG_notSpecial
1094771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_errDivideByZero
1094871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_LONG_check_neg1:
1094971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %edx,%eax
1095071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_DIV_LONG_notSpecial
1095171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_WORD %edx %ecx 0
1095271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_WORD %ecx %ecx 1
1095371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %edx,%edx
1095471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_DIV_LONG_notSpecial1
1095571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpl     $0x80000000,%ecx
1095671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_DIV_LONG_notSpecial1
1095771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* minint / -1, return minint on div, 0 on rem */
1095871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    xorl     %eax,%eax
1095971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     $0x80000000,%edx
1096071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      .LOP_DIV_LONG_finish
1096171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1096271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_REM_LONG */
1096371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1096471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_LONG_continue:
1096571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     __moddi3
1096671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_LONG_finish:
1096771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %edx rINST 1
1096871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %eax rINST 0
1096971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1097071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1097171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1097271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1097371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_LONG_check_zero:
1097471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %edx,%edx
1097571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_REM_LONG_notSpecial
1097671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_errDivideByZero
1097771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_LONG_check_neg1:
1097871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %edx,%eax
1097971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_REM_LONG_notSpecial
1098071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_WORD %edx %ecx 0
1098171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_WORD %ecx %ecx 1
1098271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %edx,%edx
1098371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_REM_LONG_notSpecial1
1098471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpl     $0x80000000,%ecx
1098571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_REM_LONG_notSpecial1
1098671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* minint / -1, return minint on div, 0 on rem */
1098771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    xorl     %eax,%eax
1098871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     $0,%edx
1098971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      .LOP_REM_LONG_finish
1099071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1099171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SHL_LONG */
1099271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1099371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SHL_LONG_finish:
1099471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %eax rINST 0          # v[AA+0]<- %eax
1099571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1099671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1099771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1099871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SHR_LONG */
1099971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1100071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1100171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SHR_LONG_finish:
1100271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %eax rINST 0          # v[AA+0]<- eax
1100371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1100471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1100571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1100671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_USHR_LONG */
1100771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1100871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1100971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_USHR_LONG_finish:
1101071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %eax rINST 0         # v[BB+0]<- eax
1101171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1101271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1101371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1101471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_DIV_INT_2ADDR */
1101571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_INT_2ADDR_continue_div2addr:
1101671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cltd
1101771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    idivl   %ecx
1101871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_INT_2ADDR_finish_div2addr:
1101971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST
1102071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 1 %edx
1102171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 1
1102271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1102371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1102471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_REM_INT_2ADDR */
1102571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_INT_2ADDR_continue_div2addr:
1102671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cltd
1102771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    idivl   %ecx
1102871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_INT_2ADDR_finish_div2addr:
1102971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %edx rINST
1103071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 1 %edx
1103171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 1
1103271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1103371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1103471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_MUL_LONG_2ADDR */
1103571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1103671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_MUL_LONG_2ADDR_continue:
1103771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    leal      (%ecx,%edx),%edx         # full result now in %edx:%eax
1103871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %edx,4(%esi)             # v[A+1]<- %edx
1103971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %eax,(%esi)              # v[A]<- %eax
1104071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP2(%esi)
1104171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 1 %ecx
1104271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL(rFP)
1104371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 1
1104471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %ecx
1104571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1104671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_DIV_LONG_2ADDR */
1104771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1104871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_LONG_2ADDR_continue:
1104971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG3(%esp)
1105071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %edx,OUT_ARG0(%esp)
1105171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG1(%esp)
1105271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     __divdi3
1105371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_LONG_2ADDR_finish:
1105471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %edx rINST 1
1105571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %eax rINST 0
1105671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 1 %edx
1105771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 1
1105871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1105971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1106071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_LONG_2ADDR_check_zero:
1106171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %edx,%edx
1106271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_DIV_LONG_2ADDR_notSpecial
1106371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_errDivideByZero
1106471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_LONG_2ADDR_check_neg1:
1106571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %edx,%eax
1106671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_DIV_LONG_2ADDR_notSpecial
1106771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_WORD %edx rINST 0
1106871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_WORD %ecx rINST 1
1106971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %edx,%edx
1107071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_DIV_LONG_2ADDR_notSpecial1
1107171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpl     $0x80000000,%ecx
1107271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_DIV_LONG_2ADDR_notSpecial1
1107371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* minint / -1, return minint on div, 0 on rem */
1107471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    xorl     %eax,%eax
1107571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     $0x80000000,%edx
1107671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      .LOP_DIV_LONG_2ADDR_finish
1107771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1107871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_REM_LONG_2ADDR */
1107971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1108071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_LONG_2ADDR_continue:
1108171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG3(%esp)
1108271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %edx,OUT_ARG0(%esp)
1108371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG1(%esp)
1108471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     __moddi3
1108571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_LONG_2ADDR_finish:
1108671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %edx rINST 1
1108771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %eax rINST 0
1108871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 1 %edx
1108971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 1
1109071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1109171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1109271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_LONG_2ADDR_check_zero:
1109371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %edx,%edx
1109471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_REM_LONG_2ADDR_notSpecial
1109571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_errDivideByZero
1109671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_LONG_2ADDR_check_neg1:
1109771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %edx,%eax
1109871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_REM_LONG_2ADDR_notSpecial
1109971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_WORD %edx rINST 0
1110071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_WORD %ecx rINST 1
1110171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %edx,%edx
1110271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_REM_LONG_2ADDR_notSpecial1
1110371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpl     $0x80000000,%ecx
1110471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_REM_LONG_2ADDR_notSpecial1
1110571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* minint / -1, return minint on div, 0 on rem */
1110671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    xorl     %eax,%eax
1110771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     $0,%edx
1110871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      .LOP_REM_LONG_2ADDR_finish
1110971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1111071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SHL_LONG_2ADDR */
1111171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1111271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1111371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SHL_LONG_2ADDR_finish:
1111471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 1 %edx
1111571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %eax rINST 0         # v[AA+0]<- eax
1111671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 1
1111771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1111871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1111971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SHR_LONG_2ADDR */
1112071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1112171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1112271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SHR_LONG_2ADDR_finish:
1112371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 1 %edx
1112471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %eax rINST 0    # v[AA+0]<- eax
11125f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
11126f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
11127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1112871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_USHR_LONG_2ADDR */
1112971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1113071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1113171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_USHR_LONG_2ADDR_finish:
1113271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 1 %edx
1113371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %eax rINST 0         # v[AA+0]<- eax
1113471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 1
1113571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1113671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1113771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_DIV_INT_LIT16 */
1113871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_INT_LIT16_continue_div:
1113971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cltd
1114071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    idivl   %ecx
1114171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_INT_LIT16_finish_div:
1114271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST
1114371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1114471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1114571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1114671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1114771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_REM_INT_LIT16 */
1114871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_INT_LIT16_continue_div:
1114971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cltd
1115071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    idivl   %ecx
1115171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_INT_LIT16_finish_div:
1115271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %edx rINST
1115371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1115471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1115571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1115671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1115771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_DIV_INT_LIT8 */
1115871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_INT_LIT8_continue_div:
1115971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cltd
1116071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    idivl   %ecx
1116171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_INT_LIT8_finish_div:
1116271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST
1116371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1116471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1116571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1116671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1116771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_REM_INT_LIT8 */
1116871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_INT_LIT8_continue_div:
1116971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cltd
1117071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    idivl   %ecx
1117171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_INT_LIT8_finish_div:
1117271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %edx rINST
1117371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1117471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1117571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1117671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1117771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_VOLATILE */
1117871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1117971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1118071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_VOLATILE_resolve:
1118171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
111829f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1118371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1118471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1118571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                  # pass in method->clazz
1118671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1118771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1118871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           #  returns InstrField ptr
1118971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_VOLATILE_finish
1119071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
1119171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1119271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_VOLATILE_finish:
1119371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1119471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1119571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1119671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1119771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds A
1119871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1119971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
1120071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
1120171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
1120271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl   (%ecx,%eax,1),%ecx                  # ecx<- obj.field (8/16/32 bits)
1120371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,%eax                          # eax<- A
1120471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1120571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %ecx %eax
1120671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1120771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1120871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1120971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_VOLATILE */
1121071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1121171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1121271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_VOLATILE_resolve:
1121371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
112149f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1121571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1121671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1121771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                 # pass in method->clazz
1121871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1121971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1122071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # returns InstrField ptr
1122171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_VOLATILE_finish
1122271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
1122371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1122471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_VOLATILE_finish:
1122571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1122671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1122771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1122871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1122971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds A
1123071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1123171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R rINST rINST                       # rINST<- v[A]
1123271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax   # eax<- byte offset of field
1123371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                            # object null?
1123471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                 # object was null
1123571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1123671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl   rINST,(%ecx,%eax,1)            # obj.field <- v[A](8/16/32 bits)
1123771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1123871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1123971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1124071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_VOLATILE */
1124171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1124271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1124371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1124471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1124571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_VOLATILE_resolve:
112469f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1124771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   2(rPC),%eax                        # eax<- field ref BBBB
112489f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1124971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1125071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1125171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1125271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1125371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1125471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1125571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SGET_VOLATILE_finish                 # success, continue
1125671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1125771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1125871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_VOLATILE */
1125971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1126071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1126171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1126271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1126371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_VOLATILE_resolve:
112649f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1126571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   2(rPC),%eax                        # eax<- field ref BBBB
112669f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1126771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1126871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1126971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1127071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1127171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1127271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1127371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SPUT_VOLATILE_finish                 # success, continue
1127471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1127571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1127671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_OBJECT_VOLATILE */
1127771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1127871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1127971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_OBJECT_VOLATILE_resolve:
1128071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
112819f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1128271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1128371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1128471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                  # pass in method->clazz
1128571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1128671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1128771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           #  returns InstrField ptr
1128871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_OBJECT_VOLATILE_finish
1128971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
1129071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1129171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_OBJECT_VOLATILE_finish:
1129271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1129371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1129471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1129571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1129671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds A
1129771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1129871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
1129971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
1130071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
1130171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl   (%ecx,%eax,1),%ecx                  # ecx<- obj.field (8/16/32 bits)
1130271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,%eax                          # eax<- A
1130371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1130471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %ecx %eax
1130571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1130671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1130771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1130871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_EXECUTE_INLINE */
1130971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1131071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_EXECUTE_INLINE_continue:
1131171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1131271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Extract args, call function.
1131371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  ecx = #of args (0-4)
1131471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  eax = call index
1131571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  @esp = return addr
1131671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  esp is -4 from normal
1131771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1131871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  Go ahead and load all 4 args, even if not used.
1131971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1132071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl    4(rPC),%edx
1132171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1132271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $0xf,%ecx
1132371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    andl      %edx,%ecx
1132471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R  %ecx %ecx
1132571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    sarl      $4,%edx
1132671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %ecx,4+OUT_ARG0(%esp)
1132771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1132871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $0xf,%ecx
1132971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    andl      %edx,%ecx
1133071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R  %ecx %ecx
1133171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    sarl      $4,%edx
1133271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %ecx,4+OUT_ARG1(%esp)
1133371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1133471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $0xf,%ecx
1133571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    andl      %edx,%ecx
1133671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R  %ecx %ecx
1133771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    sarl      $4,%edx
1133871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %ecx,4+OUT_ARG2(%esp)
1133971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1134071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $0xf,%ecx
1134171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    andl      %edx,%ecx
1134271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R  %ecx %ecx
1134371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    sarl      $4,%edx
1134471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %ecx,4+OUT_ARG3(%esp)
1134571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1134671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    sall      $4,%eax      # index *= sizeof(table entry)
1134771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       *gDvmInlineOpsTable(%eax)
1134871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    # will return to caller of .LOP_EXECUTE_INLINE_continue
1134971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1135071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_OBJECT_QUICK */
1135171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1135271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_OBJECT_QUICK_finish:
1135371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     rINST,rINST               # did we store null?
1135471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
113559f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_cardTable(%eax),%eax  # get card table base
1135671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        1f                            # skip card mark if null store
1135771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    shrl      $GC_CARD_SHIFT,%ecx          # object head to card number
1135871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movb      %al,(%eax,%ecx)               # mark card based on object head
1135971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1:
1136071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1136171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1136271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1136371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_OBJECT_VOLATILE */
1136471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1136571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1136671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_OBJECT_VOLATILE_resolve:
1136771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
113689f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1136971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1137071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1137171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                 # pass in method->clazz
1137271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1137371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1137471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # returns InstrField ptr
1137571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_OBJECT_VOLATILE_finish
1137671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
1137771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1137871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_OBJECT_VOLATILE_finish:
1137971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1138071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1138171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1138271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1138371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   %edx is scratch, but needs to be unspilled
1138471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds A
1138571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1138671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R rINST rINST                      # rINST<- v[A]
1138771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
1138871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
1138971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
1139071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,(%ecx,%eax)      # obj.field <- v[A](8/16/32 bits)
113919f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%eax
1139271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   rINST,rINST                         # stored a NULL?
113939f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_cardTable(%eax),%eax        # get card table base
1139471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1139571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      1f                                  # skip card mark if null store
1139671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    shrl    $GC_CARD_SHIFT,%ecx                # object head to card number
1139771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movb    %al,(%eax,%ecx)                     # mark card using object head
1139871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1:
1139971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1140071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1140171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1140271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_OBJECT_VOLATILE */
1140371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1140471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1140571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1140671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1140771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_OBJECT_VOLATILE_resolve:
114089f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1140971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   2(rPC),%eax                        # eax<- field ref BBBB
114109f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1141171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1141271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1141371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1141471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1141571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1141671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1141771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SGET_OBJECT_VOLATILE_finish                 # success, continue
1141871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1141971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1142071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_OBJECT_VOLATILE */
1142171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1142271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1142371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_OBJECT_VOLATILE_continue:
1142471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %ecx,offStaticField_value(%eax)    # do the store
1142571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %ecx,%ecx                          # stored null object ptr?
1142671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 2 %edx
1142771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        1f                                 # skip card mark if null
114289f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
1142971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offField_clazz(%eax),%eax          # eax<- method->clazz
114309f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_cardTable(%ecx),%ecx       # get card table base
1143171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    shrl      $GC_CARD_SHIFT,%eax               # head to card number
1143271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movb      %cl,(%ecx,%eax)                    # mark card
1143371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1:
1143471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2
1143571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1143671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1143771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_OBJECT_VOLATILE_resolve:
114389f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1143971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   2(rPC),%eax                        # eax<- field ref BBBB
114409f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1144171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1144271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1144371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1144471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1144571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1144671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1144771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SPUT_OBJECT_VOLATILE_finish                 # success, continue
1144871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1144971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1145071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CONST_CLASS_JUMBO */
1145171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1145271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* This is the less common path, so we'll redo some work
1145371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao   here rather than force spills on the common path */
1145471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CONST_CLASS_JUMBO_resolve:
114559f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%eax
1145671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
114579f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%eax),%eax # eax<- self->method
1145871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     $1,OUT_ARG2(%esp)        # true
1145971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     2(rPC),%ecx               # ecx<- AAAAAAAA
1146071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%eax),%eax
1146171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG1(%esp)
1146271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG0(%esp)
1146371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveClass           # go resolve
1146471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax                 # failed?
1146571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je       common_exceptionThrown
1146671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST
1146771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 4 %edx
1146871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 4
1146971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1147071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1147171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CHECK_CAST_JUMBO */
11472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1147371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1147471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Trivial test failed, need to perform full check.  This is common.
1147571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  ecx holds obj->clazz
1147671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  eax holds class resolved from AAAAAAAA
1147771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  rINST holds object
1147871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1147971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CHECK_CAST_JUMBO_fullcheck:
1148071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,sReg0                 # we'll need the desired class on failure
1148171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG1(%esp)
1148271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG0(%esp)
1148371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmInstanceofNonTrivial    # eax<- boolean result
1148471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                  # failed?
1148571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_CHECK_CAST_JUMBO_okay           # no, success
11486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1148771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    # A cast has failed.  We need to throw a ClassCastException.
1148871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
1148971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offObject_clazz(rINST),%eax
1149071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG0(%esp)                 # arg0<- obj->clazz
1149171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    sReg0,%ecx
1149271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG1(%esp)                 # arg1<- desired class
1149371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmThrowClassCastException
1149471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
11495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1149671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1149771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Resolution required.  This is the least-likely path, and we're
1149871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * going to have to recreate some data.
1149971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1150071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  rINST holds object
1150171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1150271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CHECK_CAST_JUMBO_resolve:
115039f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
1150471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
1150571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%eax                # eax<- AAAAAAAA
115069f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%ecx),%ecx  # ecx<- self->method
1150771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG1(%esp)        # arg1<- AAAAAAAA
1150871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%ecx),%ecx # ecx<- metho->clazz
1150971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $0,OUT_ARG2(%esp)         # arg2<- false
1151071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG0(%esp)        # arg0<- method->clazz
1151171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveClass            # eax<- resolved ClassObject ptr
1151271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                  # got null?
1151371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_exceptionThrown     # yes, handle exception
1151471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offObject_clazz(rINST),%ecx  # ecx<- obj->clazz
1151571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_CHECK_CAST_JUMBO_resolved       # pick up where we left off
11516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1151771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INSTANCE_OF_JUMBO */
1151871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1151971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1152071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Trivial test failed, need to perform full check.  This is common.
1152171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  eax holds obj->clazz
1152271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  ecx holds class resolved from BBBB
1152371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  rINST has BA
1152471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1152571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_JUMBO_fullcheck:
1152671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG0(%esp)
1152771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG1(%esp)
1152871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmInstanceofNonTrivial     # eax<- boolean result
1152971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    # fall through to OP_INSTANCE_OF_JUMBO_store
1153071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1153171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1153271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * eax holds boolean result
1153371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * rINST holds BBBB
1153471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1153571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_JUMBO_store:
1153671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 5 %edx
1153771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 5
1153871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST                 # vBBBB<- eax
11539f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
11540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1154171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1154271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Trivial test succeeded, save and bail.
1154371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds BBBB
1154471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1154571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_JUMBO_trivial:
1154671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 5 %edx
1154771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 5
1154871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $1,%eax
1154971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST                 # vBBBB<- true
1155071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
11551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1155271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1155371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Resolution required.  This is the least-likely path.
1155471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1155571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  edx holds AAAAAAAA
1155671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1155771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_JUMBO_resolve:
1155871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG1(%esp)         # arg1<- AAAAAAAA
115599f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
115609f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%ecx),%ecx
1156171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $1,OUT_ARG2(%esp)          # arg2<- true
1156271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%ecx),%ecx  # ecx<- method->clazz
1156371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
1156471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG0(%esp)         # arg0<- method->clazz
1156571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveClass             # eax<- resolved ClassObject ptr
1156671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                   # success?
1156771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_exceptionThrown      # no, handle exception
1156871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* Now, we need to sync up with fast path.  We need eax to
1156971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * hold the obj->clazz, and ecx to hold the resolved class
1157071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */
1157171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,%ecx                   # ecx<- resolved class
1157271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  8(rPC),%eax                 # eax<- CCCC
1157371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R %eax %eax                # eax<- vCCCC (obj)
1157471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offObject_clazz(%eax),%eax  # eax<- obj->clazz
1157571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     .LOP_INSTANCE_OF_JUMBO_resolved
11576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1157771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_NEW_INSTANCE_JUMBO */
11578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1157971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_JUMBO_initialized:  # on entry, ecx<- class
1158071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* TODO: remove test for interface/abstract, now done in verifier */
1158171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     $(ACC_INTERFACE|ACC_ABSTRACT),offClassObject_accessFlags(%ecx)
1158271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $ALLOC_DONT_TRACK,OUT_ARG1(%esp)
1158371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne       .LOP_NEW_INSTANCE_JUMBO_abstract
1158471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_JUMBO_finish: # ecx=class
1158571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1158671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmAllocObject             # eax<- new object
1158771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 4 %edx
1158871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax                  # success?
1158971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je       common_exceptionThrown     # no, bail out
1159071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST
1159171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 4
1159271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1159371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1159471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1159571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Class initialization required.
1159671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1159771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  ecx holds class object
1159871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1159971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_JUMBO_needinit:
1160071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                    # save object
1160171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG0(%esp)
1160271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmInitClass                # initialize class
1160371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)                  # restore object
1160471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                   # success?
1160571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_NEW_INSTANCE_JUMBO_initialized     # success, continue
1160671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown      # go deal with init exception
1160771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1160871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1160971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Resolution required.  This is the least-likely path.
1161071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1161171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1161271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_JUMBO_resolve:
116139f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
1161471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%eax                 # eax<- AAAAAAAA
116159f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%ecx),%ecx   # ecx<- self->method
1161671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG1(%esp)
1161771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%ecx),%ecx  # ecx<- method->clazz
1161871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $0,OUT_ARG2(%esp)
1161971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG0(%esp)
1162071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveClass             # call(clazz,off,flags)
1162171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,%ecx                   # ecx<- resolved ClassObject ptr
1162271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                   # success?
1162371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_NEW_INSTANCE_JUMBO_resolved        # good to go
1162471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown      # no, handle exception
1162571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1162671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1162771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * TODO: remove this
1162871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * We can't instantiate an abstract class or interface, so throw an
1162971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * InstantiationError with the class descriptor as the message.
1163071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1163171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  ecx holds class object
1163271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1163371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_JUMBO_abstract:
1163471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offClassObject_descriptor(%ecx),%eax
1163571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $.LstrInstantiationError,OUT_ARG0(%esp)
1163671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG1(%esp)
1163771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmThrowExceptionWithClassMessage
1163871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
1163971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1164071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_NEW_ARRAY_JUMBO */
1164171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1164271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1164371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Resolve class.  (This is an uncommon case.)
1164471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  ecx holds class (null here)
1164571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  eax holds array length (vCCCC)
1164671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1164771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_ARRAY_JUMBO_resolve:
116489f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
1164971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%eax)                   # save array length
116509f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%ecx),%ecx  # ecx<- self->method
1165171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%eax                # eax<- AAAAAAAA
1165271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%ecx),%ecx # ecx<- method->clazz
1165371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG1(%esp)
1165471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $0,OUT_ARG2(%esp)
1165571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG0(%esp)
1165671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveClass            # eax<- call(clazz,ref,flag)
1165771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,%ecx
1165871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%eax)
1165971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                  # successful resolution?
1166071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_exceptionThrown     # no, bail.
1166171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao# fall through to OP_NEW_ARRAY_JUMBO_finish
1166271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1166371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1166471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Finish allocation
1166571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1166671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * ecx holds class
1166771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * eax holds array length (vCCCC)
1166871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1166971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_ARRAY_JUMBO_finish:
1167071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG0(%esp)
1167171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG1(%esp)
1167271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $ALLOC_DONT_TRACK,OUT_ARG2(%esp)
1167371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmAllocArrayByClass    # eax<- call(clazz,length,flags)
1167471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 5 %edx
1167571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax               # failed?
1167671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_exceptionThrown  # yup - go handle
1167771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %eax rINST
1167871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 5
1167971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1168071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1168171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_FILLED_NEW_ARRAY_JUMBO */
1168271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1168371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_JUMBO_more:
1168471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%eax),%eax        # eax<- method->clazz
1168571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG0(%esp)               # arg0<- clazz
1168671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveClass                   # eax<- call(clazz,ref,flag)
1168771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                         # null?
1168871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_exceptionThrown            # yes, handle it
1168971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1169071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao       # note: fall through to .LOP_FILLED_NEW_ARRAY_JUMBO_continue
1169171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1169271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1169371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * On entry:
1169471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *    eax holds array class [r0]
1169571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *    ecx is scratch
1169671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1169771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_JUMBO_continue:
1169871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offClassObject_descriptor(%eax),%ecx  # ecx<- arrayClass->descriptor
1169971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $ALLOC_DONT_TRACK,OUT_ARG2(%esp)     # arg2<- flags
1170071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzbl  1(%ecx),%ecx                          # ecx<- descriptor[1]
1170171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG0(%esp)                   # arg0<- arrayClass
117029f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%eax
1170371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpb    $'I',%cl                             # supported?
1170471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      1f
1170571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpb    $'L',%cl
1170671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      1f
1170771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpb    $'[',%cl
1170871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_FILLED_NEW_ARRAY_JUMBO_notimpl                  # no, not handled yet
1170971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1:
117109f601a917c8878204482c37aec7005054b6776fabuzbee    movl    %ecx,offThread_retval+4(%eax)           # save type
1171171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,OUT_ARG1(%esp)                  # arg1<- BBBB (length)
1171271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmAllocArrayByClass     # eax<- call(arrayClass, length, flags)
117139f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
1171471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                             # alloc successful?
1171571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_exceptionThrown                # no, handle exception
117169f601a917c8878204482c37aec7005054b6776fabuzbee    movl    %eax,offThread_retval(%ecx)             # retval.l<- new array
1171771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  8(rPC),%ecx                           # ecx<- CCCC
1171871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    leal    offArrayObject_contents(%eax),%eax    # eax<- newArray->contents
11719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1172071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* at this point:
1172171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *     eax is pointer to tgt
1172271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *     rINST is length
1172371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *     ecx is CCCC
1172471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *  We now need to copy values from registers into the array
1172571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */
11726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1172771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    # set up src pointer
1172871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP2(%esi)
1172971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP3(%edi)
1173071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    leal    (rFP,%ecx,4),%esi # set up src ptr
1173171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,%edi         # set up dst ptr
1173271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,%ecx        # load count register
1173371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    rep
1173471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movsd
1173571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP2(%esi)
1173671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP3(%edi)
117379f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
117389f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_retval+4(%ecx),%eax      # eax<- type
1173971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 5 %edx
11740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1174171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpb    $'I',%al                        # Int array?
1174271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      5f                               # skip card mark if so
117439f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_retval(%ecx),%eax        # eax<- object head
117449f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_cardTable(%ecx),%ecx     # card table base
1174571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    shrl    $GC_CARD_SHIFT,%eax             # convert to card num
1174671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movb    %cl,(%ecx,%eax)                  # mark card based on object head
1174771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao5:
1174871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 5
1174971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
11750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
11751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1175271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1175371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Throw an exception indicating that we have not implemented this
1175471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * mode of filled-new-array.
1175571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1175671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_JUMBO_notimpl:
1175771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $.LstrInternalErrorA,%eax
1175871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG0(%esp)
1175971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $.LstrFilledNewArrayNotImplA,%eax
1176071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG1(%esp)
1176171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmThrowException
1176271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
11763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1176471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_JUMBO */
11765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
11766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1176771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_JUMBO_resolve:
1176871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
117699f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1177071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1177171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1177271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                  # pass in method->clazz
1177371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1177471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1177571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           #  returns InstrField ptr
1177671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_JUMBO_finish
1177771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
11778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1177971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_JUMBO_finish:
1178071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1178171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1178271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1178371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1178471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds BBBB
1178571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1178671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
1178771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
1178871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
1178971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl   (%ecx,%eax,1),%ecx                  # ecx<- obj.field (8/16/32 bits)
1179071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,%eax                          # eax<- BBBB
1179171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 5 %edx
1179271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %ecx %eax
1179371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 5
11794f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
11795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1179671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_WIDE_JUMBO */
11797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
11798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1179971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_WIDE_JUMBO_resolve:
1180071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
118019f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1180271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1180371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save objpointer across call
1180471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rPC,OUT_ARG0(%esp)                  # pass in method->clazz
1180571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1180671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1180771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # returns InstrField ptr
1180871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_WIDE_JUMBO_finish
1180971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
11810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1181171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_WIDE_JUMBO_finish:
1181271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1181371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1181471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1181571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1181671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds BBBB
1181771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1181871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
1181971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
1182071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
1182171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    leal    (%ecx,%eax,1),%eax                  # eax<- address of field
1182271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%eax),%ecx                         # ecx<- lsw
1182371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    4(%eax),%eax                        # eax<- msw
1182471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 5 %edx
1182571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %ecx rINST 0
1182671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG_WORD %eax rINST 1
1182771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 5
11828f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
11829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1183071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_OBJECT_JUMBO */
11831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
11832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1183371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_OBJECT_JUMBO_resolve:
1183471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
118359f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1183671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1183771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1183871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                  # pass in method->clazz
1183971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1184071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1184171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           #  returns InstrField ptr
1184271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_OBJECT_JUMBO_finish
1184371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
1184471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1184571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_OBJECT_JUMBO_finish:
1184671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1184771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1184871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1184971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1185071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds BBBB
1185171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1185271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
1185371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
1185471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
1185571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl   (%ecx,%eax,1),%ecx                  # ecx<- obj.field (8/16/32 bits)
1185671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,%eax                          # eax<- BBBB
1185771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 5 %edx
1185871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %ecx %eax
1185971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 5
11860f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
11861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1186271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_BOOLEAN_JUMBO */
11863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
11864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1186571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BOOLEAN_JUMBO_resolve:
1186671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
118679f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1186871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1186971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1187071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                  # pass in method->clazz
1187171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1187271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1187371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           #  returns InstrField ptr
1187471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_BOOLEAN_JUMBO_finish
1187571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
1187671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1187771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BOOLEAN_JUMBO_finish:
1187871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1187971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1188071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1188171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1188271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds BBBB
1188371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1188471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
1188571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
1188671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
1188771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzbl   (%ecx,%eax,1),%ecx                  # ecx<- obj.field (8/16/32 bits)
1188871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,%eax                          # eax<- BBBB
1188971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 5 %edx
1189071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %ecx %eax
1189171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 5
11892f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
11893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1189471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_BYTE_JUMBO */
11895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
11896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1189771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BYTE_JUMBO_resolve:
1189871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
118999f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1190071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1190171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1190271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                  # pass in method->clazz
1190371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1190471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1190571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           #  returns InstrField ptr
1190671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_BYTE_JUMBO_finish
1190771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
11908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1190971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BYTE_JUMBO_finish:
1191071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1191171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1191271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1191371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1191471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds BBBB
1191571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1191671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
1191771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
1191871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
1191971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movsbl   (%ecx,%eax,1),%ecx                  # ecx<- obj.field (8/16/32 bits)
1192071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,%eax                          # eax<- BBBB
1192171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 5 %edx
1192271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %ecx %eax
1192371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 5
1192471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
11925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1192671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_CHAR_JUMBO */
11927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
11928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1192971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_CHAR_JUMBO_resolve:
1193071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
119319f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1193271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1193371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1193471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                  # pass in method->clazz
1193571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1193671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1193771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           #  returns InstrField ptr
1193871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_CHAR_JUMBO_finish
1193971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
11940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1194171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_CHAR_JUMBO_finish:
1194271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1194371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1194471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1194571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1194671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds BBBB
1194771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1194871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
1194971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
1195071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
1195171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl   (%ecx,%eax,1),%ecx                  # ecx<- obj.field (8/16/32 bits)
1195271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,%eax                          # eax<- BBBB
1195371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 5 %edx
1195471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %ecx %eax
1195571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 5
11956f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
11957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1195871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_SHORT_JUMBO */
11959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
11960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1196171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_SHORT_JUMBO_resolve:
1196271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
119639f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1196471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1196571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1196671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                  # pass in method->clazz
1196771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1196871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1196971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           #  returns InstrField ptr
1197071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IGET_SHORT_JUMBO_finish
1197171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
11972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1197371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_SHORT_JUMBO_finish:
1197471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1197571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1197671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1197771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1197871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds BBBB
1197971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1198071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
1198171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
1198271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
1198371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movswl   (%ecx,%eax,1),%ecx                  # ecx<- obj.field (8/16/32 bits)
1198471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,%eax                          # eax<- BBBB
1198571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 5 %edx
1198671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG %ecx %eax
1198771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 5
11988f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
11989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1199071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_JUMBO */
11991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
11992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1199371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_JUMBO_resolve:
1199471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
119959f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1199671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1199771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1199871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                 # pass in method->clazz
1199971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1200071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1200171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # returns InstrField ptr
1200271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_JUMBO_finish
1200371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
1200471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1200571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_JUMBO_finish:
1200671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1200771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1200871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1200971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1201071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds BBBB
1201171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1201271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R rINST rINST                       # rINST<- v[BBBB]
1201371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax   # eax<- byte offset of field
1201471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                            # object null?
1201571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                 # object was null
1201671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 5 %edx
1201771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl   rINST,(%ecx,%eax,1)            # obj.field <- v[BBBB](8/16/32 bits)
1201871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 5
12019f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
12020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1202171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_WIDE_JUMBO */
12022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1202471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_WIDE_JUMBO_resolve:
1202571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
120269f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1202771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1202871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1202971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                 # pass in method->clazz
1203071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1203171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1203271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           #  ... which returns InstrField ptr
1203371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_WIDE_JUMBO_finish
1203471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
12035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1203671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_WIDE_JUMBO_finish:
1203771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1203871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1203971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1204071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1204171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   %edx is scratch, but needs to be unspilled
1204271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds BBBB
1204371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1204471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
1204571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
1204671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
1204771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    leal    (%ecx,%eax,1),%eax                  # eax<- address of field
1204871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_WORD %ecx rINST 0                  # ecx<- lsw
1204971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_WORD rINST rINST 1                 # rINST<- msw
1205071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 5 %edx
1205171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,4(%eax)
1205271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,(%eax)
1205371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 5
12054f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
12055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1205671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_OBJECT_JUMBO */
12057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1205971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_OBJECT_JUMBO_resolve:
1206071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
120619f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1206271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1206371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1206471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                 # pass in method->clazz
1206571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1206671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1206771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # returns InstrField ptr
1206871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_OBJECT_JUMBO_finish
1206971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
1207071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1207171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_OBJECT_JUMBO_finish:
1207271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1207371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1207471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1207571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1207671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   %edx is scratch, but needs to be unspilled
1207771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds BBBB
1207871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1207971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R rINST rINST                      # rINST<- v[BBBB]
1208071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
1208171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                           # object null?
1208271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                # object was null
1208371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    rINST,(%ecx,%eax)      # obj.field <- v[BBBB](8/16/32 bits)
120849f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%eax
1208571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   rINST,rINST                         # stored a NULL?
120869f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_cardTable(%eax),%eax        # get card table base
1208771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 5 %edx
1208871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      1f                                  # skip card mark if null store
1208971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    shrl    $GC_CARD_SHIFT,%ecx                # object head to card number
1209071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movb    %al,(%eax,%ecx)                     # mark card using object head
1209171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1:
1209271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 5
12093f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
12094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1209571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_BOOLEAN_JUMBO */
12096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1209871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BOOLEAN_JUMBO_resolve:
1209971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
121009f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1210171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1210271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1210371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                 # pass in method->clazz
1210471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1210571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1210671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # returns InstrField ptr
1210771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_BOOLEAN_JUMBO_finish
1210871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
1210971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1211071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BOOLEAN_JUMBO_finish:
1211171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1211271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1211371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1211471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1211571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds BBBB
1211671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1211771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R rINST rINST                       # rINST<- v[BBBB]
1211871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax   # eax<- byte offset of field
1211971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                            # object null?
1212071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                 # object was null
1212171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 5 %edx
1212271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movb   rINSTbl,(%ecx,%eax,1)            # obj.field <- v[BBBB](8/16/32 bits)
1212371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 5
12124f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
12125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1212671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_BYTE_JUMBO */
12127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1212971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BYTE_JUMBO_resolve:
1213071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC
121319f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
1213271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
1213371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%ecx)                            # save obj pointer across call
1213471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                 # pass in method->clazz
1213571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveInstField                 #  ... to dvmResolveInstField
1213671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%ecx)
1213771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # returns InstrField ptr
1213871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_BYTE_JUMBO_finish
1213971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown
12140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1214171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BYTE_JUMBO_finish:
1214271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1214371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1214471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax holds resolved field
1214571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx holds object
1214671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds BBBB
1214771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1214871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R rINST rINST                       # rINST<- v[BBBB]
1214971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax   # eax<- byte offset of field
1215071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                            # object null?
1215171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                 # object was null
1215271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 5 %edx
1215371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movb   rINSTbl,(%ecx,%eax,1)            # obj.field <- v[BBBB](8/16/32 bits)
1215471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 5
12155f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
12156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1215771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_CHAR_JUMBO */
121583d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
121593d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
1216071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_CHAR_JUMBO_resolve:
12161f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
121629f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
12163f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
12164f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SPILL_TMP1(%ecx)                            # save obj pointer across call
1216571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %edx,OUT_ARG0(%esp)                 # pass in method->clazz
12166f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    call    dvmResolveInstField                 #  ... to dvmResolveInstField
12167f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    UNSPILL_TMP1(%ecx)
1216871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                           # returns InstrField ptr
1216971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_CHAR_JUMBO_finish
121703d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    jmp     common_exceptionThrown
121713d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
1217271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_CHAR_JUMBO_finish:
121733d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /*
121743d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * Currently:
121753d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     *   eax holds resolved field
121763d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     *   ecx holds object
1217771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds BBBB
12178f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee     */
1217971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R rINST rINST                       # rINST<- v[BBBB]
1218071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offInstField_byteOffset(%eax),%eax   # eax<- byte offset of field
1218171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %ecx,%ecx                            # object null?
1218271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je      common_errNullObject                 # object was null
1218371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 5 %edx
1218471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movw   rINSTw,(%ecx,%eax,1)            # obj.field <- v[BBBB](8/16/32 bits)
1218571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 5
12186f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
121873d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
1218871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_SHORT_JUMBO */
121893d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
121903d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
1219171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_SHORT_JUMBO_resolve:
12192f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
121939f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_method(%edx),%edx           # edx<- current method
12194f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
12195f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SPILL_TMP1(%ecx)                            # save obj pointer across call
12196f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %edx,OUT_ARG0(%esp)                 # pass in method->clazz
12197f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    call    dvmResolveInstField                 #  ... to dvmResolveInstField
12198f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    UNSPILL_TMP1(%ecx)
12199f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    testl   %eax,%eax                           # returns InstrField ptr
1220071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_IPUT_SHORT_JUMBO_finish
122013d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    jmp     common_exceptionThrown
122023d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
1220371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_SHORT_JUMBO_finish:
122043d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /*
122053d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * Currently:
122063d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     *   eax holds resolved field
122073d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     *   ecx holds object
1220871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   rINST holds BBBB
122093d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     */
1221071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R rINST rINST                       # rINST<- v[BBBB]
122113d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movl    offInstField_byteOffset(%eax),%eax   # eax<- byte offset of field
122123d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    testl   %ecx,%ecx                            # object null?
122133d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    je      common_errNullObject                 # object was null
1221471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 5 %edx
1221571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movw   rINSTw,(%ecx,%eax,1)            # obj.field <- v[BBBB](8/16/32 bits)
1221671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 5
1221771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_NEXT_R %edx
1221871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1221971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_JUMBO */
1222071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1222171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1222271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1222371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1222471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_JUMBO_resolve:
122259f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1222671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     2(rPC),%eax                        # eax<- field ref AAAAAAAA
122279f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1222871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1222971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1223071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1223171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1223271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1223371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1223471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SGET_JUMBO_finish                 # success, continue
1223571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1223671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1223771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_WIDE_JUMBO */
1223871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1223971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1224071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1224171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1224271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_WIDE_JUMBO_resolve:
122439f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1224471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     2(rPC),%eax                        # eax<- field ref AAAAAAAA
122459f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1224671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1224771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1224871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1224971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1225071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1225171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1225271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SGET_WIDE_JUMBO_finish                 # success, continue
1225371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1225471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1225571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_OBJECT_JUMBO */
1225671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1225771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1225871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1225971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1226071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_OBJECT_JUMBO_resolve:
122619f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1226271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     2(rPC),%eax                        # eax<- field ref AAAAAAAA
122639f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1226471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1226571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1226671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1226771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1226871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1226971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1227071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SGET_OBJECT_JUMBO_finish                 # success, continue
1227171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1227271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1227371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_BOOLEAN_JUMBO */
1227471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1227571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1227671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1227771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1227871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_BOOLEAN_JUMBO_resolve:
122799f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1228071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     2(rPC),%eax                        # eax<- field ref AAAAAAAA
122819f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1228271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1228371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1228471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1228571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1228671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1228771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1228871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SGET_BOOLEAN_JUMBO_finish                 # success, continue
1228971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1229071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1229171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_BYTE_JUMBO */
1229271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1229371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1229471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1229571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1229671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_BYTE_JUMBO_resolve:
122979f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1229871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     2(rPC),%eax                        # eax<- field ref AAAAAAAA
122999f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1230071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1230171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1230271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1230371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1230471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1230571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1230671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SGET_BYTE_JUMBO_finish                 # success, continue
1230771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1230871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1230971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_CHAR_JUMBO */
1231071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1231171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1231271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1231371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1231471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_CHAR_JUMBO_resolve:
123159f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1231671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     2(rPC),%eax                        # eax<- field ref AAAAAAAA
123179f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1231871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1231971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1232071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1232171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1232271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1232371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1232471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SGET_CHAR_JUMBO_finish                 # success, continue
1232571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1232671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1232771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_SHORT_JUMBO */
1232871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1232971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1233071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1233171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1233271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_SHORT_JUMBO_resolve:
123339f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1233471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     2(rPC),%eax                        # eax<- field ref AAAAAAAA
123359f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1233671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1233771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1233871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1233971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1234071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1234171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1234271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SGET_SHORT_JUMBO_finish                 # success, continue
1234371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1234471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1234571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_JUMBO */
1234671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1234771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1234871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1234971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1235071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_JUMBO_resolve:
123519f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1235271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     2(rPC),%eax                        # eax<- field ref AAAAAAAA
123539f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1235471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1235571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1235671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1235771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1235871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1235971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1236071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SPUT_JUMBO_finish                 # success, continue
1236171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1236271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1236371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_WIDE_JUMBO */
1236471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1236571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1236671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1236771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1236871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_WIDE_JUMBO_resolve:
123699f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1237071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     2(rPC),%eax                        # eax<- field ref AAAAAAAA
123719f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1237271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1237371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1237471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1237571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1237671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1237771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1237871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SPUT_WIDE_JUMBO_finish                 # success, continue
1237971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1238071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1238171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_OBJECT_JUMBO */
1238271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1238371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1238471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_OBJECT_JUMBO_continue:
1238571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %ecx,offStaticField_value(%eax)    # do the store
1238671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %ecx,%ecx                          # stored null object ptr?
1238771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_INST_OPCODE 4 %edx
1238871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        1f                                 # skip card mark if null
123899f601a917c8878204482c37aec7005054b6776fabuzbee    movl      rSELF,%ecx
1239071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offField_clazz(%eax),%eax          # eax<- method->clazz
123919f601a917c8878204482c37aec7005054b6776fabuzbee    movl      offThread_cardTable(%ecx),%ecx       # get card table base
1239271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    shrl      $GC_CARD_SHIFT,%eax               # head to card number
1239371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movb      %cl,(%ecx,%eax)                    # mark card
1239471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1:
1239571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 4
12396f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
123973d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
1239871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_OBJECT_JUMBO_resolve:
123999f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1240071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     2(rPC),%eax                        # eax<- field ref AAAAAAAA
124019f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1240271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1240371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1240471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1240571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1240671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1240771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1240871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SPUT_OBJECT_JUMBO_finish                 # success, continue
1240971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1241071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1241171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_BOOLEAN_JUMBO */
1241271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1241371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1241471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
1241571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1241671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_BOOLEAN_JUMBO_resolve:
124179f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1241871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     2(rPC),%eax                        # eax<- field ref AAAAAAAA
124199f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1242071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1242171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1242271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1242371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1242471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1242571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1242671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SPUT_BOOLEAN_JUMBO_finish                 # success, continue
1242771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
1242871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1242971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_BYTE_JUMBO */
124303d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
124313d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /*
124323d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * Go resolve the field
124333d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     */
1243471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_BYTE_JUMBO_resolve:
124359f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1243671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     2(rPC),%eax                        # eax<- field ref AAAAAAAA
124379f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
12438f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC                                   # could throw, need to export
124393d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
124403d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movl     %eax,OUT_ARG1(%esp)
124413d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movl     %ecx,OUT_ARG0(%esp)
124423d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
124433d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    testl    %eax,%eax
1244471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SPUT_BYTE_JUMBO_finish                 # success, continue
124453d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    jmp      common_exceptionThrown             # no, handle exception
124463d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
1244771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_CHAR_JUMBO */
124483d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
124493d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /*
124503d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     * Go resolve the field
124513d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     */
1245271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_CHAR_JUMBO_resolve:
124539f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1245471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     2(rPC),%eax                        # eax<- field ref AAAAAAAA
124559f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
12456f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC                                   # could throw, need to export
124573d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
124583d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movl     %eax,OUT_ARG1(%esp)
124593d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    movl     %ecx,OUT_ARG0(%esp)
124603d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
124613d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    testl    %eax,%eax
1246271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SPUT_CHAR_JUMBO_finish                 # success, continue
124633d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    jmp      common_exceptionThrown             # no, handle exception
124643d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
1246571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_SHORT_JUMBO */
12466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1246871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Go resolve the field
12469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1247071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_SHORT_JUMBO_resolve:
124719f601a917c8878204482c37aec7005054b6776fabuzbee    movl     rSELF,%ecx
1247271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     2(rPC),%eax                        # eax<- field ref AAAAAAAA
124739f601a917c8878204482c37aec7005054b6776fabuzbee    movl     offThread_method(%ecx),%ecx          # ecx<- current method
1247471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC                                   # could throw, need to export
1247571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     offMethod_clazz(%ecx),%ecx         # ecx<- method->clazz
1247671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %eax,OUT_ARG1(%esp)
1247771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl     %ecx,OUT_ARG0(%esp)
1247871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call     dvmResolveStaticField              # eax<- resolved StaticField ptr
1247971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl    %eax,%eax
1248071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne      .LOP_SPUT_SHORT_JUMBO_finish                 # success, continue
1248171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp      common_exceptionThrown             # no, handle exception
12482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1248371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_VIRTUAL_JUMBO */
12484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1248671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_VIRTUAL_JUMBO_more:
1248771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offMethod_clazz(%eax),%eax  # ecx<- method->clazz
1248871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %eax,OUT_ARG0(%esp)         # arg0<- clazz
1248971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- flags
1249071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call      dvmResolveMethod            # eax<- call(clazz, ref, flags)
1249171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                   # got null?
1249271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne       .LOP_INVOKE_VIRTUAL_JUMBO_continue        # no, continue
1249371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       common_exceptionThrown      # yes, handle exception
12494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1249571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* At this point:
1249671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   eax = resolved base method
1249771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   ecx = scratch
1249871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1249971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_VIRTUAL_JUMBO_continue:
1250071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl    8(rPC),%ecx               # ecx<- CCCC
1250171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG_R  %ecx %ecx               # ecx<- "this"
1250271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl    offMethod_methodIndex(%eax),%eax  # eax<- baseMethod->methodIndex
1250371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %ecx,%ecx                 # null this?
1250471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je        common_errNullObject      # go if so
1250571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offObject_clazz(%ecx),%ecx  # ecx<- thisPtr->clazz
1250671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      offClassObject_vtable(%ecx),%ecx # ecx<- thisPtr->clazz->vtable
1250771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      (%ecx,%eax,4),%eax        # eax<- vtable[methodIndex]
1250871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       common_invokeMethodJumbo
125093d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
1251071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_SUPER_JUMBO */
125113d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
1251271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1251371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * At this point:
1251471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  ecx = resolved base method [r0]
1251571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  eax = method->clazz [r9]
1251671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1251771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_JUMBO_continue:
1251871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offClassObject_super(%eax),%eax   # eax<- method->clazz->super
1251971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl  offMethod_methodIndex(%ecx),%ecx  # ecx<- baseMthod->methodIndex
1252071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpl    offClassObject_vtableCount(%eax),%ecx # compare(methodIndex,vtableCount)
1252171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jae     .LOP_INVOKE_SUPER_JUMBO_nsm           # method not present in superclass
1252271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offClassObject_vtable(%eax),%eax   # eax<- ...clazz->super->vtable
1252371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    (%eax,%ecx,4),%eax        # eax<- vtable[methodIndex]
1252471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_invokeMethodJumbo
125253d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
125263d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
1252771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* At this point:
1252871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * ecx = null (needs to be resolved base method)
1252971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * eax = method->clazz
1253071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    */
1253171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_JUMBO_resolve:
1253271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SPILL_TMP1(%eax)                    # method->clazz
1253371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,OUT_ARG0(%esp)         # arg0<- method->clazz
1253471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    2(rPC),%ecx                 # ecx<- AAAAAAAA
1253571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    $METHOD_VIRTUAL,OUT_ARG2(%esp)  # arg2<- resolver method type
1253671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %ecx,OUT_ARG1(%esp)         # arg1<- ref
1253771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call    dvmResolveMethod            # eax<- call(clazz, ref, flags)
1253871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl   %eax,%eax                   # got null?
1253971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    %eax,%ecx                   # ecx<- resolved base method
1254071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    UNSPILL_TMP1(%eax)                  # restore method->clazz
1254171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne     .LOP_INVOKE_SUPER_JUMBO_continue        # good to go - continue
1254271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_exceptionThrown      # handle exception
125433d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
125443d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /*
1254571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Throw a NoSuchMethodError with the method name as the message.
1254671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  ecx = resolved base method
12547f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee     */
1254871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_JUMBO_nsm:
1254971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl    offMethod_name(%ecx),%eax
1255071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     %eax,OUT_ARG1(%esp)
1255171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp     common_errNoSuchMethod
125523d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
1255371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_DIRECT_JUMBO */
125543d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
125553d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee    /*
1255671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * On entry:
1255771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   TMP_SPILL  <- "this" register
1255871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Things a bit ugly on this path, but it's the less
1255971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * frequent one.  We'll have to do some reloading.
125603d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee     */
1256171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_DIRECT_JUMBO_resolve:
1256271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     SPILL_TMP1(%ecx)
125639f601a917c8878204482c37aec7005054b6776fabuzbee     movl     rSELF,%ecx
125649f601a917c8878204482c37aec7005054b6776fabuzbee     movl     offThread_method(%ecx),%ecx  # ecx<- self->method
1256571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     movl     2(rPC),%eax      # reference AAAAAAAA
1256671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     movl     offMethod_clazz(%ecx),%ecx # ecx<- method->clazz
1256771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     movl     $METHOD_DIRECT,OUT_ARG2(%esp)
1256871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     movl     %eax,OUT_ARG1(%esp)
1256971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     movl     %ecx,OUT_ARG0(%esp)
1257071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     call     dvmResolveMethod # eax<- call(clazz, ref, flags)
1257171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     UNSPILL_TMP1(%ecx)
1257271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     testl    %eax,%eax
1257371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     jne      .LOP_INVOKE_DIRECT_JUMBO_finish
1257471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     jmp      common_exceptionThrown
125753d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
1257671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_STATIC_JUMBO */
125773d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
1257871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_STATIC_JUMBO_continue:
1257971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      $METHOD_STATIC,%eax
1258071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl      %eax,OUT_ARG2(%esp)       # arg2<- flags
1258171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call      dvmResolveMethod          # call(clazz,ref,flags)
1258271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl     %eax,%eax                 # got null?
1258371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jne       common_invokeMethodJumbo
1258471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp       common_exceptionThrown
125853d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
1258671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_INTERFACE_JUMBO */
125873d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
1258871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_INTERFACE_JUMBO_continue:
1258971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    call       dvmFindInterfaceMethodInCache # eax<- call(class, ref, method, dex)
1259071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    testl      %eax,%eax
1259171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    je         common_exceptionThrown
1259271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp        common_invokeMethodJumbo
125933d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee
12594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .size   dvmAsmSisterStart, .-dvmAsmSisterStart
12595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .global dvmAsmSisterEnd
12596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmSisterEnd:
12597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/entry.S */
12599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
12600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
12601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
12602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
12603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License.
12604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at
12605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
12606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
12607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
12608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
12609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
12612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
12613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
12614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .text
12617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .global dvmMterpStdRun
12618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .type   dvmMterpStdRun, %function
12619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
126209f601a917c8878204482c37aec7005054b6776fabuzbee * bool dvmMterpStdRun(Thread* self)
12621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
12622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Interpreter entry point.  Returns changeInterp.
12623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
12624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
12625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmMterpStdRun:
126269f601a917c8878204482c37aec7005054b6776fabuzbee    movl    4(%esp), %ecx        # get incoming rSELF
12627f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    push    %ebp                 # save caller base pointer
126289f601a917c8878204482c37aec7005054b6776fabuzbee    push    %ecx                 # save rSELF at (%ebp)
12629f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %esp, %ebp           # set our %ebp
12630f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee/*
12631f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * At this point we've allocated two slots on the stack
12632f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * via push and stack is 8-byte aligned.  Allocate space
12633f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * for 8 spill slots, 3 local slots, 5 arg slots + 2 slots for
12634f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * padding to bring us to 16-byte alignment
12635f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */
12636f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    subl    $(FRAME_SIZE-8), %esp
12637f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
12638f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee/* Spill callee save regs */
12639f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %edi,EDI_SPILL(%ebp)
12640f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %esi,ESI_SPILL(%ebp)
12641f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    %ebx,EBX_SPILL(%ebp)
12642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Set up "named" registers */
126449f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_pc(%ecx),rPC
126459f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_fp(%ecx),rFP
12646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Remember %esp for future "longjmp" */
126489f601a917c8878204482c37aec7005054b6776fabuzbee    movl    %esp,offThread_bailPtr(%ecx)
12649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* How to start? */
126519f601a917c8878204482c37aec7005054b6776fabuzbee    movb    offThread_entryPoint(%ecx),%al
12652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Normal start? */
12654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpb    $kInterpEntryInstr,%al
12655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne     .Lnot_instr
12656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   /* Normal case: start executing the instruction at rPC */
12658f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST
12659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
12660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.Lnot_instr:
12662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* Reset to normal case */
126639f601a917c8878204482c37aec7005054b6776fabuzbee    movb   $kInterpEntryInstr,offThread_entryPoint(%ecx)
12664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpb   $kInterpEntryReturn,%al
12665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je     common_returnFromMethod
12666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpb   $kInterpEntryThrow,%al
12667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je     common_exceptionThrown
12668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzx  %al,%eax
12669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl   %eax,OUT_ARG1(%esp)
12670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl   $.LstrBadEntryPoint,OUT_ARG0(%esp)
12671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    call   printf
12672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    call   dvmAbort
12673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* Not reached */
12674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .global dvmMterpStdBail
12677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .type   dvmMterpStdBail, %function
12678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
126799f601a917c8878204482c37aec7005054b6776fabuzbee * void dvmMterpStdBail(Thread* self, bool changeInterp)
12680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
12681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Restore the stack pointer and PC from the save point established on entry.
12682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is essentially the same as a longjmp, but should be cheaper.  The
12683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * last instruction causes us to return to whoever called dvmMterpStdRun.
12684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
12685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We're not going to build a standard frame here, so the arg accesses will
12686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * look a little strange.
12687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
12688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry:
126899f601a917c8878204482c37aec7005054b6776fabuzbee *  esp+4 (arg0)  Thread* self
12690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  esp+8 (arg1)  bool changeInterp
12691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
12692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmMterpStdBail:
126939f601a917c8878204482c37aec7005054b6776fabuzbee    movl    4(%esp),%ecx                 # grab self
12694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    8(%esp),%eax                 # changeInterp to return reg
126959f601a917c8878204482c37aec7005054b6776fabuzbee    movl    offThread_bailPtr(%ecx),%esp   # Restore "setjmp" esp
12696c11e0e14df2c0c4264e5cc6c3e96d14832cbecadbuzbee    movl    %esp,%ebp
12697c11e0e14df2c0c4264e5cc6c3e96d14832cbecadbuzbee    addl    $(FRAME_SIZE-8), %ebp       # Restore %ebp at point of setjmp
12698f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    EDI_SPILL(%ebp),%edi
12699f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    ESI_SPILL(%ebp),%esi
12700f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    EBX_SPILL(%ebp),%ebx
12701f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    PREV_FP(%ebp),%ebp           # restore caller's ebp
12702f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    addl    $FRAME_SIZE,%esp                    # strip frame
12703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ret                                  # return to dvmMterpStdRun's caller
12704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
12707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Strings
12708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
12709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .section    .rodata
12710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrBadEntryPoint:
12711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "Bad entry point %d\n"
12712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12713f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
12714f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee/*
12715f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * FIXME: Should have the config/rebuild mechanism generate this
12716f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * for targets that need it.
12717f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */
12718f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
12719f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee/* Jump table */
12720f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbeedvmAsmInstructionJmpTable = .LdvmAsmInstructionJmpTable
12721f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LdvmAsmInstructionJmpTable:
12722f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NOP
12723f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE
12724f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_FROM16
12725f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_16
12726f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_WIDE
12727f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_WIDE_FROM16
12728f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_WIDE_16
12729f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_OBJECT
12730f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_OBJECT_FROM16
12731f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_OBJECT_16
12732f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_RESULT
12733f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_RESULT_WIDE
12734f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_RESULT_OBJECT
12735f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_EXCEPTION
12736f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RETURN_VOID
12737f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RETURN
12738f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RETURN_WIDE
12739f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RETURN_OBJECT
12740f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_4
12741f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_16
12742f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST
12743f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_HIGH16
12744f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_WIDE_16
12745f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_WIDE_32
12746f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_WIDE
12747f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_WIDE_HIGH16
12748f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_STRING
12749f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_STRING_JUMBO
12750f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_CLASS
12751f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MONITOR_ENTER
12752f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MONITOR_EXIT
12753f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CHECK_CAST
12754f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INSTANCE_OF
12755f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ARRAY_LENGTH
12756f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NEW_INSTANCE
12757f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NEW_ARRAY
12758f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_FILLED_NEW_ARRAY
12759f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_FILLED_NEW_ARRAY_RANGE
12760f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_FILL_ARRAY_DATA
12761f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_THROW
12762f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_GOTO
12763f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_GOTO_16
12764f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_GOTO_32
12765f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_PACKED_SWITCH
12766f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPARSE_SWITCH
12767f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CMPL_FLOAT
12768f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CMPG_FLOAT
12769f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CMPL_DOUBLE
12770f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CMPG_DOUBLE
12771f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CMP_LONG
12772f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_EQ
12773f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_NE
12774f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_LT
12775f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_GE
12776f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_GT
12777f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_LE
12778f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_EQZ
12779f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_NEZ
12780f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_LTZ
12781f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_GEZ
12782f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_GTZ
12783f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_LEZ
12784f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_3E
12785f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_3F
12786f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_40
12787f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_41
12788f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_42
12789f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_43
12790f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET
12791f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET_WIDE
12792f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET_OBJECT
12793f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET_BOOLEAN
12794f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET_BYTE
12795f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET_CHAR
12796f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET_SHORT
12797f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT
12798f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT_WIDE
12799f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT_OBJECT
12800f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT_BOOLEAN
12801f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT_BYTE
12802f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT_CHAR
12803f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT_SHORT
12804f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET
12805f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_WIDE
12806f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_OBJECT
12807f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_BOOLEAN
12808f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_BYTE
12809f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_CHAR
12810f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_SHORT
12811f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT
12812f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_WIDE
12813f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_OBJECT
12814f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_BOOLEAN
12815f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_BYTE
12816f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_CHAR
12817f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_SHORT
12818f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET
12819f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_WIDE
12820f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_OBJECT
12821f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_BOOLEAN
12822f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_BYTE
12823f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_CHAR
12824f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_SHORT
12825f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT
12826f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_WIDE
12827f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_OBJECT
12828f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_BOOLEAN
12829f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_BYTE
12830f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_CHAR
12831f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_SHORT
12832f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_VIRTUAL
12833f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_SUPER
12834f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_DIRECT
12835f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_STATIC
12836f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_INTERFACE
12837f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_73
12838f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_VIRTUAL_RANGE
12839f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_SUPER_RANGE
12840f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_DIRECT_RANGE
12841f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_STATIC_RANGE
12842f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_INTERFACE_RANGE
12843f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_79
12844f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_7A
12845f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NEG_INT
12846f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NOT_INT
12847f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NEG_LONG
12848f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NOT_LONG
12849f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NEG_FLOAT
12850f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NEG_DOUBLE
12851f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INT_TO_LONG
12852f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INT_TO_FLOAT
12853f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INT_TO_DOUBLE
12854f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_LONG_TO_INT
12855f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_LONG_TO_FLOAT
12856f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_LONG_TO_DOUBLE
12857f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_FLOAT_TO_INT
12858f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_FLOAT_TO_LONG
12859f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_FLOAT_TO_DOUBLE
12860f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DOUBLE_TO_INT
12861f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DOUBLE_TO_LONG
12862f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DOUBLE_TO_FLOAT
12863f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INT_TO_BYTE
12864f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INT_TO_CHAR
12865f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INT_TO_SHORT
12866f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_INT
12867f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_INT
12868f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_INT
12869f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_INT
12870f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_INT
12871f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AND_INT
12872f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_OR_INT
12873f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_XOR_INT
12874f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHL_INT
12875f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHR_INT
12876f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_USHR_INT
12877f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_LONG
12878f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_LONG
12879f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_LONG
12880f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_LONG
12881f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_LONG
12882f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AND_LONG
12883f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_OR_LONG
12884f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_XOR_LONG
12885f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHL_LONG
12886f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHR_LONG
12887f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_USHR_LONG
12888f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_FLOAT
12889f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_FLOAT
12890f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_FLOAT
12891f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_FLOAT
12892f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_FLOAT
12893f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_DOUBLE
12894f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_DOUBLE
12895f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_DOUBLE
12896f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_DOUBLE
12897f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_DOUBLE
12898f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_INT_2ADDR
12899f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_INT_2ADDR
12900f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_INT_2ADDR
12901f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_INT_2ADDR
12902f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_INT_2ADDR
12903f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AND_INT_2ADDR
12904f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_OR_INT_2ADDR
12905f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_XOR_INT_2ADDR
12906f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHL_INT_2ADDR
12907f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHR_INT_2ADDR
12908f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_USHR_INT_2ADDR
12909f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_LONG_2ADDR
12910f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_LONG_2ADDR
12911f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_LONG_2ADDR
12912f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_LONG_2ADDR
12913f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_LONG_2ADDR
12914f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AND_LONG_2ADDR
12915f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_OR_LONG_2ADDR
12916f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_XOR_LONG_2ADDR
12917f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHL_LONG_2ADDR
12918f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHR_LONG_2ADDR
12919f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_USHR_LONG_2ADDR
12920f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_FLOAT_2ADDR
12921f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_FLOAT_2ADDR
12922f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_FLOAT_2ADDR
12923f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_FLOAT_2ADDR
12924f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_FLOAT_2ADDR
12925f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_DOUBLE_2ADDR
12926f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_DOUBLE_2ADDR
12927f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_DOUBLE_2ADDR
12928f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_DOUBLE_2ADDR
12929f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_DOUBLE_2ADDR
12930f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_INT_LIT16
12931f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RSUB_INT
12932f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_INT_LIT16
12933f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_INT_LIT16
12934f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_INT_LIT16
12935f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AND_INT_LIT16
12936f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_OR_INT_LIT16
12937f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_XOR_INT_LIT16
12938f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_INT_LIT8
12939f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RSUB_INT_LIT8
12940f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_INT_LIT8
12941f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_INT_LIT8
12942f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_INT_LIT8
12943f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AND_INT_LIT8
12944f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_OR_INT_LIT8
12945f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_XOR_INT_LIT8
12946f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHL_INT_LIT8
12947f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHR_INT_LIT8
12948f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_USHR_INT_LIT8
12949f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_VOLATILE
12950f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_VOLATILE
12951f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_VOLATILE
12952f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_VOLATILE
12953f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_OBJECT_VOLATILE
12954f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_WIDE_VOLATILE
12955f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_WIDE_VOLATILE
12956f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_WIDE_VOLATILE
12957f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_WIDE_VOLATILE
12958f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_BREAKPOINT
12959f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_THROW_VERIFICATION_ERROR
12960f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_EXECUTE_INLINE
12961f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_EXECUTE_INLINE_RANGE
12962750d110b62cef538e193b6f91f5239b0c4b63ef1Andy McFadden.long .L_OP_INVOKE_OBJECT_INIT
12963f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RETURN_VOID_BARRIER
12964f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_QUICK
12965f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_WIDE_QUICK
12966f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_OBJECT_QUICK
12967f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_QUICK
12968f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_WIDE_QUICK
12969f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_OBJECT_QUICK
12970f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_VIRTUAL_QUICK
12971f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_VIRTUAL_QUICK_RANGE
12972f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_SUPER_QUICK
12973f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_SUPER_QUICK_RANGE
12974f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_OBJECT_VOLATILE
12975f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_OBJECT_VOLATILE
12976f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_OBJECT_VOLATILE
1297790f15431b24a4004fab2db70f273155fcd1c42a4Dan Bornstein.long .L_OP_DISPATCH_FF
1297871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_CONST_CLASS_JUMBO
1297971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_CHECK_CAST_JUMBO
1298071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_INSTANCE_OF_JUMBO
1298171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_NEW_INSTANCE_JUMBO
1298271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_NEW_ARRAY_JUMBO
1298371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_FILLED_NEW_ARRAY_JUMBO
1298471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IGET_JUMBO
1298571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IGET_WIDE_JUMBO
1298671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IGET_OBJECT_JUMBO
1298771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IGET_BOOLEAN_JUMBO
1298871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IGET_BYTE_JUMBO
1298971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IGET_CHAR_JUMBO
1299071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IGET_SHORT_JUMBO
1299171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IPUT_JUMBO
1299271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IPUT_WIDE_JUMBO
1299371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IPUT_OBJECT_JUMBO
1299471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IPUT_BOOLEAN_JUMBO
1299571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IPUT_BYTE_JUMBO
1299671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IPUT_CHAR_JUMBO
1299771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IPUT_SHORT_JUMBO
1299871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SGET_JUMBO
1299971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SGET_WIDE_JUMBO
1300071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SGET_OBJECT_JUMBO
1300171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SGET_BOOLEAN_JUMBO
1300271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SGET_BYTE_JUMBO
1300371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SGET_CHAR_JUMBO
1300471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SGET_SHORT_JUMBO
1300571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SPUT_JUMBO
1300671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SPUT_WIDE_JUMBO
1300771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SPUT_OBJECT_JUMBO
1300871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SPUT_BOOLEAN_JUMBO
1300971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SPUT_BYTE_JUMBO
1301071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SPUT_CHAR_JUMBO
1301171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SPUT_SHORT_JUMBO
1301271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_INVOKE_VIRTUAL_JUMBO
1301371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_INVOKE_SUPER_JUMBO
1301471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_INVOKE_DIRECT_JUMBO
1301571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_INVOKE_STATIC_JUMBO
1301671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_INVOKE_INTERFACE_JUMBO
1301771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_27FF
1301871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_28FF
1301971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_29FF
1302071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_2AFF
1302171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_2BFF
1302271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_2CFF
1302371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_2DFF
1302471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_2EFF
1302571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_2FFF
1302671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_30FF
1302771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_31FF
1302871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_32FF
1302971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_33FF
1303071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_34FF
1303171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_35FF
1303271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_36FF
1303371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_37FF
1303471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_38FF
1303571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_39FF
1303671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_3AFF
1303771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_3BFF
1303871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_3CFF
1303971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_3DFF
1304071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_3EFF
1304171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_3FFF
1304271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_40FF
1304371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_41FF
1304471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_42FF
1304571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_43FF
1304671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_44FF
1304771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_45FF
1304871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_46FF
1304971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_47FF
1305071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_48FF
1305171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_49FF
1305271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_4AFF
1305371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_4BFF
1305471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_4CFF
1305571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_4DFF
1305671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_4EFF
1305771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_4FFF
1305871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_50FF
1305971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_51FF
1306071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_52FF
1306171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_53FF
1306271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_54FF
1306371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_55FF
1306471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_56FF
1306571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_57FF
1306671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_58FF
1306771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_59FF
1306871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_5AFF
1306971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_5BFF
1307071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_5CFF
1307171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_5DFF
1307271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_5EFF
1307371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_5FFF
1307471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_60FF
1307571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_61FF
1307671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_62FF
1307771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_63FF
1307871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_64FF
1307971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_65FF
1308071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_66FF
1308171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_67FF
1308271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_68FF
1308371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_69FF
1308471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_6AFF
1308571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_6BFF
1308671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_6CFF
1308771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_6DFF
1308871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_6EFF
1308971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_6FFF
1309071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_70FF
1309171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_71FF
1309271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_72FF
1309371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_73FF
1309471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_74FF
1309571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_75FF
1309671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_76FF
1309771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_77FF
1309871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_78FF
1309971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_79FF
1310071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_7AFF
1310171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_7BFF
1310271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_7CFF
1310371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_7DFF
1310471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_7EFF
1310571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_7FFF
1310671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_80FF
1310771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_81FF
1310871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_82FF
1310971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_83FF
1311071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_84FF
1311171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_85FF
1311271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_86FF
1311371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_87FF
1311471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_88FF
1311571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_89FF
1311671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_8AFF
1311771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_8BFF
1311871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_8CFF
1311971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_8DFF
1312071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_8EFF
1312171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_8FFF
1312271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_90FF
1312371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_91FF
1312471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_92FF
1312571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_93FF
1312671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_94FF
1312771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_95FF
1312871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_96FF
1312971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_97FF
1313071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_98FF
1313171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_99FF
1313271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_9AFF
1313371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_9BFF
1313471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_9CFF
1313571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_9DFF
1313671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_9EFF
1313771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_9FFF
1313871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_A0FF
1313971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_A1FF
1314071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_A2FF
1314171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_A3FF
1314271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_A4FF
1314371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_A5FF
1314471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_A6FF
1314571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_A7FF
1314671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_A8FF
1314771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_A9FF
1314871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_AAFF
1314971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_ABFF
1315071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_ACFF
1315171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_ADFF
1315271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_AEFF
1315371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_AFFF
1315471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_B0FF
1315571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_B1FF
1315671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_B2FF
1315771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_B3FF
1315871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_B4FF
1315971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_B5FF
1316071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_B6FF
1316171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_B7FF
1316271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_B8FF
1316371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_B9FF
1316471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_BAFF
1316571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_BBFF
1316671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_BCFF
1316771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_BDFF
1316871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_BEFF
1316971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_BFFF
1317071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_C0FF
1317171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_C1FF
1317271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_C2FF
1317371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_C3FF
1317471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_C4FF
1317571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_C5FF
1317671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_C6FF
1317771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_C7FF
1317871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_C8FF
1317971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_C9FF
1318071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_CAFF
1318171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_CBFF
1318271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_CCFF
1318371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_CDFF
1318471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_CEFF
1318571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_CFFF
1318671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_D0FF
1318771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_D1FF
1318871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_D2FF
1318971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_D3FF
1319071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_D4FF
1319171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_D5FF
1319271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_D6FF
1319371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_D7FF
1319471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_D8FF
1319571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_D9FF
1319671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_DAFF
1319771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_DBFF
1319871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_DCFF
1319971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_DDFF
1320071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_DEFF
1320171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_DFFF
1320271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_E0FF
1320371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_E1FF
1320471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_E2FF
1320571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_E3FF
1320671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_E4FF
1320771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_E5FF
1320871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_E6FF
1320971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_E7FF
1321071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_E8FF
1321171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_E9FF
1321271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_EAFF
1321371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_EBFF
1321471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_ECFF
1321571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_EDFF
1321671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_EEFF
1321771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_EFFF
1321871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_F0FF
1321971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_F1FF
1322071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_F2FF
1322171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_F3FF
1322271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_F4FF
1322371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_F5FF
1322471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_F6FF
1322571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_F7FF
1322671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_F8FF
1322771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_F9FF
1322871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_FAFF
1322971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_FBFF
1323071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_FCFF
1323171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_FDFF
1323271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_FEFF
1323371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_THROW_VERIFICATION_ERROR_JUMBO
13234f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee
13235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/footer.S */
13236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
13237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
13238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
13239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
13240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License.
13241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at
13242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
13243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
13244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
13245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
13246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
13247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
13249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
13250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
13251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
13252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common subroutines and data.
13253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
13254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
132557520ee7ff226e12e06818561b15741d2575072e3buzbee#if defined(WITH_JIT)
132567520ee7ff226e12e06818561b15741d2575072e3buzbee/*
13257dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * JIT-related re-entries into the interpreter.  In general, if the
13258dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * exit from a translation can at some point be chained, the entry
13259dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * here requires that control arrived via a call, and that the "rp"
13260dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * on TOS is actually a pointer to a 32-bit cell containing the Dalvik PC
13261dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * of the next insn to handle.  If no chaining will happen, the entry
13262dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * should be reached via a direct jump and rPC set beforehand.
132637520ee7ff226e12e06818561b15741d2575072e3buzbee */
13264dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee
132657520ee7ff226e12e06818561b15741d2575072e3buzbee    .global dvmJitToInterpPunt
13266dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee/*
13267dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * The compiler will generate a jump to this entry point when it is
13268dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * having difficulty translating a Dalvik instruction.  We must skip
13269dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * the code cache lookup & prevent chaining to avoid bouncing between
13270dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * the interpreter and code cache. rPC must be set on entry.
13271dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee */
132727520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpPunt:
13273dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#if defined(WITH_JIT_TUNING)
13274dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    movl   rPC, OUT_ARG0(%esp)
13275dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    call   dvmBumpPunt
13276dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#endif
13277dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    FETCH_INST_R %edx
13278dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    GOTO_NEXT_R %edx
13279dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee
132807520ee7ff226e12e06818561b15741d2575072e3buzbee    .global dvmJitToInterpSingleStep
13281dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee/*
13282dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * Return to the interpreter to handle a single instruction.
13283dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * Should be reached via a call.
13284dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * On entry:
13285dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee *   0(%esp)          <= native return address within trace
13286dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee *   rPC              <= Dalvik PC of this instruction
13287dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee *   OUT_ARG0+4(%esp) <= Dalvik PC of next instruction
13288dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee */
132897520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpSingleStep:
13290dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    pop    %eax
132919f601a917c8878204482c37aec7005054b6776fabuzbee    movl   rSELF, %ecx
13292dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    movl   OUT_ARG0(%esp), %edx
132939f601a917c8878204482c37aec7005054b6776fabuzbee    movl   %eax,offThread_jitResumeNPC(%ecx)
132949f601a917c8878204482c37aec7005054b6776fabuzbee    movl   %edx,offThread_jitResumeDPC(%ecx)
132959f601a917c8878204482c37aec7005054b6776fabuzbee    movl   $kInterpEntryInstr,offThread_entryPoint(%ecx)
13296dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    movl   $1,rINST     # changeInterp <= true
13297dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    jmp    common_gotoBail
13298dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee
132997520ee7ff226e12e06818561b15741d2575072e3buzbee    .global dvmJitToInterpNoChainNoProfile
13300dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee/*
13301dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * Return from the translation cache to the interpreter to do method
13302dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * invocation.  Check if the translation exists for the callee, but don't
13303dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * chain to it. rPC must be set on entry.
13304dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee */
133057520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpNoChainNoProfile:
13306dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#if defined(WITH_JIT_TUNING)
13307dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    call   dvmBumpNoChain
13308dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#endif
13309dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    movl   rPC,OUT_ARG0(%esp)
13310cfdeca37fcaa27c37bad5077223e4d1e87f1182eBen Cheng    call   dvmJitGetTraceAddr        # is there a translation?
133119f601a917c8878204482c37aec7005054b6776fabuzbee    movl   rSELF,%ecx                # ecx <- self
13312dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    movl   %eax,offThread_inJitCodeCache(%ecx)  # set inJitCodeCache flag
13313dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    cmpl   $0, %eax
13314dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    jz     1f
13315dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    call   *%eax                     # exec translation if we've got one
13316dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    # won't return
13317dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee1:
13318dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    FETCH_INST_R %edx
13319dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    GOTO_NEXT_R %edx
13320dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee
13321dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee/*
13322dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * Return from the translation cache and immediately request a
13323dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * translation fro the exit target, but don't attempt to chain.
13324dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * rPC set on entry.
13325dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee */
133267520ee7ff226e12e06818561b15741d2575072e3buzbee    .global dvmJitToInterpTraceSelectNoChain
133277520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpTraceSelectNoChain:
13328dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#if defined(WITH_JIT_TUNING)
13329dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    call   dvmBumpNoChain
13330dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#endif
13331dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    movl   rPC,OUT_ARG0(%esp)
13332cfdeca37fcaa27c37bad5077223e4d1e87f1182eBen Cheng    call   dvmJitGetTraceAddr # is there a translation?
133339f601a917c8878204482c37aec7005054b6776fabuzbee    movl   rSELF,%ecx
13334dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    cmpl   $0,%eax
13335dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    movl   %eax,offThread_inJitCodeCache(%ecx)  # set inJitCodeCache flag
13336dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    jz     1f
13337dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    call   *%eax              # jump to tranlation
13338dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    # won't return
13339dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee
13340dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee/* No Translation - request one */
13341dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee1:
13342dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    GET_JIT_PROF_TABLE %ecx %eax
13343dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    cmpl   $0, %eax          # JIT enabled?
13344dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    jnz    2f                 # Request one if so
13345dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    FETCH_INST_R %edx         # Continue interpreting if not
13346dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    GOTO_NEXT_R %edx
13347dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee2:
13348dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    movl   $kJitTSelectRequestHot,rINST  # ask for trace select
13349dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    jmp    common_selectTrace
13350dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee
13351dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee/*
13352dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * Return from the translation cache and immediately request a
13353dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * translation for the exit target.  Reached via a call, and
13354dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * (TOS)->rPC.
13355dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee */
133567520ee7ff226e12e06818561b15741d2575072e3buzbee    .global dvmJitToInterpTraceSelect
133577520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpTraceSelect:
13358dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    pop    rINST           # save chain cell address in callee save reg
13359dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    movl   (rINST),rPC
13360dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    movl   rPC,OUT_ARG0(%esp)
13361cfdeca37fcaa27c37bad5077223e4d1e87f1182eBen Cheng    call   dvmJitGetTraceAddr # is there a translation?
13362dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    cmpl   $0,%eax
13363dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    jz     1b                 # no - ask for one
13364dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    movl   %eax,OUT_ARG0(%esp)
13365dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee# FIXME - need to adjust rINST to beginning of sequence
13366dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    movl   rINST,OUT_ARG1(%esp)
13367dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    call   dvmJitChain        # Attempt dvmJitChain(codeAddr,chainAddr)
13368dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    cmpl   $0,%eax           # Success?
13369dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    jz     toInterpreter      # didn't chain - interpret
13370dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    call   *%eax
13371dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    # won't return
13372dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee
13373dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee/*
13374dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * Placeholder entries for x86 JIT
13375dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee */
133767520ee7ff226e12e06818561b15741d2575072e3buzbee    .global dvmJitToInterpBackwardBranch
133777520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpBackwardBranch:
133787520ee7ff226e12e06818561b15741d2575072e3buzbee    .global dvmJitToInterpNormal
133797520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpNormal:
133807520ee7ff226e12e06818561b15741d2575072e3buzbee    .global dvmJitToInterpNoChain
133817520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpNoChain:
13382dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbeetoInterpreter:
133837520ee7ff226e12e06818561b15741d2575072e3buzbee    jmp  common_abort
133847520ee7ff226e12e06818561b15741d2575072e3buzbee#endif
133857520ee7ff226e12e06818561b15741d2575072e3buzbee
13386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
13387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code when a backwards branch is taken
13388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
13389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry:
13390f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee *   ebx (a.k.a. rINST) -> PC adjustment in 16-bit words
13391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
13392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_backwardBranch:
133939f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
133949f601a917c8878204482c37aec7005054b6776fabuzbee    call   common_periodicChecks  # rPC and ecx/rSELF preserved
13395dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#if defined(WITH_JIT)
13396dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    GET_JIT_PROF_TABLE %ecx %edx
13397f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC_INDEXED rINST
13398dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    cmpl   $0,%edx
13399f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST
13400dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    jz    1f                    # Profiling off - continue
13401dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    .global updateProfile
13402dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbeeupdateProfile:
13403dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbeecommon_updateProfile:
13404dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    # quick & dirty hash
13405dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    movl   rPC, %eax
13406dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    shrl   $12, %eax
13407dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    xorl   rPC, %eax
13408dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    andl   $((1<<JIT_PROF_SIZE_LOG_2)-1),%eax
13409dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    decb   (%edx,%eax)
13410dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    jz     2f
13411dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee1:
13412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
13413dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee2:
13414dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee/*
13415dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * Here, we switch to the debug interpreter to request
13416dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * trace selection.  First, though, check to see if there
13417dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * is already a native translation in place (and, if so,
13418dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * jump to it now.
13419dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee */
134209f601a917c8878204482c37aec7005054b6776fabuzbee    GET_JIT_THRESHOLD %ecx rINST  # leaves rSELF in %ecx
13421dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    EXPORT_PC
13422dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    movb   rINSTbl,(%edx,%eax)   # reset counter
134239f601a917c8878204482c37aec7005054b6776fabuzbee    movl   %ecx,rINST            # preserve rSELF
13424dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    movl   rPC,OUT_ARG0(%esp)
13425cfdeca37fcaa27c37bad5077223e4d1e87f1182eBen Cheng    call   dvmJitGetTraceAddr  # already have one?
13426dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    movl   %eax,offThread_inJitCodeCache(rINST)   # set the inJitCodeCache flag
13427dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    cmpl   $0,%eax
13428dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    jz     1f
13429dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    call   *%eax        # FIXME: decide call vs/ jmp!.  No return either way
13430dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee1:
13431dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    movl   $kJitTSelectRequest,%eax
13432dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    # On entry, eax<- jitState, rPC valid
13433dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbeecommon_selectTrace:
134349f601a917c8878204482c37aec7005054b6776fabuzbee
134359f601a917c8878204482c37aec7005054b6776fabuzbee    movl   rSELF,%ecx
134369f601a917c8878204482c37aec7005054b6776fabuzbee    movl   %eax,offThread_jitState(%ecx)
134379f601a917c8878204482c37aec7005054b6776fabuzbee    movl   $kInterpEntryInstr,offThread_entryPoint(%ecx)
13438dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    movl   $1,rINST
13439dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    jmp    common_gotoBail
13440dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#else
13441dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    ADVANCE_PC_INDEXED rINST
13442dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    FETCH_INST
13443dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee    GOTO_NEXT
13444dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#endif
13445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13446c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13447c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13448c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch/*
1344971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Common code for jumbo method invocation.
1345071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *
1345171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * On entry:
1345271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *   eax = Method* methodToCall
1345371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *   rINSTw trashed, must reload
1345471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */
1345571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1345671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhaocommon_invokeMethodJumbo:
1345771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LinvokeNewJumbo:
1345871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1345971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao   /*
1346071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    * prepare to copy args to "outs" area of current frame
1346171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    */
1346271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl      6(rPC),rINST            # rINST<- BBBB
1346371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movzwl      8(rPC), %ecx            # %ecx<- CCCC
1346471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ADVANCE_PC 2                        # adjust pc to make return similar
1346571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SAVEAREA_FROM_FP %edx               # %edx<- &StackSaveArea
1346671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    test        rINST, rINST
1346771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movl        rINST, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- BBBB
1346871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jz          .LinvokeArgsDone        # no args; jump to args done
1346971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    jmp         .LinvokeRangeArgs       # handle args like invoke range
1347071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1347171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/*
13472c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * Common code for method invocation with range.
13473c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch *
13474c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * On entry:
13475c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch *   eax = Method* methodToCall
13476f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee *   rINSTw trashed, must reload
13477c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */
13478c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13479c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birchcommon_invokeMethodRange:
13480c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNewRange:
13481c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13482c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch   /*
13483c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    * prepare to copy args to "outs" area of current frame
13484c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    */
13485c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13486f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      1(rPC),rINST       # rINST<- AA
13487c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movzwl      4(rPC), %ecx            # %ecx<- CCCC
13488f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SAVEAREA_FROM_FP %edx               # %edx<- &StackSaveArea
13489f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    test        rINST, rINST
13490f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl        rINST, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- AA
13491c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    jz          .LinvokeArgsDone        # no args; jump to args done
13492c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13493c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13494c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch   /*
13495c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    * %eax=methodToCall, %ecx=CCCC, LOCAL0_OFFSET(%ebp)=count, %edx=&outs (&stackSaveArea)
13496c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    * (very few methods have > 10 args; could unroll for common cases)
13497c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    */
13498c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
1349971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LinvokeRangeArgs:
13500c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        %ebx, LOCAL1_OFFSET(%ebp)       # LOCAL1_OFFSET(%ebp)<- save %ebx
13501c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    lea         (rFP, %ecx, 4), %ecx    # %ecx<- &vCCCC
13502c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    shll        $2, LOCAL0_OFFSET(%ebp)        # LOCAL0_OFFSET(%ebp)<- offset
13503c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    subl        LOCAL0_OFFSET(%ebp), %edx       # %edx<- update &outs
13504c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    shrl        $2, LOCAL0_OFFSET(%ebp)        # LOCAL0_OFFSET(%ebp)<- offset
13505c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch1:
13506c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        (%ecx), %ebx            # %ebx<- vCCCC
13507c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    lea         4(%ecx), %ecx           # %ecx<- &vCCCC++
13508c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    subl        $1, LOCAL0_OFFSET(%ebp)        # LOCAL0_OFFSET<- LOCAL0_OFFSET--
13509c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        %ebx, (%edx)            # *outs<- vCCCC
13510c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    lea         4(%edx), %edx           # outs++
13511c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    jne         1b                      # loop if count (LOCAL0_OFFSET(%ebp)) not zero
13512c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        LOCAL1_OFFSET(%ebp), %ebx       # %ebx<- restore %ebx
13513c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    jmp         .LinvokeArgsDone        # continue
13514c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13515c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch   /*
13516c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    * %eax is "Method* methodToCall", the method we're trying to call
13517c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    * prepare to copy args to "outs" area of current frame
13518c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    */
13519c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13520c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birchcommon_invokeMethodNoRange:
13521c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNewNoRange:
13522f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movzbl      1(rPC),rINST       # rINST<- BA
13523f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl        rINST, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- BA
13524c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    shrl        $4, LOCAL0_OFFSET(%ebp)        # LOCAL0_OFFSET(%ebp)<- B
13525c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    je          .LinvokeArgsDone        # no args; jump to args done
13526c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movzwl      4(rPC), %ecx            # %ecx<- GFED
13527f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SAVEAREA_FROM_FP %edx               # %edx<- &StackSaveArea
13528c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13529c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch   /*
13530c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    * %eax=methodToCall, %ecx=GFED, LOCAL0_OFFSET(%ebp)=count, %edx=outs
13531c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    */
13532c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13533c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNonRange:
13534c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    cmp         $2, LOCAL0_OFFSET(%ebp)        # compare LOCAL0_OFFSET(%ebp) to 2
13535c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        %ecx, LOCAL1_OFFSET(%ebp)       # LOCAL1_OFFSET(%ebp)<- GFED
13536c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    jl          1f                      # handle 1 arg
13537c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    je          2f                      # handle 2 args
13538c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    cmp         $4, LOCAL0_OFFSET(%ebp)        # compare LOCAL0_OFFSET(%ebp) to 4
13539c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    jl          3f                      # handle 3 args
13540c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    je          4f                      # handle 4 args
13541c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch5:
13542f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    andl        $15, rINST             # rINSTw<- A
13543c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    lea         -4(%edx), %edx          # %edx<- update &outs; &outs--
13544f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl        (rFP, rINST, 4), %ecx   # %ecx<- vA
13545c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        %ecx, (%edx)            # *outs<- vA
13546c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        LOCAL1_OFFSET(%ebp), %ecx       # %ecx<- GFED
13547c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch4:
13548c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    shr         $12, %ecx              # %ecx<- G
13549c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    lea         -4(%edx), %edx          # %edx<- update &outs; &outs--
13550c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        (rFP, %ecx, 4), %ecx    # %ecx<- vG
13551c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        %ecx, (%edx)            # *outs<- vG
13552c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        LOCAL1_OFFSET(%ebp), %ecx       # %ecx<- GFED
13553c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch3:
13554c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    and         $0x0f00, %ecx          # %ecx<- 0F00
13555c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    shr         $8, %ecx               # %ecx<- F
13556c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    lea         -4(%edx), %edx          # %edx<- update &outs; &outs--
13557c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        (rFP, %ecx, 4), %ecx    # %ecx<- vF
13558c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        %ecx, (%edx)            # *outs<- vF
13559c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        LOCAL1_OFFSET(%ebp), %ecx       # %ecx<- GFED
13560c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch2:
13561c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    and         $0x00f0, %ecx          # %ecx<- 00E0
13562c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    shr         $4, %ecx               # %ecx<- E
13563c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    lea         -4(%edx), %edx          # %edx<- update &outs; &outs--
13564c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        (rFP, %ecx, 4), %ecx    # %ecx<- vE
13565c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        %ecx, (%edx)            # *outs<- vE
13566c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        LOCAL1_OFFSET(%ebp), %ecx       # %ecx<- GFED
13567c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch1:
13568c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    and         $0x000f, %ecx          # %ecx<- 000D
13569c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        (rFP, %ecx, 4), %ecx    # %ecx<- vD
13570c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        %ecx, -4(%edx)          # *--outs<- vD
13571c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch0:
13572c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13573c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch   /*
13574c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    * %eax is "Method* methodToCall", the method we're trying to call
13575c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    * find space for the new stack frame, check for overflow
13576c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    */
13577c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13578c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeArgsDone:
13579c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movzwl      offMethod_registersSize(%eax), %edx # %edx<- methodToCall->regsSize
13580c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movzwl      offMethod_outsSize(%eax), %ecx # %ecx<- methodToCall->outsSize
13581c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        %eax, LOCAL0_OFFSET(%ebp)       # LOCAL0_OFFSET<- methodToCall
13582c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    shl         $2, %edx               # %edx<- update offset
13583f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SAVEAREA_FROM_FP %eax               # %eax<- &StackSaveArea
13584c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    subl        %edx, %eax              # %eax<- newFP; (old savearea - regsSize)
135859f601a917c8878204482c37aec7005054b6776fabuzbee    movl        rSELF,%edx              # %edx<- pthread
13586c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        %eax, LOCAL1_OFFSET(%ebp)       # LOCAL1_OFFSET(%ebp)<- &outs
13587c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    subl        $sizeofStackSaveArea, %eax # %eax<- newSaveArea (stack save area using newFP)
135889f601a917c8878204482c37aec7005054b6776fabuzbee    movl        offThread_interpStackEnd(%edx), %edx # %edx<- self->interpStackEnd
135899f601a917c8878204482c37aec7005054b6776fabuzbee    movl        %edx, LOCAL2_OFFSET(%ebp)       # LOCAL2_OFFSET<- self->interpStackEnd
13590c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    shl         $2, %ecx               # %ecx<- update offset for outsSize
13591c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        %eax, %edx              # %edx<- newSaveArea
13592c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    sub         %ecx, %eax              # %eax<- bottom; (newSaveArea - outsSize)
13593c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    cmp         LOCAL2_OFFSET(%ebp), %eax       # compare interpStackEnd and bottom
13594c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        LOCAL0_OFFSET(%ebp), %eax       # %eax<- restore methodToCall
13595c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    jl          .LstackOverflow         # handle frame overflow
13596c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13597c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch   /*
13598c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    * set up newSaveArea
13599c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    */
13600c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13601c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch#ifdef EASY_GDB
13602f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SAVEAREA_FROM_FP %ecx               # %ecx<- &StackSaveArea
13603c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        %ecx, offStackSaveArea_prevSave(%edx) # newSaveArea->prevSave<- &outs
13604c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch#endif
13605c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        rFP, offStackSaveArea_prevFrame(%edx) # newSaveArea->prevFrame<- rFP
13606f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl        rPC, offStackSaveArea_savedPc(%edx) # newSaveArea->savedPc<- rPC
13607c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    testl       $ACC_NATIVE, offMethod_accessFlags(%eax) # check for native call
13608c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        %eax, offStackSaveArea_method(%edx) # newSaveArea->method<- method to call
13609c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    jne         .LinvokeNative          # handle native call
13610c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13611c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch   /*
136129f601a917c8878204482c37aec7005054b6776fabuzbee    * Update "self" values for the new method
13613c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    * %eax=methodToCall, LOCAL1_OFFSET(%ebp)=newFp
13614c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    */
13615c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13616c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        offMethod_clazz(%eax), %edx # %edx<- method->clazz
136179f601a917c8878204482c37aec7005054b6776fabuzbee    movl        rSELF,%ecx                  # %ecx<- pthread
13618c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        offClassObject_pDvmDex(%edx), %edx # %edx<- method->clazz->pDvmDex
136199f601a917c8878204482c37aec7005054b6776fabuzbee    movl        %eax, offThread_method(%ecx) # self->method<- methodToCall
136209f601a917c8878204482c37aec7005054b6776fabuzbee    movl        %edx, offThread_methodClassDex(%ecx) # self->methodClassDex<- method->clazz->pDvmDex
13621c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        offMethod_insns(%eax), rPC # rPC<- methodToCall->insns
13622c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        LOCAL1_OFFSET(%ebp), rFP # rFP<- newFP
136239f601a917c8878204482c37aec7005054b6776fabuzbee    movl        rFP, offThread_curFrame(%ecx) # self->curFrame<- newFP
13624f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST
13625c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    GOTO_NEXT                           # jump to methodToCall->insns
13626c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13627c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch   /*
13628c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    * Prep for the native call
13629c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    * %eax=methodToCall, LOCAL1_OFFSET(%ebp)=newFP, %edx=newSaveArea
13630c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    */
13631c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13632c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNative:
136339f601a917c8878204482c37aec7005054b6776fabuzbee    movl        rSELF,%ecx              # %ecx<- pthread
13634c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        %eax, OUT_ARG1(%esp)    # push parameter methodToCall
13635d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden    movl        offThread_jniLocal_topCookie(%ecx), %eax # %eax<- self->localRef->...
13636d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden    movl        %eax, offStackSaveArea_localRefCookie(%edx) # newSaveArea->localRefCookie<- top
13637c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        %edx, OUT_ARG4(%esp)    # save newSaveArea
13638c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        LOCAL1_OFFSET(%ebp), %edx # %edx<- newFP
136399f601a917c8878204482c37aec7005054b6776fabuzbee    movl        %edx, offThread_curFrame(%ecx)  # self->self->curFrame<- newFP
136409f601a917c8878204482c37aec7005054b6776fabuzbee    movl        %ecx, OUT_ARG3(%esp)    # save self->self
136419f601a917c8878204482c37aec7005054b6776fabuzbee    movl        %ecx, OUT_ARG2(%esp)    # push parameter self->self
136429f601a917c8878204482c37aec7005054b6776fabuzbee    movl        rSELF,%ecx              # %ecx<- pthread
13643c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        OUT_ARG1(%esp), %eax    # %eax<- methodToCall
136449f601a917c8878204482c37aec7005054b6776fabuzbee    lea         offThread_retval(%ecx), %ecx # %ecx<- &retval
136459f601a917c8878204482c37aec7005054b6776fabuzbee    movl        %ecx, OUT_ARG0(%esp)    # push parameter pthread
13646c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    push        %edx                    # push parameter newFP
13647c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13648c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    call        *offMethod_nativeFunc(%eax) # call methodToCall->nativeFunc
13649c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    lea         4(%esp), %esp
13650c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        OUT_ARG4(%esp), %ecx    # %ecx<- newSaveArea
136519f601a917c8878204482c37aec7005054b6776fabuzbee    movl        OUT_ARG3(%esp), %eax    # %eax<- self->self
13652d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden    movl        offStackSaveArea_localRefCookie(%ecx), %edx # %edx<- old top
13653c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    cmp         $0, offThread_exception(%eax) # check for exception
136549f601a917c8878204482c37aec7005054b6776fabuzbee    movl        rFP, offThread_curFrame(%eax) # self->self->curFrame<- rFP
13655d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden    movl        %edx, offThread_jniLocal_topCookie(%eax) # new top <- old top
13656c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    jne         common_exceptionThrown  # handle exception
13657f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 3 %edx
13658f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 3
13659f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx                    # jump to next instruction
13660c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
136616ed1a0f396a1857c31b486d3e93ee2dbeb49a6cdAndy McFadden.LstackOverflow:    # eax=methodToCall
136626ed1a0f396a1857c31b486d3e93ee2dbeb49a6cdAndy McFadden    movl        %eax, OUT_ARG1(%esp)    # push parameter methodToCall
136639f601a917c8878204482c37aec7005054b6776fabuzbee    movl        rSELF,%eax              # %eax<- self
13664c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    movl        %eax, OUT_ARG0(%esp)    # push parameter self
136656ed1a0f396a1857c31b486d3e93ee2dbeb49a6cdAndy McFadden    call        dvmHandleStackOverflow  # call: (Thread* self, Method* meth)
13666c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    jmp         common_exceptionThrown  # handle exception
13667c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13668c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch
13669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
13670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Do we need the thread to be suspended or have debugger/profiling activity?
13671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
13672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry:
13673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *   ebx  -> PC adjustment in 16-bit words (must be preserved)
136749f601a917c8878204482c37aec7005054b6776fabuzbee *   ecx  -> SELF pointer
136759f601a917c8878204482c37aec7005054b6776fabuzbee *   reentry type, e.g. kInterpEntryInstr stored in rSELF->entryPoint
13676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
13677f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Note: A call will normally kill %eax and %ecx.  To
13678f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee *       streamline the normal case, this routine will preserve
13679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *       %ecx in addition to the normal caller save regs.  The save/restore
13680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *       is a bit ugly, but will happen in the relatively uncommon path.
13681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TODO: Basic-block style Jit will need a hook here as well.  Fold it into
13682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *       the suspendCount check so we can get both in 1 shot.
13683cb3081f675109049e63380170b60871e8275f9a8buzbee * TUNING: Improve scheduling here & do initial single test for all.
13684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
13685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_periodicChecks:
136869f601a917c8878204482c37aec7005054b6776fabuzbee    cmpl    $0,offThread_suspendCount(%ecx)     # non-zero suspendCount?
13687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne     1f
13688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13689f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee6:
136909f601a917c8878204482c37aec7005054b6776fabuzbee    movl   offThread_pInterpBreak(%ecx),%eax    # eax <- &interpBreak
13691cb3081f675109049e63380170b60871e8275f9a8buzbee    cmpl   $0,(%eax)              # something interesting happening?
13692cb3081f675109049e63380170b60871e8275f9a8buzbee    jne    3f                      # yes - switch interpreters
13693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ret
13694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* Check for suspend */
13696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:
13697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*  At this point, the return pointer to the caller of
13698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  common_periodicChecks is on the top of stack.  We need to preserve
136999f601a917c8878204482c37aec7005054b6776fabuzbee     *  SELF(ecx).
13700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  The outgoing profile is:
13701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      bool dvmCheckSuspendPending(Thread* self)
13702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  Because we reached here via a call, go ahead and build a new frame.
13703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
13704f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC                         # need for precise GC
137059f601a917c8878204482c37aec7005054b6776fabuzbee    movl    %ecx,%eax                 # eax<- self
13706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    push    %ebp
13707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    %esp,%ebp
13708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    subl    $24,%esp
13709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    %eax,OUT_ARG0(%esp)
13710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    call    dvmCheckSuspendPending
13711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    addl    $24,%esp
13712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    pop     %ebp
137139f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
13714f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee
13715f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee    /*
13716f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee     * Need to check to see if debugger or profiler flags got set
13717f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee     * while we were suspended.
13718f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee     */
137190d615c3ce5bf97ae65b9347ee77968f38620d5e8Andy McFadden    jmp    6b
13720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* Switch interpreters */
13722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* Note: %ebx contains the 16-bit word offset to be applied to rPC to
13723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * "complete" the interpretation of backwards branches.  In effect, we
13724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * are completing the interpretation of the branch instruction here,
13725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * and the new interpreter will resume interpretation at the branch
13726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * target. However, a switch request recognized during the handling
13727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * of a return from method instruction results in an immediate abort,
13728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * and the new interpreter will resume by re-interpreting the return
13729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * instruction.
13730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
13731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3:
13732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    leal    (rPC,%ebx,2),rPC       # adjust pc to show target
137339f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx             # bail expect SELF already loaded
13734f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    $1,rINST              # set changeInterp to true
13735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_gotoBail
13736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
13739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code for handling a return instruction
13740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
13741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_returnFromMethod:
137429f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
13743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* Set entry mode in case we bail */
137449f601a917c8878204482c37aec7005054b6776fabuzbee    movb    $kInterpEntryReturn,offThread_entryPoint(%ecx)
13745f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    xorl    rINST,rINST   # zero offset in case we switch interps
13746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    call    common_periodicChecks   # Note: expects %ecx to be preserved
13747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13748f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    SAVEAREA_FROM_FP %eax                         # eax<- saveArea (old)
13749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    offStackSaveArea_prevFrame(%eax),rFP  # rFP<- prevFrame
13750f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    (offStackSaveArea_method-sizeofStackSaveArea)(rFP),rINST
13751f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    cmpl    $0,rINST                             # break?
13752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je      common_gotoBail    # break frame, bail out completely
13753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    offStackSaveArea_savedPc(%eax),rPC    # pc<- saveArea->savedPC
137559f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rINST,offThread_method(%ecx)  # self->method = newSave->meethod
137569f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rFP,offThread_curFrame(%ecx)     # self->curFrame = fp
13757f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl    offMethod_clazz(rINST),%eax      # eax<- method->clazz
13758f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    FETCH_INST_OPCODE 3 %edx
13759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    offClassObject_pDvmDex(%eax),%eax # eax<- method->clazz->pDvmDex
13760f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 3
137619f601a917c8878204482c37aec7005054b6776fabuzbee    movl    %eax,offThread_methodClassDex(%ecx)
13762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* not bailing - restore entry mode to default */
137639f601a917c8878204482c37aec7005054b6776fabuzbee    movb    $kInterpEntryInstr,offThread_entryPoint(%ecx)
13764f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GOTO_NEXT_R %edx
13765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
13767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Prepare to strip the current frame and "longjump" back to caller of
13768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * dvmMterpStdRun.
13769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
13770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * on entry:
13771f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee *    rINST holds changeInterp
137729f601a917c8878204482c37aec7005054b6776fabuzbee *    ecx holds self pointer
13773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
137749f601a917c8878204482c37aec7005054b6776fabuzbee * expected profile: dvmMterpStdBail(Thread *self, bool changeInterp)
13775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
13776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_gotoBail:
137779f601a917c8878204482c37aec7005054b6776fabuzbee    movl   rPC,offThread_pc(%ecx)     # export state to self
137789f601a917c8878204482c37aec7005054b6776fabuzbee    movl   rFP,offThread_fp(%ecx)
137799f601a917c8878204482c37aec7005054b6776fabuzbee    movl   %ecx,OUT_ARG0(%esp)      # self in arg0
13780f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    movl   rINST,OUT_ARG1(%esp)     # changeInterp in arg1
13781f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    call   dvmMterpStdBail          # bail out....
13782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
137859f601a917c8878204482c37aec7005054b6776fabuzbee * After returning from a "selfd" function, pull out the updated values
13786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and start executing at the next instruction.
13787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
13788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project common_resumeAfterGlueCall:
137899f601a917c8878204482c37aec7005054b6776fabuzbee     LOAD_PC_FP_FROM_SELF
13790f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee     FETCH_INST
13791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     GOTO_NEXT
13792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
13794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Integer divide or mod by zero
13795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
13796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errDivideByZero:
13797f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
13798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    $.LstrArithmeticException,%eax
13799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    %eax,OUT_ARG0(%esp)
13800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    $.LstrDivideByZero,%eax
13801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    %eax,OUT_ARG1(%esp)
13802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    call    dvmThrowException
13803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_exceptionThrown
13804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
13806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Attempt to allocate an array with a negative size.
13807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
13808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNegativeArraySize:
13809f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
13810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    $.LstrNegativeArraySizeException,%eax
13811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    %eax,OUT_ARG0(%esp)
13812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    xorl    %eax,%eax
13813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    %eax,OUT_ARG1(%esp)
13814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    call    dvmThrowException
13815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_exceptionThrown
13816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
13818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Attempt to allocate an array with a negative size.
13819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
13820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNoSuchMethod:
13821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13822f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
13823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    $.LstrNoSuchMethodError,%eax
13824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    %eax,OUT_ARG0(%esp)
13825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    xorl    %eax,%eax
13826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    %eax,OUT_ARG1(%esp)
13827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    call    dvmThrowException
13828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_exceptionThrown
13829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
13831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Hit a null object when we weren't expecting one.  Export the PC, throw a
13832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * NullPointerException and goto the exception processing code.
13833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
13834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNullObject:
13835f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
13836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    $.LstrNullPointerException,%eax
13837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    %eax,OUT_ARG0(%esp)
13838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    xorl    %eax,%eax
13839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    %eax,OUT_ARG1(%esp)
13840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    call    dvmThrowException
13841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_exceptionThrown
13842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
13844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array index exceeds max.
138453e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee * On entry:
138463e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee *    eax <- array object
138473e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee *    ecx <- index
13848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
13849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errArrayIndex:
13850f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
138513e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee    movl    offArrayObject_length(%eax), %eax
138523e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee    movl    %ecx,OUT_ARG0(%esp)
13853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    %eax,OUT_ARG1(%esp)
138543e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee    call    dvmThrowAIOOBE        # dvmThrowAIOO(index, length)
13855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_exceptionThrown
13856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
13858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Somebody has thrown an exception.  Handle it.
13859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
13860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If the exception processing code returns to us (instead of falling
13861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out of the interpreter), continue with whatever the next instruction
13862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * now happens to be.
13863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
13864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This does not return.
13865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
13866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_exceptionThrown:
138679f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
138689f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rPC,offThread_pc(%ecx)
138699f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rFP,offThread_fp(%ecx)
13870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    %ecx,OUT_ARG0(%esp)
13871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    call    dvmMterp_exceptionThrown
13872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_resumeAfterGlueCall
13873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_abort:
13875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    $0xdeadf00d,%eax
13876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    call     *%eax
13877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
13880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Strings
13881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
13882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .section     .rodata
13884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNullPointerException:
13885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz    "Ljava/lang/NullPointerException;"
13886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrArithmeticException:
13887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "Ljava/lang/ArithmeticException;"
13888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrDivideByZero:
13889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "divide by zero"
13890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNegativeArraySizeException:
13891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "Ljava/lang/NegativeArraySizeException;"
13892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrInstantiationError:
13893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "Ljava/lang/InstantiationError;"
13894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNoSuchMethodError:
13895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "Ljava/lang/NoSuchMethodError;"
13896f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LstrInternalErrorA:
13897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "Ljava/lang/InternalError;"
13898f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LstrFilledNewArrayNotImplA:
13899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "filled-new-array only implemented for 'int'"
13900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13901