InterpAsm-armv5te.S revision 8cb0d098d79af61546e275f633325794f4587602
1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This file was generated automatically by gen-mterp.py for 'armv5te'.
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: armv5te/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 */
23c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ARMv5 definitions and declarations.
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectARM EABI general notes:
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr0-r3 hold first 4 args to a method; they are not preserved across method calls
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr4-r8 are available for general use
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr9 is given special treatment in some situations, but not for us
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr10 (sl) seems to be generally available
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr11 (fp) is used by gcc (unless -fomit-frame-pointer is set)
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr12 (ip) is scratch -- not preserved across method calls
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr13 (sp) should be managed carefully in case a signal arrives
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr14 (lr) must be preserved
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr15 (pc) can be tinkered with directly
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr0 holds returns of <= 4 bytes
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr0-r1 hold returns of 8 bytes, low word in r0
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
44a80b76553c2b9f33c4063ae8c69c5362d961de81Andy McFaddenCallee must save/restore r4+ (except r12) if it modifies them.  If VFP
45a80b76553c2b9f33c4063ae8c69c5362d961de81Andy McFaddenis present, registers s16-s31 (a/k/a d8-d15, a/k/a q4-q7) must be preserved,
46a80b76553c2b9f33c4063ae8c69c5362d961de81Andy McFaddens0-s15 (d0-d7, q0-a3) do not need to be.
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectStack is "full descending".  Only the arguments that don't fit in the first 4
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectregisters are placed on the stack.  "sp" points at the first stacked argument
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project(i.e. the 5th arg).
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectVFP: single-precision results in s0, double-precision results in d0.
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectIn the EABI, "sp" must be 64-bit aligned on entry to a function, and any
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project64-bit quantities (long long, double) must be 64-bit aligned.
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectMterp and ARM notes:
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectThe following registers have fixed assignments:
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  reg nick      purpose
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  r4  rPC       interpreted program counter, used for fetching instructions
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  r5  rFP       interpreted frame pointer, used for accessing locals and args
669f601a917c8878204482c37aec7005054b6776fabuzbee  r6  rSELF     self (Thread) pointer
671da12167d913efde56ec3b40491524b051679f2cAndy McFadden  r7  rINST     first 16-bit code unit of current instruction
681da12167d913efde56ec3b40491524b051679f2cAndy McFadden  r8  rIBASE    interpreted instruction base pointer, used for computed goto
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectMacros are provided for common operations.  Each macro MUST emit only
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectone instruction to make instruction-counting easier.  They MUST NOT alter
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectunspecified registers or condition codes.
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* single-purpose registers, given names for clarity */
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rPC     r4
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rFP     r5
789f601a917c8878204482c37aec7005054b6776fabuzbee#define rSELF   r6
791da12167d913efde56ec3b40491524b051679f2cAndy McFadden#define rINST   r7
801da12167d913efde56ec3b40491524b051679f2cAndy McFadden#define rIBASE  r8
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
829f601a917c8878204482c37aec7005054b6776fabuzbee/* save/restore the PC and/or FP from the thread struct */
839f601a917c8878204482c37aec7005054b6776fabuzbee#define LOAD_PC_FROM_SELF()     ldr     rPC, [rSELF, #offThread_pc]
849f601a917c8878204482c37aec7005054b6776fabuzbee#define SAVE_PC_TO_SELF()       str     rPC, [rSELF, #offThread_pc]
859f601a917c8878204482c37aec7005054b6776fabuzbee#define LOAD_FP_FROM_SELF()     ldr     rFP, [rSELF, #offThread_fp]
869f601a917c8878204482c37aec7005054b6776fabuzbee#define SAVE_FP_TO_SELF()       str     rFP, [rSELF, #offThread_fp]
879f601a917c8878204482c37aec7005054b6776fabuzbee#define LOAD_PC_FP_FROM_SELF()  ldmia   rSELF, {rPC, rFP}
889f601a917c8878204482c37aec7005054b6776fabuzbee#define SAVE_PC_FP_TO_SELF()    stmia   rSELF, {rPC, rFP}
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "export" the PC to the stack frame, f/b/o future exception objects.  Must
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be done *before* something calls dvmThrowException.
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In C this is "SAVEAREA_FROM_FP(fp)->xtra.currentPc = pc", i.e.
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fp - sizeof(StackSaveArea) + offsetof(SaveArea, xtra.currentPc)
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * It's okay to do this more than once.
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define EXPORT_PC() \
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    str     rPC, [rFP, #(-sizeofStackSaveArea + offStackSaveArea_currentPc)]
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Given a frame pointer, find the stack save area.
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In C this is "((StackSaveArea*)(_fp) -1)".
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SAVEAREA_FROM_FP(_reg, _fpreg) \
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sub     _reg, _fpreg, #sizeofStackSaveArea
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch the next instruction from rPC into rINST.  Does not advance rPC.
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_INST()            ldrh    rINST, [rPC]
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch the next instruction from the specified offset.  Advances rPC
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to point to the next instruction.  "_count" is in 16-bit code units.
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Because of the limited size of immediate constants on ARM, this is only
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * suitable for small forward movements (i.e. don't try to implement "goto"
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * with this).
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This must come AFTER anything that can throw an exception, or the
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * exception catch may miss.  (This also implies that it must come after
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * EXPORT_PC().)
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_ADVANCE_INST(_count) ldrh    rINST, [rPC, #(_count*2)]!
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
130642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng * The operation performed here is similar to FETCH_ADVANCE_INST, except the
131642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng * src and dest registers are parameterized (not hard-wired to rPC and rINST).
132642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng */
133642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng#define PREFETCH_ADVANCE_INST(_dreg, _sreg, _count) \
134642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng        ldrh    _dreg, [_sreg, #(_count*2)]!
135642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng
136642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng/*
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch the next instruction from an offset specified by _reg.  Updates
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC to point to the next instruction.  "_reg" must specify the distance
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * in bytes, *not* 16-bit code units, and may be a signed value.
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We want to write "ldrh rINST, [rPC, _reg, lsl #2]!", but some of the
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * bits that hold the shift distance are used for the half/byte/sign flags.
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In some cases we can pre-double _reg for free, so we require a byte offset
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * here.
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_ADVANCE_INST_RB(_reg) ldrh    rINST, [rPC, _reg]!
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch a half-word code unit from an offset past the current PC.  The
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "_count" value is in 16-bit code units.  Does not advance rPC.
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The "_S" variant works the same but treats the value as signed.
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH(_reg, _count)     ldrh    _reg, [rPC, #(_count*2)]
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_S(_reg, _count)   ldrsh   _reg, [rPC, #(_count*2)]
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch one byte from an offset past the current PC.  Pass in the same
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "_count" as you would for FETCH, and an additional 0/1 indicating which
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * byte of the halfword you want (lo/hi).
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_B(_reg, _count, _byte) ldrb     _reg, [rPC, #(_count*2+_byte)]
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Put the instruction's opcode field into the specified register.
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define GET_INST_OPCODE(_reg)   and     _reg, rINST, #255
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
170642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng * Put the prefetched instruction's opcode field into the specified register.
171642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng */
172642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng#define GET_PREFETCHED_OPCODE(_oreg, _ireg)   and     _oreg, _ireg, #255
173642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng
174642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng/*
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Begin executing the opcode in _reg.  Because this only jumps within the
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * interpreter, we don't have to worry about pre-ARMv5 THUMB interwork.
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define GOTO_OPCODE(_reg)       add     pc, rIBASE, _reg, lsl #6
179ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#define GOTO_OPCODE_IFEQ(_reg)  addeq   pc, rIBASE, _reg, lsl #6
180ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#define GOTO_OPCODE_IFNE(_reg)  addne   pc, rIBASE, _reg, lsl #6
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get/set the 32-bit value from a Dalvik register.
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define GET_VREG(_reg, _vreg)   ldr     _reg, [rFP, _vreg, lsl #2]
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SET_VREG(_reg, _vreg)   str     _reg, [rFP, _vreg, lsl #2]
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
188ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
1899f601a917c8878204482c37aec7005054b6776fabuzbee#define GET_JIT_PROF_TABLE(_reg)    ldr _reg,[rSELF,#offThread_pJitProfTable]
1909f601a917c8878204482c37aec7005054b6776fabuzbee#define GET_JIT_THRESHOLD(_reg)     ldr _reg,[rSELF,#offThread_jitThreshold]
191ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
192ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
194a80b76553c2b9f33c4063ae8c69c5362d961de81Andy McFadden * Convert a virtual register index into an address.
195a80b76553c2b9f33c4063ae8c69c5362d961de81Andy McFadden */
196a80b76553c2b9f33c4063ae8c69c5362d961de81Andy McFadden#define VREG_INDEX_TO_ADDR(_reg, _vreg) \
197a80b76553c2b9f33c4063ae8c69c5362d961de81Andy McFadden        add     _reg, rFP, _vreg, lsl #2
198a80b76553c2b9f33c4063ae8c69c5362d961de81Andy McFadden
199a80b76553c2b9f33c4063ae8c69c5362d961de81Andy McFadden/*
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is a #include, not a %include, because we want the C pre-processor
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to expand the macros into assembler assignment statements.
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#include "../common/asm-constants.h"
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2057b133ef7c84e68c3c4042176d830ea5b52e84139Ben Cheng#if defined(WITH_JIT)
2067b133ef7c84e68c3c4042176d830ea5b52e84139Ben Cheng#include "../common/jit-config.h"
2077b133ef7c84e68c3c4042176d830ea5b52e84139Ben Cheng#endif
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/platform.S */
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ===========================================================================
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  CPU-version-specific defines
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ===========================================================================
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
217c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden * Macro for data memory barrier; not meaningful pre-ARMv6K.
218c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden */
2190890e5bf0b2a502ca1030e9773fabc16ef1b5981Andy McFadden.macro  SMP_DMB
220c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.endm
221c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden
2221df319e3674d993a07bc0ff1f56a5915410b5903Andy McFadden/*
2231df319e3674d993a07bc0ff1f56a5915410b5903Andy McFadden * Macro for data memory barrier; not meaningful pre-ARMv6K.
2241df319e3674d993a07bc0ff1f56a5915410b5903Andy McFadden */
2251df319e3674d993a07bc0ff1f56a5915410b5903Andy McFadden.macro  SMP_DMB_ST
2261df319e3674d993a07bc0ff1f56a5915410b5903Andy McFadden.endm
2271df319e3674d993a07bc0ff1f56a5915410b5903Andy McFadden
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/entry.S */
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License.
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Interpreter entry point.
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We don't have formal stack frames, so gdb scans upward in the code
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to find the start of the function (a label with the %function type),
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and then looks at the next few instructions to figure out what
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * got pushed onto the stack.  From this it figures out how to restore
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the registers, including PC, for the previous stack frame.  If gdb
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sees a non-function label, it stops scanning, so either we need to
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * have nothing but assembler-local labels between the entry point and
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the break, or we need to fake it out.
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * When this is defined, we add some stuff to make gdb less confused.
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define ASSIST_DEBUGGER 1
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .text
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .align  2
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .global dvmMterpStdRun
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .type   dvmMterpStdRun, %function
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry:
2699f601a917c8878204482c37aec7005054b6776fabuzbee *  r0  Thread* self
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This function returns a boolean "changeInterp" value.  The return comes
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * via a call to dvmMterpStdBail().
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmMterpStdRun:
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define MTERP_ENTRY1 \
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .save {r4-r10,fp,lr}; \
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmfd   sp!, {r4-r10,fp,lr}         @ save 9 regs
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define MTERP_ENTRY2 \
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .pad    #4; \
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sub     sp, sp, #4                  @ align 64
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .fnstart
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    MTERP_ENTRY1
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    MTERP_ENTRY2
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* save stack pointer, add magic word for debuggerd */
2879f601a917c8878204482c37aec7005054b6776fabuzbee    str     sp, [r0, #offThread_bailPtr]  @ save SP for eventual return
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* set up "named" registers, figure out entry point */
2909f601a917c8878204482c37aec7005054b6776fabuzbee    mov     rSELF, r0                   @ set rSELF
2919f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r1, [r0, #offThread_entryPoint]   @ enum is 4 bytes in aapcs-EABI
2929f601a917c8878204482c37aec7005054b6776fabuzbee    LOAD_PC_FP_FROM_SELF()              @ load rPC and rFP from "thread"
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    adr     rIBASE, dvmAsmInstructionStart  @ set rIBASE
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #kInterpEntryInstr      @ usual case?
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .Lnot_instr                 @ no, handle it
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
297ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
298d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng.LentryInstr:
299ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    /* Entry is always a possible trace start */
300ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
301ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_INST()
3027a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    mov     r1, #0                      @ prepare the value for the new state
3039f601a917c8878204482c37aec7005054b6776fabuzbee    str     r1, [rSELF, #offThread_inJitCodeCache] @ back to the interp land
3047a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    cmp     r0,#0                       @ is profiling disabled?
3057a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng#if !defined(WITH_SELF_VERIFICATION)
3067a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    bne     common_updateProfile        @ profiling is enabled
3077a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng#else
3089f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_shadowSpace] @ to find out the jit exit state
3097a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    beq     1f                          @ profiling is disabled
3107a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    ldr     r3, [r2, #offShadowSpace_jitExitState]  @ jit exit state
3117a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    cmp     r3, #kSVSTraceSelect        @ hot trace following?
3127a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    moveq   r2,#kJitTSelectRequestHot   @ ask for trace selection
3137a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    beq     common_selectTrace          @ go build the trace
3147a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    cmp     r3, #kSVSNoProfile          @ don't profile the next instruction?
3157a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    beq     1f                          @ intrepret the next instruction
3167a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    b       common_updateProfile        @ collect profiles
3177a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng#endif
3187a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng1:
319ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_INST_OPCODE(ip)
320ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GOTO_OPCODE(ip)
321ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* start executing the instruction at rPC */
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_INST()                        @ load rINST from rPC
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
326ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.Lnot_instr:
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #kInterpEntryReturn     @ were we returning from a method?
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_returnFromMethod
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.Lnot_return:
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #kInterpEntryThrow      @ were we throwing an exception?
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_exceptionThrown
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
336ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
337ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng.Lnot_throw:
3389f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r10,[rSELF, #offThread_jitResumeNPC]
3399f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2,[rSELF, #offThread_jitResumeDPC]
340ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp     r1, #kInterpEntryResume     @ resuming after Jit single-step?
341ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bne     .Lbad_arg
342ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp     rPC,r2
343d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng    bne     .LentryInstr                @ must have branched, don't resume
344d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng#if defined(WITH_SELF_VERIFICATION)
3459f601a917c8878204482c37aec7005054b6776fabuzbee    @ self->entryPoint will be set in dvmSelfVerificationSaveState
346d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng    b       jitSVShadowRunStart         @ re-enter the translation after the
347d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng                                        @ single-stepped instruction
348d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng    @noreturn
349d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng#endif
350ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    mov     r1, #kInterpEntryInstr
3519f601a917c8878204482c37aec7005054b6776fabuzbee    str     r1, [rSELF, #offThread_entryPoint]
352d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng    bx      r10                         @ re-enter the translation
353ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
354ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng
355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.Lbad_arg:
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, strBadEntryPoint
357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ r1 holds value of entryPoint
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      printf
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmAbort
360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .fnend
361b387fe1b970a216c09d2abc98c893ff1fff3e512Andy McFadden    .size   dvmMterpStdRun, .-dvmMterpStdRun
362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .global dvmMterpStdBail
365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .type   dvmMterpStdBail, %function
366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Restore the stack pointer and PC from the save point established on entry.
369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is essentially the same as a longjmp, but should be cheaper.  The
370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * last instruction causes us to return to whoever called dvmMterpStdRun.
371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We pushed some registers on the stack in dvmMterpStdRun, then saved
373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * SP and LR.  Here we restore SP, restore the registers, and then restore
374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * LR to PC.
375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry:
3779f601a917c8878204482c37aec7005054b6776fabuzbee *  r0  Thread* self
378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  r1  bool changeInterp
379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmMterpStdBail:
3819f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     sp, [r0, #offThread_bailPtr]      @ sp<- saved SP
382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r1                          @ return the changeInterp value
383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     sp, sp, #4                      @ un-align 64
384d88756df5b4dbc6fd450afd0019a5f64ebe4432dElliott Hughes    ldmfd   sp!, {r4-r10,fp,pc}             @ restore 9 regs and return
385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * String references.
389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrBadEntryPoint:
391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .word   .LstrBadEntryPoint
392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .global dvmAsmInstructionStart
395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .type   dvmAsmInstructionStart, %function
396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmInstructionStart = .L_OP_NOP
397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .text
398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOP: /* 0x00 */
402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NOP.S */
403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance to next instr, load rINST
404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ ip<- opcode from rINST
405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ execute it
406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#ifdef ASSIST_DEBUGGER
408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* insert fake function header to help gdb find the stack frame */
409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .type   dalvik_inst, %function
410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectdalvik_inst:
411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .fnstart
412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    MTERP_ENTRY1
413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    MTERP_ENTRY2
414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .fnend
415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif
416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE: /* 0x01 */
420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE.S */
421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* for move, move-object, long-to-int */
422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB */
423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B from 15:12
424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #8           @ r0<- A from 11:8
425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r1)                    @ r2<- fp[B]
427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r0, r0, #15
428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ ip<- opcode from rINST
429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r2, r0)                    @ fp[A]<- r2
430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ execute next instruction
431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_FROM16: /* 0x02 */
435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_FROM16.S */
436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* for: move/from16, move-object/from16 */
437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBBBB */
438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #8           @ r0<- AA
440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r1)                    @ r2<- fp[BBBB]
442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r2, r0)                    @ fp[AA]<- r2
444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_16: /* 0x03 */
449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_16.S */
450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* for: move/16, move-object/16 */
451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAAAA, vBBBB */
452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 2)                        @ r1<- BBBB
453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- AAAA
454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(3)               @ advance rPC, load rINST
455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r1)                    @ r2<- fp[BBBB]
456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r2, r0)                    @ fp[AAAA]<- r2
458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE: /* 0x04 */
463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_WIDE.S */
464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* move-wide vA, vB */
465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */
466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- A(+)
467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r2, #15
469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[B]
470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r2, rFP, r2, lsl #2         @ r2<- &fp[A]
471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r0-r1}                 @ r0/r1<- fp[B]
472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r2, {r0-r1}                 @ fp[A]<- r0/r1
475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE_FROM16: /* 0x05 */
480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_WIDE_FROM16.S */
481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* move-wide/from16 vAA, vBBBB */
482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */
483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r3, 1)                        @ r3<- BBBB
484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[BBBB]
486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r2, rFP, r2, lsl #2         @ r2<- &fp[AA]
487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r0-r1}                 @ r0/r1<- fp[BBBB]
488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r2, {r0-r1}                 @ fp[AA]<- r0/r1
491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE_16: /* 0x06 */
496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_WIDE_16.S */
497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* move-wide/16 vAAAA, vBBBB */
498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */
499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r3, 2)                        @ r3<- BBBB
500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r2, 1)                        @ r2<- AAAA
501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[BBBB]
502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r2, rFP, r2, lsl #2         @ r2<- &fp[AAAA]
503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r0-r1}                 @ r0/r1<- fp[BBBB]
504445194bc141dc67e2f678aa1bbd5e59ca66254e5Andy McFadden    FETCH_ADVANCE_INST(3)               @ advance rPC, load rINST
505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r2, {r0-r1}                 @ fp[AAAA]<- r0/r1
507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT: /* 0x07 */
512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_OBJECT.S */
513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE.S */
514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* for move, move-object, long-to-int */
515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB */
516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B from 15:12
517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #8           @ r0<- A from 11:8
518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r1)                    @ r2<- fp[B]
520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r0, r0, #15
521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ ip<- opcode from rINST
522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r2, r0)                    @ fp[A]<- r2
523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ execute next instruction
524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT_FROM16: /* 0x08 */
529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_OBJECT_FROM16.S */
530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_FROM16.S */
531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* for: move/from16, move-object/from16 */
532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBBBB */
533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #8           @ r0<- AA
535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r1)                    @ r2<- fp[BBBB]
537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r2, r0)                    @ fp[AA]<- r2
539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT_16: /* 0x09 */
545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_OBJECT_16.S */
546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_16.S */
547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* for: move/16, move-object/16 */
548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAAAA, vBBBB */
549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 2)                        @ r1<- BBBB
550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- AAAA
551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(3)               @ advance rPC, load rINST
552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r1)                    @ r2<- fp[BBBB]
553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r2, r0)                    @ fp[AAAA]<- r2
555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT: /* 0x0a */
561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_RESULT.S */
562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* for: move-result, move-result-object */
563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA */
564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
5669f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r0, [rSELF, #offThread_retval]    @ r0<- self->retval.i
567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r2)                    @ fp[AA]<- r0
569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT_WIDE: /* 0x0b */
574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_RESULT_WIDE.S */
575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* move-result-wide vAA */
576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
5779f601a917c8878204482c37aec7005054b6776fabuzbee    add     r3, rSELF, #offThread_retval  @ r3<- &self->retval
578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r2, rFP, r2, lsl #2         @ r2<- &fp[AA]
579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r0-r1}                 @ r0/r1<- retval.j
580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r2, {r0-r1}                 @ fp[AA]<- r0/r1
583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT_OBJECT: /* 0x0c */
588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_RESULT_OBJECT.S */
589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_RESULT.S */
590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* for: move-result, move-result-object */
591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA */
592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
5949f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r0, [rSELF, #offThread_retval]    @ r0<- self->retval.i
595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r2)                    @ fp[AA]<- r0
597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_EXCEPTION: /* 0x0d */
603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_EXCEPTION.S */
604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* move-exception vAA */
605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
6069f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_exception]  @ r3<- dvmGetException bypass
607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, #0                      @ r1<- 0
608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r3, r2)                    @ fp[AA]<- exception obj
610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6119f601a917c8878204482c37aec7005054b6776fabuzbee    str     r1, [rSELF, #offThread_exception]  @ dvmClearException bypass
612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_VOID: /* 0x0e */
617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RETURN_VOID.S */
618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_returnFromMethod
619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN: /* 0x0f */
623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RETURN.S */
624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6259f601a917c8878204482c37aec7005054b6776fabuzbee     * Return a 32-bit value.  Copies the return value into the "thread"
626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * structure, then jumps to the return handler.
627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: return, return-object
629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA */
631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vAA
6339f601a917c8878204482c37aec7005054b6776fabuzbee    str     r0, [rSELF, #offThread_retval] @ retval.i <- vAA
634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_returnFromMethod
635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_WIDE: /* 0x10 */
639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RETURN_WIDE.S */
640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6419f601a917c8878204482c37aec7005054b6776fabuzbee     * Return a 64-bit value.  Copies the return value into the "thread"
642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * structure, then jumps to the return handler.
643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* return-wide vAA */
645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r2, rFP, r2, lsl #2         @ r2<- &fp[AA]
6479f601a917c8878204482c37aec7005054b6776fabuzbee    add     r3, rSELF, #offThread_retval  @ r3<- &self->retval
648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r2, {r0-r1}                 @ r0/r1 <- vAA/vAA+1
649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r3, {r0-r1}                 @ retval<- r0/r1
650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_returnFromMethod
651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_OBJECT: /* 0x11 */
655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RETURN_OBJECT.S */
656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RETURN.S */
657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6589f601a917c8878204482c37aec7005054b6776fabuzbee     * Return a 32-bit value.  Copies the return value into the "thread"
659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * structure, then jumps to the return handler.
660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: return, return-object
662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA */
664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vAA
6669f601a917c8878204482c37aec7005054b6776fabuzbee    str     r0, [rSELF, #offThread_retval] @ retval.i <- vAA
667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_returnFromMethod
668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_4: /* 0x12 */
673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_4.S */
674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const/4 vA, #+B */
675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsl #16          @ r1<- Bxxx0000
676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #8           @ r0<- A+
677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r1, asr #28             @ r1<- sssssssB (sign-extended)
679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r0, r0, #15
680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ ip<- opcode from rINST
681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r1, r0)                    @ fp[A]<- r1
682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ execute next instruction
683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_16: /* 0x13 */
687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_16.S */
688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const/16 vAA, #+BBBB */
689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r0, 1)                      @ r0<- ssssBBBB (sign-extended)
690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #8           @ r3<- AA
691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r3)                    @ vAA<- r0
693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST: /* 0x14 */
699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST.S */
700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const vAA, #+BBBBbbbb */
701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #8           @ r3<- AA
702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- bbbb (low)
703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 2)                        @ r1<- BBBB (high)
704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(3)               @ advance rPC, load rINST
705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r0, r0, r1, lsl #16         @ r0<- BBBBbbbb
706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r3)                    @ vAA<- r0
708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_HIGH16: /* 0x15 */
713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_HIGH16.S */
714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const/high16 vAA, #+BBBB0000 */
715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- 0000BBBB (zero-extended)
716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #8           @ r3<- AA
717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, lsl #16             @ r0<- BBBB0000
718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r3)                    @ vAA<- r0
720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_16: /* 0x16 */
726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_WIDE_16.S */
727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const-wide/16 vAA, #+BBBB */
728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r0, 1)                      @ r0<- ssssBBBB (sign-extended)
729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #8           @ r3<- AA
730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r0, asr #31             @ r1<- ssssssss
731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[AA]
733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r3, {r0-r1}                 @ vAA<- r0/r1
735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_32: /* 0x17 */
740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_WIDE_32.S */
741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const-wide/32 vAA, #+BBBBbbbb */
742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- 0000bbbb (low)
743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #8           @ r3<- AA
744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r2, 2)                      @ r2<- ssssBBBB (high)
745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(3)               @ advance rPC, load rINST
746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r0, r0, r2, lsl #16         @ r0<- BBBBbbbb
747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[AA]
748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r0, asr #31             @ r1<- ssssssss
749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r3, {r0-r1}                 @ vAA<- r0/r1
751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE: /* 0x18 */
756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_WIDE.S */
757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const-wide vAA, #+HHHHhhhhBBBBbbbb */
758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- bbbb (low)
759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 2)                        @ r1<- BBBB (low middle)
760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r2, 3)                        @ r2<- hhhh (high middle)
761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r0, r0, r1, lsl #16         @ r0<- BBBBbbbb (low word)
762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r3, 4)                        @ r3<- HHHH (high)
763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r1, r2, r3, lsl #16         @ r1<- HHHHhhhh (high word)
765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(5)               @ advance rPC, load rINST
766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0-r1}                 @ vAA<- r0/r1
769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_HIGH16: /* 0x19 */
774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_WIDE_HIGH16.S */
775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const-wide/high16 vAA, #+BBBB000000000000 */
776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- 0000BBBB (zero-extended)
777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #8           @ r3<- AA
778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, #0                      @ r0<- 00000000
779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r1, lsl #16             @ r1<- BBBB0000
780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[AA]
782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r3, {r0-r1}                 @ vAA<- r0/r1
784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_STRING: /* 0x1a */
789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_STRING.S */
790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const/string vAA, String@BBBB */
791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
7929f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]  @ r2<- self->methodClassDex
793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offDvmDex_pResStrings]   @ r2<- dvmDex->pResStrings
795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- pResStrings[BBBB]
796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ not yet resolved?
797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_CONST_STRING_resolve
798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)                    @ vAA<- r0
801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_STRING_JUMBO: /* 0x1b */
806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_STRING_JUMBO.S */
807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const/string vAA, String@BBBBBBBB */
808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- bbbb (low)
809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 2)                        @ r1<- BBBB (high)
8109f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]  @ r2<- self->methodClassDex
811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offDvmDex_pResStrings]   @ r2<- dvmDex->pResStrings
813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r1, r0, r1, lsl #16         @ r1<- BBBBbbbb
814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- pResStrings[BBBB]
815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0
816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_CONST_STRING_JUMBO_resolve
817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(3)               @ advance rPC, load rINST
818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)                    @ vAA<- r0
820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_CLASS: /* 0x1c */
825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_CLASS.S */
826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* const/class vAA, Class@BBBB */
827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
8289f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]  @ r2<- self->methodClassDex
829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offDvmDex_pResClasses]   @ r2<- dvmDex->pResClasses
831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- pResClasses[BBBB]
832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ not yet resolved?
833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_CONST_CLASS_resolve
834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)                    @ vAA<- r0
837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MONITOR_ENTER: /* 0x1d */
842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MONITOR_ENTER.S */
843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Synchronize on an object.
845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* monitor-enter vAA */
847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r2)                    @ r1<- vAA (object)
8499f601a917c8878204482c37aec7005054b6776fabuzbee    mov     r0, rSELF                   @ r0<- self
850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ null object?
85101605d2b668e8e1701cfdfa302dde847b9171fc9Carl Shapiro    EXPORT_PC()                         @ need for precise GC
852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ null object, throw an exception
853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmLockObject               @ call(self, obj)
855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MONITOR_EXIT: /* 0x1e */
861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MONITOR_EXIT.S */
862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Unlock an object.
864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Exceptions that occur when unlocking a monitor need to appear as
866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * if they happened at the following instruction.  See the Dalvik
867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * instruction spec.
868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* monitor-exit vAA */
870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ before fetch: export the PC
872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r2)                    @ r1<- vAA (object)
873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ null object?
8746bbdd6b005ec5cb567ec9576190a7cd784248c5cBill Buzbee    beq     1f                          @ yes
8759f601a917c8878204482c37aec7005054b6776fabuzbee    mov     r0, rSELF                   @ r0<- self
876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmUnlockObject             @ r0<- success for unlock(self, obj)
877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ failed?
878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ before throw: advance rPC, load rINST
8796bbdd6b005ec5cb567ec9576190a7cd784248c5cBill Buzbee    beq     common_exceptionThrown      @ yes, exception is pending
880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
8826bbdd6b005ec5cb567ec9576190a7cd784248c5cBill Buzbee1:
8836bbdd6b005ec5cb567ec9576190a7cd784248c5cBill Buzbee    FETCH_ADVANCE_INST(1)               @ advance before throw
8846bbdd6b005ec5cb567ec9576190a7cd784248c5cBill Buzbee    b      common_errNullObject
885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CHECK_CAST: /* 0x1f */
889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CHECK_CAST.S */
890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Check to see if a cast from one class to another is allowed.
892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* check-cast vAA, class@BBBB */
894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #8           @ r3<- AA
895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r2, 1)                        @ r2<- BBBB
896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r9, r3)                    @ r9<- object
8979f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r0, [rSELF, #offThread_methodClassDex]    @ r0<- pDvmDex
898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r9, #0                      @ is object null?
899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r0, #offDvmDex_pResClasses]    @ r0<- pDvmDex->pResClasses
900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_CHECK_CAST_okay            @ null obj, cast always succeeds
901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r1, [r0, r2, lsl #2]        @ r1<- resolved class
902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r9, #offObject_clazz]  @ r0<- obj->clazz
903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ have we resolved this before?
904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_CHECK_CAST_resolve         @ not resolved, do it now
905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_resolved:
906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, r1                      @ same class (trivial success)?
907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_CHECK_CAST_fullcheck       @ no, do full check
908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_okay:
909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INSTANCE_OF: /* 0x20 */
916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INSTANCE_OF.S */
917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Check to see if an object reference is an instance of a class.
919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Most common situation is a non-null object, being compared against
921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * an already-resolved class.
922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* instance-of vA, vB, class@CCCC */
924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r3)                    @ r0<- vB (object)
927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15                 @ r9<- A
928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is object null?
9299f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- pDvmDex
930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_INSTANCE_OF_store           @ null obj, not an instance, store r0
931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r3, 1)                        @ r3<- CCCC
932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offDvmDex_pResClasses]    @ r2<- pDvmDex->pResClasses
933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r1, [r2, r3, lsl #2]        @ r1<- resolved class
934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r0, #offObject_clazz]  @ r0<- obj->clazz
935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ have we resolved this before?
936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_INSTANCE_OF_resolve         @ not resolved, do it now
937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_resolved: @ r0=obj->clazz, r1=resolved class
938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, r1                      @ same class (trivial success)?
939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_INSTANCE_OF_trivial         @ yes, trivial finish
940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       .LOP_INSTANCE_OF_fullcheck       @ no, do full check
941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ARRAY_LENGTH: /* 0x21 */
945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ARRAY_LENGTH.S */
946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Return the length of an array.
948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- A+
951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r1)                    @ r0<- vB (object ref)
952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r2, #15                 @ r2<- A
953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is object null?
954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ yup, fail
955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r0, #offArrayObject_length]    @ r3<- array length
957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r3, r2)                    @ vB<- length
959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEW_INSTANCE: /* 0x22 */
964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NEW_INSTANCE.S */
965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Create a new instance of a class.
967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* new-instance vAA, class@BBBB */
9699f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- pDvmDex
970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r3, #offDvmDex_pResClasses]    @ r3<- pDvmDex->pResClasses
972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, r1, lsl #2]        @ r0<- resolved class
973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ req'd for init, resolve, alloc
974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ already resolved?
975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_NEW_INSTANCE_resolve         @ no, resolve it now
976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_resolved:   @ r0=class
977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldrb    r1, [r0, #offClassObject_status]    @ r1<- ClassStatus enum
978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #CLASS_INITIALIZED      @ has class been initialized?
979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_NEW_INSTANCE_needinit        @ no, init class now
980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_initialized: @ r0=class
981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, #ALLOC_DONT_TRACK       @ flags for alloc call
982b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden    bl      dvmAllocObject              @ r0<- new object
983b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden    b       .LOP_NEW_INSTANCE_finish          @ continue
984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEW_ARRAY: /* 0x23 */
988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NEW_ARRAY.S */
989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Allocate an array of objects, specified with the array class
991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * and a count.
992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The verifier guarantees that this is an array class, so we don't
994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * check for it here.
995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* new-array vA, vB, class@CCCC */
997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #12          @ r0<- B
998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r2, 1)                        @ r2<- CCCC
9999f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- pDvmDex
1000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r0)                    @ r1<- vB (array length)
1001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r3, #offDvmDex_pResClasses]    @ r3<- pDvmDex->pResClasses
1002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ check length
1003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, r2, lsl #2]        @ r0<- resolved class
10048cb0d098d79af61546e275f633325794f4587602buzbee    bmi     common_errNegativeArraySize @ negative length, bail - len in r1
1005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ already resolved?
1006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ req'd for resolve, alloc
1007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_NEW_ARRAY_finish          @ resolved, continue
1008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       .LOP_NEW_ARRAY_resolve         @ do resolve now
1009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILLED_NEW_ARRAY: /* 0x24 */
1013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FILLED_NEW_ARRAY.S */
1014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Create a new array with elements filled from registers.
1016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: filled-new-array, filled-new-array/range
1018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
1020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op {vCCCC..v(CCCC+AA-1)}, type@BBBB */
10219f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- pDvmDex
1022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
1023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r3, #offDvmDex_pResClasses]    @ r3<- pDvmDex->pResClasses
1024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ need for resolve and alloc
1025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, r1, lsl #2]        @ r0<- resolved class
1026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r10, rINST, lsr #8          @ r10<- AA or BA
1027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ already resolved?
1028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_FILLED_NEW_ARRAY_continue        @ yes, continue on
10299f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r3, [rSELF, #offThread_method] @ r3<- self->method
1030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, #0                      @ r2<- false
1031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, #offMethod_clazz]  @ r0<- method->clazz
1032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveClass             @ r0<- call(clazz, ref)
1033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ got null?
1034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_exceptionThrown      @ yes, handle exception
1035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       .LOP_FILLED_NEW_ARRAY_continue
1036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILLED_NEW_ARRAY_RANGE: /* 0x25 */
1040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FILLED_NEW_ARRAY_RANGE.S */
1041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FILLED_NEW_ARRAY.S */
1042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Create a new array with elements filled from registers.
1044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: filled-new-array, filled-new-array/range
1046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
1048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op {vCCCC..v(CCCC+AA-1)}, type@BBBB */
10499f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- pDvmDex
1050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
1051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r3, #offDvmDex_pResClasses]    @ r3<- pDvmDex->pResClasses
1052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ need for resolve and alloc
1053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, r1, lsl #2]        @ r0<- resolved class
1054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r10, rINST, lsr #8          @ r10<- AA or BA
1055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ already resolved?
1056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_FILLED_NEW_ARRAY_RANGE_continue        @ yes, continue on
10579f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r3, [rSELF, #offThread_method] @ r3<- self->method
1058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, #0                      @ r2<- false
1059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, #offMethod_clazz]  @ r0<- method->clazz
1060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveClass             @ r0<- call(clazz, ref)
1061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ got null?
1062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_exceptionThrown      @ yes, handle exception
1063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       .LOP_FILLED_NEW_ARRAY_RANGE_continue
1064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILL_ARRAY_DATA: /* 0x26 */
1069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FILL_ARRAY_DATA.S */
1070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* fill-array-data vAA, +BBBBBBBB */
1071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- bbbb (lo)
1072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 2)                        @ r1<- BBBB (hi)
1073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #8           @ r3<- AA
1074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r1, r0, r1, lsl #16         @ r1<- BBBBbbbb
1075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r3)                    @ r0<- vAA (array object)
1076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r1, rPC, r1, lsl #1         @ r1<- PC + BBBBbbbb*2 (array data off.)
1077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC();
1078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmInterpHandleFillArrayData@ fill the array with predefined data
1079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ 0 means an exception is thrown
1080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_exceptionThrown      @ has exception
1081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(3)               @ advance rPC, load rINST
1082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_THROW: /* 0x27 */
1088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_THROW.S */
1089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Throw an exception object in the current thread.
1091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* throw vAA */
1093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
1094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r2)                    @ r1<- vAA (exception object)
10958ba2708ea118381f2df5ca55b9bad2ae4c050504Andy McFadden    EXPORT_PC()                         @ exception handler can throw
1096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ null object?
1097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ yes, throw an NPE instead
1098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ bypass dvmSetException, just store it
10999f601a917c8878204482c37aec7005054b6776fabuzbee    str     r1, [rSELF, #offThread_exception]  @ thread->exception<- obj
1100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
1101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO: /* 0x28 */
1105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_GOTO.S */
1106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Unconditional branch, 8-bit offset.
1108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The branch distance is a signed code-unit offset, which we need to
1110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * double to get a byte offset.
1111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* goto +AA */
1113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsl #16          @ r0<- AAxx0000
1114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r9, r0, asr #24             @ r9<- ssssssAA (sign-extended)
1115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, r9, lsl #1              @ r9<- byte offset
1116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bmi     common_backwardBranch       @ backward branch, do periodic checks
1117ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
1118ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
1119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1120ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp     r0,#0
1121ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bne     common_updateProfile
1122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1124ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
1125ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1126ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1127ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GOTO_OPCODE(ip)                     @ jump to next instruction
1128ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
1129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO_16: /* 0x29 */
1133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_GOTO_16.S */
1134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Unconditional branch, 16-bit offset.
1136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The branch distance is a signed code-unit offset, which we need to
1138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * double to get a byte offset.
1139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* goto/16 +AAAA */
1141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r0, 1)                      @ r0<- ssssAAAA (sign-extended)
1142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r9, r0, asl #1              @ r9<- byte offset, check sign
1143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bmi     common_backwardBranch       @ backward branch, do periodic checks
1144ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
1145ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
1146ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1147ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp     r0,#0
1148ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bne     common_updateProfile
1149ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1150ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GOTO_OPCODE(ip)                     @ jump to next instruction
1151ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
1152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1155ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
1156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO_32: /* 0x2a */
1160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_GOTO_32.S */
1161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Unconditional branch, 32-bit offset.
1163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The branch distance is a signed code-unit offset, which we need to
1165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * double to get a byte offset.
1166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Unlike most opcodes, this one is allowed to branch to itself, so
1168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * our "backward branch" test must be "<=0" instead of "<0".  The ORRS
1169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * instruction doesn't affect the V flag, so we need to clear it
1170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * explicitly.
1171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* goto/32 +AAAAAAAA */
1173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- aaaa (lo)
1174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 2)                        @ r1<- AAAA (hi)
1175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     ip, ip                      @ (clear V flag during stall)
1176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    r0, r0, r1, lsl #16         @ r0<- AAAAaaaa, check sign
1177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, r0, asl #1              @ r9<- byte offset
1178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ble     common_backwardBranch       @ backward branch, do periodic checks
1179ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
1180ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
1181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1182ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp     r0,#0
1183ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bne     common_updateProfile
1184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1186ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
1187ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1188ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1189ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GOTO_OPCODE(ip)                     @ jump to next instruction
1190ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
1191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_PACKED_SWITCH: /* 0x2b */
1195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_PACKED_SWITCH.S */
1196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle a packed-switch or sparse-switch instruction.  In both cases
1198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * we decode it and hand it off to a helper function.
1199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * We don't really expect backward branches in a switch statement, but
1201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * they're perfectly legal, so we check for them here.
1202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: packed-switch, sparse-switch
1204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, +BBBB */
1206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- bbbb (lo)
1207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 2)                        @ r1<- BBBB (hi)
1208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #8           @ r3<- AA
1209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r0, r0, r1, lsl #16         @ r0<- BBBBbbbb
1210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vAA
1211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, rPC, r0, lsl #1         @ r0<- PC + BBBBbbbb*2
1212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmInterpHandlePackedSwitch                       @ r0<- code-unit branch offset
1213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r9, r0, asl #1              @ r9<- branch byte offset, check sign
1214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bmi     common_backwardBranch       @ backward branch, do periodic checks
1215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_backwardBranch       @ (want to use BLE but V is unknown)
1216ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
1217ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
1218ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1219ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp     r0,#0
1220ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bne     common_updateProfile
1221ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1222ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GOTO_OPCODE(ip)                     @ jump to next instruction
1223ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
1224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1227ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
1228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPARSE_SWITCH: /* 0x2c */
1232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPARSE_SWITCH.S */
1233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_PACKED_SWITCH.S */
1234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle a packed-switch or sparse-switch instruction.  In both cases
1236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * we decode it and hand it off to a helper function.
1237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * We don't really expect backward branches in a switch statement, but
1239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * they're perfectly legal, so we check for them here.
1240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: packed-switch, sparse-switch
1242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, +BBBB */
1244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- bbbb (lo)
1245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 2)                        @ r1<- BBBB (hi)
1246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #8           @ r3<- AA
1247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r0, r0, r1, lsl #16         @ r0<- BBBBbbbb
1248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vAA
1249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, rPC, r0, lsl #1         @ r0<- PC + BBBBbbbb*2
1250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmInterpHandleSparseSwitch                       @ r0<- code-unit branch offset
1251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r9, r0, asl #1              @ r9<- branch byte offset, check sign
1252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bmi     common_backwardBranch       @ backward branch, do periodic checks
1253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_backwardBranch       @ (want to use BLE but V is unknown)
1254ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
1255ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
1256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1257ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp     r0,#0
1258ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bne     common_updateProfile
1259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1261ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
1262ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1263ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1264ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GOTO_OPCODE(ip)                     @ jump to next instruction
1265ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
1266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPL_FLOAT: /* 0x2d */
1271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMPL_FLOAT.S */
1272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Compare two floating-point values.  Puts 0, 1, or -1 into the
1274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * destination register based on the results of the comparison.
1275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Provide a "naninst" instruction that puts 1 or -1 into r1 depending
1277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * on what value we'd like to return when one of the operands is NaN.
1278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The operation we're implementing is:
1280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *   if (x == y)
1281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *     return 0;
1282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *   else if (x < y)
1283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *     return -1;
1284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *   else if (x > y)
1285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *     return 1;
1286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *   else
1287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *     return {-1,1};  // one or both operands was NaN
1288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The straightforward implementation requires 3 calls to functions
1290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that return a result in r0.  We can do it with two calls if our
1291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * EABI library supports __aeabi_cfcmple (only one if we want to check
1292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for NaN directly):
1293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *   check x <= y
1294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *     if <, return -1
1295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *     if ==, return 0
1296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *   check y <= x
1297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *     if <, return 1
1298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *   return {-1,1}
1299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: cmpl-float, cmpg-float
1301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
1303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
1304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
1305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
1306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r9, r2)                    @ r9<- vBB
1307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r10, r3)                   @ r10<- vCC
1308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r9                      @ copy to arg registers
1309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r10
1310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_cfcmple             @ cmp <=: C clear if <, Z set if eq
1311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bhi     .LOP_CMPL_FLOAT_gt_or_nan       @ C set and Z clear, disambiguate
1312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mvncc   r1, #0                      @ (less than) r1<- -1
1313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    moveq   r1, #0                      @ (equal) r1<- 0, trumps less than
1314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_FLOAT_finish:
1315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #8           @ r3<- AA
1316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r1, r3)                    @ vAA<- r1
1318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPG_FLOAT: /* 0x2e */
1324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMPG_FLOAT.S */
1325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMPL_FLOAT.S */
1326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Compare two floating-point values.  Puts 0, 1, or -1 into the
1328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * destination register based on the results of the comparison.
1329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Provide a "naninst" instruction that puts 1 or -1 into r1 depending
1331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * on what value we'd like to return when one of the operands is NaN.
1332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The operation we're implementing is:
1334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *   if (x == y)
1335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *     return 0;
1336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *   else if (x < y)
1337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *     return -1;
1338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *   else if (x > y)
1339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *     return 1;
1340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *   else
1341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *     return {-1,1};  // one or both operands was NaN
1342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The straightforward implementation requires 3 calls to functions
1344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that return a result in r0.  We can do it with two calls if our
1345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * EABI library supports __aeabi_cfcmple (only one if we want to check
1346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for NaN directly):
1347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *   check x <= y
1348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *     if <, return -1
1349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *     if ==, return 0
1350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *   check y <= x
1351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *     if <, return 1
1352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *   return {-1,1}
1353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: cmpl-float, cmpg-float
1355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
1357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
1358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
1359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
1360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r9, r2)                    @ r9<- vBB
1361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r10, r3)                   @ r10<- vCC
1362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r9                      @ copy to arg registers
1363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r10
1364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_cfcmple             @ cmp <=: C clear if <, Z set if eq
1365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bhi     .LOP_CMPG_FLOAT_gt_or_nan       @ C set and Z clear, disambiguate
1366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mvncc   r1, #0                      @ (less than) r1<- -1
1367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    moveq   r1, #0                      @ (equal) r1<- 0, trumps less than
1368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_FLOAT_finish:
1369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #8           @ r3<- AA
1370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r1, r3)                    @ vAA<- r1
1372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPL_DOUBLE: /* 0x2f */
1379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMPL_DOUBLE.S */
1380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Compare two floating-point values.  Puts 0, 1, or -1 into the
1382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * destination register based on the results of the comparison.
1383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Provide a "naninst" instruction that puts 1 or -1 into r1 depending
1385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * on what value we'd like to return when one of the operands is NaN.
1386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * See OP_CMPL_FLOAT for an explanation.
1388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: cmpl-double, cmpg-double
1390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
1392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
1393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r0, #255                @ r9<- BB
1394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r10, r0, lsr #8             @ r10<- CC
1395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[BB]
1396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r10, rFP, r10, lsl #2       @ r10<- &fp[CC]
1397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r9, {r0-r1}                 @ r0/r1<- vBB/vBB+1
1398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r10, {r2-r3}                @ r2/r3<- vCC/vCC+1
1399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_cdcmple             @ cmp <=: C clear if <, Z set if eq
1400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bhi     .LOP_CMPL_DOUBLE_gt_or_nan       @ C set and Z clear, disambiguate
1401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mvncc   r1, #0                      @ (less than) r1<- -1
1402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    moveq   r1, #0                      @ (equal) r1<- 0, trumps less than
1403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_DOUBLE_finish:
1404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #8           @ r3<- AA
1405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r1, r3)                    @ vAA<- r1
1407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPG_DOUBLE: /* 0x30 */
1413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMPG_DOUBLE.S */
1414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMPL_DOUBLE.S */
1415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Compare two floating-point values.  Puts 0, 1, or -1 into the
1417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * destination register based on the results of the comparison.
1418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Provide a "naninst" instruction that puts 1 or -1 into r1 depending
1420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * on what value we'd like to return when one of the operands is NaN.
1421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * See OP_CMPL_FLOAT for an explanation.
1423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: cmpl-double, cmpg-double
1425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
1427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
1428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r0, #255                @ r9<- BB
1429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r10, r0, lsr #8             @ r10<- CC
1430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[BB]
1431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r10, rFP, r10, lsl #2       @ r10<- &fp[CC]
1432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r9, {r0-r1}                 @ r0/r1<- vBB/vBB+1
1433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r10, {r2-r3}                @ r2/r3<- vCC/vCC+1
1434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_cdcmple             @ cmp <=: C clear if <, Z set if eq
1435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bhi     .LOP_CMPG_DOUBLE_gt_or_nan       @ C set and Z clear, disambiguate
1436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mvncc   r1, #0                      @ (less than) r1<- -1
1437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    moveq   r1, #0                      @ (equal) r1<- 0, trumps less than
1438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_DOUBLE_finish:
1439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #8           @ r3<- AA
1440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r1, r3)                    @ vAA<- r1
1442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMP_LONG: /* 0x31 */
1449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMP_LONG.S */
1450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Compare two 64-bit values.  Puts 0, 1, or -1 into the destination
1452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * register based on the results of the comparison.
1453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * We load the full values with LDM, but in practice many values could
1455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * be resolved by only looking at the high word.  This could be made
1456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * faster or slower by splitting the LDM into a pair of LDRs.
1457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If we just wanted to set condition flags, we could do this:
1459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  subs    ip, r0, r2
1460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  sbcs    ip, r1, r3
1461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  subeqs  ip, r0, r2
1462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Leaving { <0, 0, >0 } in ip.  However, we have to set it to a specific
1463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * integer value, which we can do with 2 conditional mov/mvn instructions
1464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * (set 1, set -1; if they're equal we already have 0 in ip), giving
1465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * us a constant 5-cycle path plus a branch at the end to the
1466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * instruction epilogue code.  The multi-compare approach below needs
1467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 2 or 3 cycles + branch if the high word doesn't match, 6 + branch
1468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * in the worst case (the 64-bit values are equal).
1469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* cmp-long vAA, vBB, vCC */
1471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
1472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
1473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
1474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
1475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r2, rFP, r2, lsl #2         @ r2<- &fp[BB]
1476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[CC]
1477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r2, {r0-r1}                 @ r0/r1<- vBB/vBB+1
1478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r2-r3}                 @ r2/r3<- vCC/vCC+1
1479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, r3                      @ compare (vBB+1, vCC+1)
1480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    blt     .LOP_CMP_LONG_less            @ signed compare on high part
1481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bgt     .LOP_CMP_LONG_greater
1482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    subs    r1, r0, r2                  @ r1<- r0 - r2
1483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bhi     .LOP_CMP_LONG_greater         @ unsigned compare on low part
1484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_CMP_LONG_less
1485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       .LOP_CMP_LONG_finish          @ equal; r1 already holds 0
1486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_EQ: /* 0x32 */
1490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_EQ.S */
1491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/bincmp.S */
1492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic two-operand compare-and-branch operation.  Provide a "revcmp"
1494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le
1498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vA, vB, +CCCC */
1500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #8           @ r0<- A+
1501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
1502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r0, r0, #15
1503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r3, r1)                    @ r3<- vB
1504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r0)                    @ r2<- vA
1505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, #4                      @ r0<- BYTE branch dist for not-taken
1506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r2, r3                      @ compare (vA, vB)
1507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne  1f                      @ branch to 1 if comparison failed
1508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r9, 1)                      @ r9<- branch offset, in code units
1509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r9, r9, asl #1              @ convert to bytes, check sign
1510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bmi     common_backwardBranch       @ yes, do periodic checks
1511ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1:
1512ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
1513ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
1514ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1515ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    b        common_testUpdateProfile
1516ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
1517ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1520ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
1521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_NE: /* 0x33 */
1526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_NE.S */
1527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/bincmp.S */
1528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic two-operand compare-and-branch operation.  Provide a "revcmp"
1530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le
1534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vA, vB, +CCCC */
1536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #8           @ r0<- A+
1537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
1538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r0, r0, #15
1539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r3, r1)                    @ r3<- vB
1540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r0)                    @ r2<- vA
1541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, #4                      @ r0<- BYTE branch dist for not-taken
1542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r2, r3                      @ compare (vA, vB)
1543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq  1f                      @ branch to 1 if comparison failed
1544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r9, 1)                      @ r9<- branch offset, in code units
1545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r9, r9, asl #1              @ convert to bytes, check sign
1546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bmi     common_backwardBranch       @ yes, do periodic checks
1547ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1:
1548ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
1549ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
1550ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1551ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    b        common_testUpdateProfile
1552ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
1553ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1556ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
1557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LT: /* 0x34 */
1562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_LT.S */
1563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/bincmp.S */
1564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic two-operand compare-and-branch operation.  Provide a "revcmp"
1566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le
1570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vA, vB, +CCCC */
1572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #8           @ r0<- A+
1573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
1574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r0, r0, #15
1575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r3, r1)                    @ r3<- vB
1576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r0)                    @ r2<- vA
1577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, #4                      @ r0<- BYTE branch dist for not-taken
1578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r2, r3                      @ compare (vA, vB)
1579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bge  1f                      @ branch to 1 if comparison failed
1580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r9, 1)                      @ r9<- branch offset, in code units
1581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r9, r9, asl #1              @ convert to bytes, check sign
1582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bmi     common_backwardBranch       @ yes, do periodic checks
1583ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1:
1584ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
1585ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
1586ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1587ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    b        common_testUpdateProfile
1588ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
1589ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1592ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
1593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GE: /* 0x35 */
1598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_GE.S */
1599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/bincmp.S */
1600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic two-operand compare-and-branch operation.  Provide a "revcmp"
1602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le
1606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vA, vB, +CCCC */
1608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #8           @ r0<- A+
1609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
1610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r0, r0, #15
1611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r3, r1)                    @ r3<- vB
1612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r0)                    @ r2<- vA
1613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, #4                      @ r0<- BYTE branch dist for not-taken
1614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r2, r3                      @ compare (vA, vB)
1615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    blt  1f                      @ branch to 1 if comparison failed
1616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r9, 1)                      @ r9<- branch offset, in code units
1617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r9, r9, asl #1              @ convert to bytes, check sign
1618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bmi     common_backwardBranch       @ yes, do periodic checks
1619ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1:
1620ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
1621ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
1622ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1623ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    b        common_testUpdateProfile
1624ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
1625ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1628ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
1629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GT: /* 0x36 */
1634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_GT.S */
1635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/bincmp.S */
1636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic two-operand compare-and-branch operation.  Provide a "revcmp"
1638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le
1642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vA, vB, +CCCC */
1644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #8           @ r0<- A+
1645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
1646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r0, r0, #15
1647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r3, r1)                    @ r3<- vB
1648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r0)                    @ r2<- vA
1649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, #4                      @ r0<- BYTE branch dist for not-taken
1650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r2, r3                      @ compare (vA, vB)
1651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ble  1f                      @ branch to 1 if comparison failed
1652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r9, 1)                      @ r9<- branch offset, in code units
1653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r9, r9, asl #1              @ convert to bytes, check sign
1654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bmi     common_backwardBranch       @ yes, do periodic checks
1655ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1:
1656ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
1657ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
1658ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1659ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    b        common_testUpdateProfile
1660ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
1661ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1664ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
1665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LE: /* 0x37 */
1670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_LE.S */
1671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/bincmp.S */
1672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic two-operand compare-and-branch operation.  Provide a "revcmp"
1674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le
1678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vA, vB, +CCCC */
1680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #8           @ r0<- A+
1681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
1682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r0, r0, #15
1683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r3, r1)                    @ r3<- vB
1684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r0)                    @ r2<- vA
1685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, #4                      @ r0<- BYTE branch dist for not-taken
1686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r2, r3                      @ compare (vA, vB)
1687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bgt  1f                      @ branch to 1 if comparison failed
1688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r9, 1)                      @ r9<- branch offset, in code units
1689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r9, r9, asl #1              @ convert to bytes, check sign
1690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bmi     common_backwardBranch       @ yes, do periodic checks
1691ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1:
1692ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
1693ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
1694ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1695ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    b        common_testUpdateProfile
1696ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
1697ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1700ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
1701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_EQZ: /* 0x38 */
1706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_EQZ.S */
1707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/zcmp.S */
1708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic one-operand compare-and-branch operation.  Provide a "revcmp"
1710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez
1714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vAA, +BBBB */
1716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #8           @ r0<- AA
1717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r0)                    @ r2<- vAA
1718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, #4                      @ r0<- BYTE branch dist for not-taken
1719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r2, #0                      @ compare (vA, 0)
1720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne  1f                      @ branch to 1 if comparison failed
1721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r9, 1)                      @ r9<- branch offset, in code units
1722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r9, r9, asl #1              @ convert to bytes, check sign
1723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bmi     common_backwardBranch       @ backward branch, do periodic checks
1724ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1:
1725ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
1726ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
1727ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1728ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp     r0,#0
1729ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bne     common_updateProfile
1730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1732ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
1733ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1734ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1735ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GOTO_OPCODE(ip)                     @ jump to next instruction
1736ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
1737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_NEZ: /* 0x39 */
1742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_NEZ.S */
1743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/zcmp.S */
1744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic one-operand compare-and-branch operation.  Provide a "revcmp"
1746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez
1750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vAA, +BBBB */
1752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #8           @ r0<- AA
1753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r0)                    @ r2<- vAA
1754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, #4                      @ r0<- BYTE branch dist for not-taken
1755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r2, #0                      @ compare (vA, 0)
1756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq  1f                      @ branch to 1 if comparison failed
1757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r9, 1)                      @ r9<- branch offset, in code units
1758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r9, r9, asl #1              @ convert to bytes, check sign
1759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bmi     common_backwardBranch       @ backward branch, do periodic checks
1760ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1:
1761ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
1762ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
1763ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1764ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp     r0,#0
1765ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bne     common_updateProfile
1766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1768ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
1769ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1770ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1771ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GOTO_OPCODE(ip)                     @ jump to next instruction
1772ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
1773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LTZ: /* 0x3a */
1778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_LTZ.S */
1779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/zcmp.S */
1780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic one-operand compare-and-branch operation.  Provide a "revcmp"
1782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez
1786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vAA, +BBBB */
1788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #8           @ r0<- AA
1789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r0)                    @ r2<- vAA
1790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, #4                      @ r0<- BYTE branch dist for not-taken
1791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r2, #0                      @ compare (vA, 0)
1792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bge  1f                      @ branch to 1 if comparison failed
1793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r9, 1)                      @ r9<- branch offset, in code units
1794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r9, r9, asl #1              @ convert to bytes, check sign
1795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bmi     common_backwardBranch       @ backward branch, do periodic checks
1796ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1:
1797ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
1798ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
1799ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1800ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp     r0,#0
1801ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bne     common_updateProfile
1802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1804ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
1805ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1806ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1807ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GOTO_OPCODE(ip)                     @ jump to next instruction
1808ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
1809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GEZ: /* 0x3b */
1814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_GEZ.S */
1815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/zcmp.S */
1816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic one-operand compare-and-branch operation.  Provide a "revcmp"
1818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez
1822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vAA, +BBBB */
1824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #8           @ r0<- AA
1825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r0)                    @ r2<- vAA
1826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, #4                      @ r0<- BYTE branch dist for not-taken
1827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r2, #0                      @ compare (vA, 0)
1828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    blt  1f                      @ branch to 1 if comparison failed
1829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r9, 1)                      @ r9<- branch offset, in code units
1830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r9, r9, asl #1              @ convert to bytes, check sign
1831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bmi     common_backwardBranch       @ backward branch, do periodic checks
1832ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1:
1833ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
1834ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
1835ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1836ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp     r0,#0
1837ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bne     common_updateProfile
1838ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1839ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GOTO_OPCODE(ip)                     @ jump to next instruction
1840ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
1841ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1844ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
1845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GTZ: /* 0x3c */
1850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_GTZ.S */
1851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/zcmp.S */
1852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic one-operand compare-and-branch operation.  Provide a "revcmp"
1854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez
1858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vAA, +BBBB */
1860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #8           @ r0<- AA
1861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r0)                    @ r2<- vAA
1862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, #4                      @ r0<- BYTE branch dist for not-taken
1863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r2, #0                      @ compare (vA, 0)
1864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ble  1f                      @ branch to 1 if comparison failed
1865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r9, 1)                      @ r9<- branch offset, in code units
1866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r9, r9, asl #1              @ convert to bytes, check sign
1867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bmi     common_backwardBranch       @ backward branch, do periodic checks
1868ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1:
1869ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
1870ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
1871ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1872ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp     r0,#0
1873ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bne     common_updateProfile
1874ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1875ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GOTO_OPCODE(ip)                     @ jump to next instruction
1876ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
1877ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1880ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
1881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LEZ: /* 0x3d */
1886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_LEZ.S */
1887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/zcmp.S */
1888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic one-operand compare-and-branch operation.  Provide a "revcmp"
1890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fragment that specifies the *reverse* comparison to perform, e.g.
1891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for "if-le" you would use "gt".
1892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez
1894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* if-cmp vAA, +BBBB */
1896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #8           @ r0<- AA
1897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r0)                    @ r2<- vAA
1898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, #4                      @ r0<- BYTE branch dist for not-taken
1899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r2, #0                      @ compare (vA, 0)
1900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bgt  1f                      @ branch to 1 if comparison failed
1901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r9, 1)                      @ r9<- branch offset, in code units
1902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r9, r9, asl #1              @ convert to bytes, check sign
1903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bmi     common_backwardBranch       @ backward branch, do periodic checks
1904ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1:
1905ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
1906ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
1907ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1908ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp     r0,#0
1909ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bne     common_updateProfile
1910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1912ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
1913ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
1914ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1915ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GOTO_OPCODE(ip)                     @ jump to next instruction
1916ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
1917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_3E: /* 0x3e */
1922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_3E.S */
1923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */
1924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      common_abort
1925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_3F: /* 0x3f */
1930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_3F.S */
1931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */
1932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      common_abort
1933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_40: /* 0x40 */
1938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_40.S */
1939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */
1940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      common_abort
1941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_41: /* 0x41 */
1946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_41.S */
1947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */
1948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      common_abort
1949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_42: /* 0x42 */
1954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_42.S */
1955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */
1956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      common_abort
1957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_43: /* 0x43 */
1962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_43.S */
1963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */
1964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      common_abort
1965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET: /* 0x44 */
1970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET.S */
1971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array get, 32 bits or less.  vAA <- vBB[vCC].
1973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17
1975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * instructions.  We use a pair of FETCH_Bs instead.
1976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short
1978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
1980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r2, 1, 0)                   @ r2<- BB
1981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
1982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r3, 1, 1)                   @ r3<- CC
1983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB (array object)
1984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC (requested index)
1985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ null array object?
1986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ yes, bail
1987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r0, #offArrayObject_length]    @ r3<- arrayObj->length
1988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, r0, r1, lsl #2     @ r0<- arrayObj + index*width
1989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, r3                      @ compare unsigned index, length
1990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bcs     common_errArrayIndex        @ index >= length, bail
1991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr   r2, [r0, #offArrayObject_contents]  @ r2<- vBB[vCC]
1993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r2, r9)                    @ vAA<- r2
1995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
1996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
1998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
1999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_WIDE: /* 0x45 */
2000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET_WIDE.S */
2001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array get, 64 bits.  vAA <- vBB[vCC].
2003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Arrays of long/double are 64-bit aligned, so it's okay to use LDRD.
2005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* aget-wide vAA, vBB, vCC */
2007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
2008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
2009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
2010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
2011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB (array object)
2012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC (requested index)
2013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ null array object?
2014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ yes, bail
2015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r0, #offArrayObject_length]    @ r3<- arrayObj->length
2016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, r0, r1, lsl #3          @ r0<- arrayObj + index*width
2017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, r3                      @ compare unsigned index, length
2018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bcc     .LOP_AGET_WIDE_finish          @ okay, continue below
2019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_errArrayIndex        @ index >= length, bail
2020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ May want to swap the order of these two branches depending on how the
2021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ branch prediction (if any) handles conditional forward branches vs.
2022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ unconditional forward branches.
2023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_OBJECT: /* 0x46 */
2027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET_OBJECT.S */
2028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET.S */
2029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array get, 32 bits or less.  vAA <- vBB[vCC].
2031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17
2033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * instructions.  We use a pair of FETCH_Bs instead.
2034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short
2036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r2, 1, 0)                   @ r2<- BB
2039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
2040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r3, 1, 1)                   @ r3<- CC
2041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB (array object)
2042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC (requested index)
2043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ null array object?
2044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ yes, bail
2045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r0, #offArrayObject_length]    @ r3<- arrayObj->length
2046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, r0, r1, lsl #2     @ r0<- arrayObj + index*width
2047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, r3                      @ compare unsigned index, length
2048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bcs     common_errArrayIndex        @ index >= length, bail
2049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
2050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr   r2, [r0, #offArrayObject_contents]  @ r2<- vBB[vCC]
2051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
2052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r2, r9)                    @ vAA<- r2
2053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
2054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_BOOLEAN: /* 0x47 */
2059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET_BOOLEAN.S */
2060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET.S */
2061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array get, 32 bits or less.  vAA <- vBB[vCC].
2063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17
2065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * instructions.  We use a pair of FETCH_Bs instead.
2066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short
2068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r2, 1, 0)                   @ r2<- BB
2071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
2072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r3, 1, 1)                   @ r3<- CC
2073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB (array object)
2074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC (requested index)
2075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ null array object?
2076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ yes, bail
2077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r0, #offArrayObject_length]    @ r3<- arrayObj->length
2078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, r0, r1, lsl #0     @ r0<- arrayObj + index*width
2079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, r3                      @ compare unsigned index, length
2080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bcs     common_errArrayIndex        @ index >= length, bail
2081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
2082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldrb   r2, [r0, #offArrayObject_contents]  @ r2<- vBB[vCC]
2083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
2084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r2, r9)                    @ vAA<- r2
2085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
2086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_BYTE: /* 0x48 */
2091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET_BYTE.S */
2092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET.S */
2093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array get, 32 bits or less.  vAA <- vBB[vCC].
2095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17
2097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * instructions.  We use a pair of FETCH_Bs instead.
2098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short
2100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r2, 1, 0)                   @ r2<- BB
2103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
2104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r3, 1, 1)                   @ r3<- CC
2105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB (array object)
2106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC (requested index)
2107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ null array object?
2108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ yes, bail
2109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r0, #offArrayObject_length]    @ r3<- arrayObj->length
2110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, r0, r1, lsl #0     @ r0<- arrayObj + index*width
2111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, r3                      @ compare unsigned index, length
2112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bcs     common_errArrayIndex        @ index >= length, bail
2113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
2114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldrsb   r2, [r0, #offArrayObject_contents]  @ r2<- vBB[vCC]
2115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
2116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r2, r9)                    @ vAA<- r2
2117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
2118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_CHAR: /* 0x49 */
2123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET_CHAR.S */
2124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET.S */
2125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array get, 32 bits or less.  vAA <- vBB[vCC].
2127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17
2129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * instructions.  We use a pair of FETCH_Bs instead.
2130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short
2132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r2, 1, 0)                   @ r2<- BB
2135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
2136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r3, 1, 1)                   @ r3<- CC
2137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB (array object)
2138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC (requested index)
2139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ null array object?
2140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ yes, bail
2141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r0, #offArrayObject_length]    @ r3<- arrayObj->length
2142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, r0, r1, lsl #1     @ r0<- arrayObj + index*width
2143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, r3                      @ compare unsigned index, length
2144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bcs     common_errArrayIndex        @ index >= length, bail
2145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
2146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldrh   r2, [r0, #offArrayObject_contents]  @ r2<- vBB[vCC]
2147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
2148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r2, r9)                    @ vAA<- r2
2149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
2150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_SHORT: /* 0x4a */
2155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET_SHORT.S */
2156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET.S */
2157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array get, 32 bits or less.  vAA <- vBB[vCC].
2159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17
2161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * instructions.  We use a pair of FETCH_Bs instead.
2162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short
2164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r2, 1, 0)                   @ r2<- BB
2167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
2168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r3, 1, 1)                   @ r3<- CC
2169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB (array object)
2170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC (requested index)
2171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ null array object?
2172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ yes, bail
2173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r0, #offArrayObject_length]    @ r3<- arrayObj->length
2174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, r0, r1, lsl #1     @ r0<- arrayObj + index*width
2175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, r3                      @ compare unsigned index, length
2176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bcs     common_errArrayIndex        @ index >= length, bail
2177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
2178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldrsh   r2, [r0, #offArrayObject_contents]  @ r2<- vBB[vCC]
2179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
2180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r2, r9)                    @ vAA<- r2
2181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
2182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
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: /* 0x4b */
2187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT.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     * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17
2192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * instructions.  We use a pair of FETCH_Bs instead.
2193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aput, aput-boolean, aput-byte, aput-char, aput-short
2195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r2, 1, 0)                   @ r2<- BB
2198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
2199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r3, 1, 1)                   @ r3<- CC
2200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB (array object)
2201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC (requested index)
2202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ null array object?
2203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ yes, bail
2204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r0, #offArrayObject_length]    @ r3<- arrayObj->length
2205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, r0, r1, lsl #2     @ r0<- arrayObj + index*width
2206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, r3                      @ compare unsigned index, length
2207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bcs     common_errArrayIndex        @ index >= length, bail
2208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
2209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r9)                    @ r2<- vAA
2210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
2211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    str  r2, [r0, #offArrayObject_contents]  @ vBB[vCC]<- r2
2212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
2213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_WIDE: /* 0x4c */
2217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT_WIDE.S */
2218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array put, 64 bits.  vBB[vCC] <- vAA.
2220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Arrays of long/double are 64-bit aligned, so it's okay to use STRD.
2222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* aput-wide vAA, vBB, vCC */
2224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
2225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
2226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
2227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
2228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB (array object)
2229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC (requested index)
2230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ null array object?
2231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ yes, bail
2232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r0, #offArrayObject_length]    @ r3<- arrayObj->length
2233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, r0, r1, lsl #3          @ r0<- arrayObj + index*width
2234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, r3                      @ compare unsigned index, length
2235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
2236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bcc     .LOP_APUT_WIDE_finish          @ okay, continue below
2237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_errArrayIndex        @ index >= length, bail
2238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ May want to swap the order of these two branches depending on how the
2239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ branch prediction (if any) handles conditional forward branches vs.
2240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ unconditional forward branches.
2241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_OBJECT: /* 0x4d */
2245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT_OBJECT.S */
2246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Store an object into an array.  vBB[vCC] <- vAA.
2248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
2251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
2252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
2253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
2254d82097f6b409c5cd48568e54eb701604c3cceb18buzbee    GET_VREG(rINST, r2)                 @ rINST<- vBB (array object)
2255e877cc41c1a5d4f577c5f6fc6bacbe388dfd1d59Elliott Hughes    GET_VREG(r1, r3)                    @ r1<- vCC (requested index)
2256d82097f6b409c5cd48568e54eb701604c3cceb18buzbee    cmp     rINST, #0                   @ null array object?
2257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r9, r9)                    @ r9<- vAA
2258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ yes, bail
2259d82097f6b409c5cd48568e54eb701604c3cceb18buzbee    ldr     r3, [rINST, #offArrayObject_length]   @ r3<- arrayObj->length
2260e877cc41c1a5d4f577c5f6fc6bacbe388dfd1d59Elliott Hughes    add     r10, rINST, r1, lsl #2      @ r10<- arrayObj + index*width
2261e877cc41c1a5d4f577c5f6fc6bacbe388dfd1d59Elliott Hughes    cmp     r1, r3                      @ compare unsigned index, length
2262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bcc     .LOP_APUT_OBJECT_finish          @ we're okay, continue on
2263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_errArrayIndex        @ index >= length, bail
2264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_BOOLEAN: /* 0x4e */
2269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT_BOOLEAN.S */
2270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT.S */
2271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array put, 32 bits or less.  vBB[vCC] <- vAA.
2273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17
2275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * instructions.  We use a pair of FETCH_Bs instead.
2276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aput, aput-boolean, aput-byte, aput-char, aput-short
2278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r2, 1, 0)                   @ r2<- BB
2281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
2282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r3, 1, 1)                   @ r3<- CC
2283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB (array object)
2284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC (requested index)
2285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ null array object?
2286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ yes, bail
2287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r0, #offArrayObject_length]    @ r3<- arrayObj->length
2288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, r0, r1, lsl #0     @ r0<- arrayObj + index*width
2289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, r3                      @ compare unsigned index, length
2290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bcs     common_errArrayIndex        @ index >= length, bail
2291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
2292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r9)                    @ r2<- vAA
2293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
2294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    strb  r2, [r0, #offArrayObject_contents]  @ vBB[vCC]<- r2
2295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
2296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_BYTE: /* 0x4f */
2301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT_BYTE.S */
2302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT.S */
2303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array put, 32 bits or less.  vBB[vCC] <- vAA.
2305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17
2307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * instructions.  We use a pair of FETCH_Bs instead.
2308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aput, aput-boolean, aput-byte, aput-char, aput-short
2310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r2, 1, 0)                   @ r2<- BB
2313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
2314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r3, 1, 1)                   @ r3<- CC
2315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB (array object)
2316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC (requested index)
2317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ null array object?
2318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ yes, bail
2319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r0, #offArrayObject_length]    @ r3<- arrayObj->length
2320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, r0, r1, lsl #0     @ r0<- arrayObj + index*width
2321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, r3                      @ compare unsigned index, length
2322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bcs     common_errArrayIndex        @ index >= length, bail
2323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
2324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r9)                    @ r2<- vAA
2325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
2326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    strb  r2, [r0, #offArrayObject_contents]  @ vBB[vCC]<- r2
2327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
2328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_CHAR: /* 0x50 */
2333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT_CHAR.S */
2334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT.S */
2335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array put, 32 bits or less.  vBB[vCC] <- vAA.
2337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17
2339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * instructions.  We use a pair of FETCH_Bs instead.
2340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aput, aput-boolean, aput-byte, aput-char, aput-short
2342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r2, 1, 0)                   @ r2<- BB
2345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
2346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r3, 1, 1)                   @ r3<- CC
2347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB (array object)
2348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC (requested index)
2349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ null array object?
2350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ yes, bail
2351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r0, #offArrayObject_length]    @ r3<- arrayObj->length
2352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, r0, r1, lsl #1     @ r0<- arrayObj + index*width
2353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, r3                      @ compare unsigned index, length
2354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bcs     common_errArrayIndex        @ index >= length, bail
2355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
2356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r9)                    @ r2<- vAA
2357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
2358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    strh  r2, [r0, #offArrayObject_contents]  @ vBB[vCC]<- r2
2359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
2360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_SHORT: /* 0x51 */
2365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT_SHORT.S */
2366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT.S */
2367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array put, 32 bits or less.  vBB[vCC] <- vAA.
2369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17
2371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * instructions.  We use a pair of FETCH_Bs instead.
2372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aput, aput-boolean, aput-byte, aput-char, aput-short
2374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
2376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r2, 1, 0)                   @ r2<- BB
2377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
2378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_B(r3, 1, 1)                   @ r3<- CC
2379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB (array object)
2380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC (requested index)
2381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ null array object?
2382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ yes, bail
2383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r0, #offArrayObject_length]    @ r3<- arrayObj->length
2384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, r0, r1, lsl #1     @ r0<- arrayObj + index*width
2385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, r3                      @ compare unsigned index, length
2386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bcs     common_errArrayIndex        @ index >= length, bail
2387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
2388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r9)                    @ r2<- vAA
2389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
2390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    strh  r2, [r0, #offArrayObject_contents]  @ vBB[vCC]<- r2
2391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
2392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET: /* 0x52 */
2397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET.S */
2398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field get.
2400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
2402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
2404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #12          @ r0<- B
24059f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
2406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref CCCC
2407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
2408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
2409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
2410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IGET_finish          @ no, already resolved
24129f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
2413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ resolve() could throw
2414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
2415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
2416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0
2417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IGET_finish
2418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
2419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_WIDE: /* 0x53 */
2423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_WIDE.S */
2424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Wide 32-bit instance field get.
2426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* iget-wide vA, vB, field@CCCC */
2428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #12          @ r0<- B
24299f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
2430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref CCCC
2431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pResFields
2432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
2433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
2434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IGET_WIDE_finish          @ no, already resolved
24369f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method] @ r2<- current method
2437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ resolve() could throw
2438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
2439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
2440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0
2441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IGET_WIDE_finish
2442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
2443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_OBJECT: /* 0x54 */
2447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_OBJECT.S */
2448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET.S */
2449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field get.
2451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
2453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
2455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #12          @ r0<- B
24569f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
2457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref CCCC
2458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
2459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
2460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
2461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IGET_OBJECT_finish          @ no, already resolved
24639f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
2464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ resolve() could throw
2465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
2466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
2467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0
2468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IGET_OBJECT_finish
2469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
2470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_BOOLEAN: /* 0x55 */
2475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_BOOLEAN.S */
2476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IGET.S" { "load":"ldrb", "sqnum":"1" }
2477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET.S */
2478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field get.
2480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
2482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
2484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #12          @ r0<- B
24859f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
2486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref CCCC
2487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
2488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
2489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
2490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IGET_BOOLEAN_finish          @ no, already resolved
24929f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
2493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ resolve() could throw
2494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
2495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
2496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0
2497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IGET_BOOLEAN_finish
2498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
2499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_BYTE: /* 0x56 */
2504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_BYTE.S */
2505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IGET.S" { "load":"ldrsb", "sqnum":"2" }
2506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET.S */
2507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field get.
2509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
2511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
2513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #12          @ r0<- B
25149f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
2515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref CCCC
2516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
2517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
2518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
2519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IGET_BYTE_finish          @ no, already resolved
25219f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
2522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ resolve() could throw
2523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
2524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
2525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0
2526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IGET_BYTE_finish
2527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
2528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_CHAR: /* 0x57 */
2533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_CHAR.S */
2534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IGET.S" { "load":"ldrh", "sqnum":"3" }
2535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET.S */
2536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field get.
2538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
2540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
2542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #12          @ r0<- B
25439f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
2544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref CCCC
2545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
2546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
2547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
2548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IGET_CHAR_finish          @ no, already resolved
25509f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
2551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ resolve() could throw
2552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
2553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
2554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0
2555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IGET_CHAR_finish
2556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
2557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_SHORT: /* 0x58 */
2562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_SHORT.S */
2563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IGET.S" { "load":"ldrsh", "sqnum":"4" }
2564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET.S */
2565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field get.
2567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
2569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
2571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #12          @ r0<- B
25729f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
2573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref CCCC
2574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
2575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
2576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
2577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IGET_SHORT_finish          @ no, already resolved
25799f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
2580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ resolve() could throw
2581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
2582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
2583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0
2584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IGET_SHORT_finish
2585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
2586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT: /* 0x59 */
2591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT.S */
2592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field put.
2594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2595919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee     * for: iput, iput-boolean, iput-byte, iput-char, iput-short
2596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
2598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #12          @ r0<- B
25999f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
2600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref CCCC
2601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
2602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
2603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
2604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IPUT_finish          @ no, already resolved
26069f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
2607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ resolve() could throw
2608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
2609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
2610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ success?
2611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IPUT_finish          @ yes, finish up
2612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
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_WIDE: /* 0x5a */
2617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_WIDE.S */
2618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* iput-wide vA, vB, field@CCCC */
2619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #12          @ r0<- B
26209f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
2621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref CCCC
2622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pResFields
2623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
2624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
2625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IPUT_WIDE_finish          @ no, already resolved
26279f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method] @ r2<- current method
2628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ resolve() could throw
2629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
2630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
2631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ success?
2632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IPUT_WIDE_finish          @ yes, finish up
2633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
2634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_OBJECT: /* 0x5b */
2638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_OBJECT.S */
2639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2640919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee     * 32-bit instance field put.
2641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2642919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee     * for: iput-object, iput-object-volatile
2643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
2645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #12          @ r0<- B
26469f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
2647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref CCCC
2648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
2649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
2650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
2651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IPUT_OBJECT_finish          @ no, already resolved
26539f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
2654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ resolve() could throw
2655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
2656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
2657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ success?
2658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IPUT_OBJECT_finish          @ yes, finish up
2659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
2660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_BOOLEAN: /* 0x5c */
2664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_BOOLEAN.S */
2665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IPUT.S" { "store":"strb", "sqnum":"1" }
2666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT.S */
2667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field put.
2669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2670919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee     * for: iput, iput-boolean, iput-byte, iput-char, iput-short
2671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
2673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #12          @ r0<- B
26749f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
2675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref CCCC
2676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
2677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
2678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
2679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IPUT_BOOLEAN_finish          @ no, already resolved
26819f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
2682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ resolve() could throw
2683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
2684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
2685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ success?
2686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IPUT_BOOLEAN_finish          @ yes, finish up
2687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
2688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_BYTE: /* 0x5d */
2693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_BYTE.S */
2694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IPUT.S" { "store":"strb", "sqnum":"2" }
2695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT.S */
2696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field put.
2698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2699919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee     * for: iput, iput-boolean, iput-byte, iput-char, iput-short
2700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
2702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #12          @ r0<- B
27039f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
2704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref CCCC
2705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
2706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
2707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
2708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IPUT_BYTE_finish          @ no, already resolved
27109f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
2711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ resolve() could throw
2712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
2713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
2714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ success?
2715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IPUT_BYTE_finish          @ yes, finish up
2716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
2717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_CHAR: /* 0x5e */
2722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_CHAR.S */
2723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IPUT.S" { "store":"strh", "sqnum":"3" }
2724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT.S */
2725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field put.
2727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2728919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee     * for: iput, iput-boolean, iput-byte, iput-char, iput-short
2729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
2731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #12          @ r0<- B
27329f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
2733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref CCCC
2734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
2735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
2736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
2737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IPUT_CHAR_finish          @ no, already resolved
27399f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
2740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ resolve() could throw
2741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
2742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
2743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ success?
2744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IPUT_CHAR_finish          @ yes, finish up
2745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
2746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_SHORT: /* 0x5f */
2751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_SHORT.S */
2752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IPUT.S" { "store":"strh", "sqnum":"4" }
2753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT.S */
2754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit instance field put.
2756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2757919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee     * for: iput, iput-boolean, iput-byte, iput-char, iput-short
2758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, field@CCCC */
2760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #12          @ r0<- B
27619f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
2762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref CCCC
2763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
2764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
2765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
2766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IPUT_SHORT_finish          @ no, already resolved
27689f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
2769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ resolve() could throw
2770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
2771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
2772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ success?
2773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_IPUT_SHORT_finish          @ yes, finish up
2774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
2775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET: /* 0x60 */
2780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET.S */
2781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SGET handler.
2783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
2785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
27879f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
2788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref BBBB
2789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
2790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
2791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_SGET_resolve         @ yes, do resolve
2793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_finish: @ field ptr in r0
2794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r1, [r0, #offStaticField_value] @ r1<- field value
27950890e5bf0b2a502ca1030e9773fabc16ef1b5981Andy McFadden    @ no-op                             @ acquiring load
2796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
2797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
2798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r1, r2)                    @ fp[AA]<- r1
2799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
2800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
2801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_WIDE: /* 0x61 */
2805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET_WIDE.S */
2806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 64-bit SGET handler.
2808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* sget-wide vAA, field@BBBB */
28109f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
2811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref BBBB
2812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
2813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
2814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_SGET_WIDE_resolve         @ yes, do resolve
2816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_WIDE_finish:
2817861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    mov     r9, rINST, lsr #8           @ r9<- AA
2818861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    .if 0
2819861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    add     r0, r0, #offStaticField_value @ r0<- pointer to data
28206e10b9aaa72425a4825a25f0043533d0c6fdbba4Andy McFadden    bl      dvmQuasiAtomicRead64        @ r0/r1<- contents of field
2821861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    .else
2822861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    ldrd    r0, [r0, #offStaticField_value] @ r0/r1<- field value (aligned)
2823861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    .endif
2824861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
2825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
2826861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    stmia   r9, {r0-r1}                 @ vAA/vAA+1<- r0/r1
2827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
2828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
2829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_OBJECT: /* 0x62 */
2833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET_OBJECT.S */
2834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET.S */
2835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SGET handler.
2837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
2839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
28419f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
2842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref BBBB
2843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
2844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
2845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_SGET_OBJECT_resolve         @ yes, do resolve
2847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_OBJECT_finish: @ field ptr in r0
2848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r1, [r0, #offStaticField_value] @ r1<- field value
28490890e5bf0b2a502ca1030e9773fabc16ef1b5981Andy McFadden    @ no-op                             @ acquiring load
2850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
2851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
2852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r1, r2)                    @ fp[AA]<- r1
2853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
2854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
2855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_BOOLEAN: /* 0x63 */
2860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET_BOOLEAN.S */
2861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET.S */
2862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SGET handler.
2864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
2866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
28689f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
2869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref BBBB
2870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
2871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
2872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_SGET_BOOLEAN_resolve         @ yes, do resolve
2874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BOOLEAN_finish: @ field ptr in r0
2875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r1, [r0, #offStaticField_value] @ r1<- field value
28760890e5bf0b2a502ca1030e9773fabc16ef1b5981Andy McFadden    @ no-op                             @ acquiring load
2877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
2878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
2879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r1, r2)                    @ fp[AA]<- r1
2880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
2881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
2882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_BYTE: /* 0x64 */
2887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET_BYTE.S */
2888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET.S */
2889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SGET handler.
2891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
2893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
28959f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
2896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref BBBB
2897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
2898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
2899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_SGET_BYTE_resolve         @ yes, do resolve
2901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BYTE_finish: @ field ptr in r0
2902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r1, [r0, #offStaticField_value] @ r1<- field value
29030890e5bf0b2a502ca1030e9773fabc16ef1b5981Andy McFadden    @ no-op                             @ acquiring load
2904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
2905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
2906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r1, r2)                    @ fp[AA]<- r1
2907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
2908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
2909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_CHAR: /* 0x65 */
2914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET_CHAR.S */
2915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET.S */
2916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SGET handler.
2918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
2920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
29229f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
2923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref BBBB
2924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
2925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
2926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_SGET_CHAR_resolve         @ yes, do resolve
2928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_CHAR_finish: @ field ptr in r0
2929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r1, [r0, #offStaticField_value] @ r1<- field value
29300890e5bf0b2a502ca1030e9773fabc16ef1b5981Andy McFadden    @ no-op                             @ acquiring load
2931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
2932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
2933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r1, r2)                    @ fp[AA]<- r1
2934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
2935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
2936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_SHORT: /* 0x66 */
2941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET_SHORT.S */
2942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET.S */
2943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SGET handler.
2945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
2947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
29499f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
2950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref BBBB
2951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
2952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
2953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_SGET_SHORT_resolve         @ yes, do resolve
2955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_SHORT_finish: @ field ptr in r0
2956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r1, [r0, #offStaticField_value] @ r1<- field value
29570890e5bf0b2a502ca1030e9773fabc16ef1b5981Andy McFadden    @ no-op                             @ acquiring load
2958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
2959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
2960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r1, r2)                    @ fp[AA]<- r1
2961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
2962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
2963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT: /* 0x67 */
2968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT.S */
2969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SPUT handler.
2971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
2972919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee     * for: sput, sput-boolean, sput-byte, sput-char, sput-short
2973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
29759f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
2976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref BBBB
2977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
2978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
2979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
2980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_SPUT_resolve         @ yes, do resolve
2981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_finish:   @ field ptr in r0
2982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
2983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
2984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r2)                    @ r1<- fp[AA]
2985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
29860890e5bf0b2a502ca1030e9773fabc16ef1b5981Andy McFadden    @ no-op                             @ releasing store
2987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    str     r1, [r0, #offStaticField_value] @ field<- vAA
2988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
2989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
2991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
2992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_WIDE: /* 0x68 */
2993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT_WIDE.S */
2994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 64-bit SPUT handler.
2996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* sput-wide vAA, field@BBBB */
29989f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r0, [rSELF, #offThread_methodClassDex]  @ r0<- DvmDex
2999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref BBBB
3000861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    ldr     r0, [r0, #offDvmDex_pResFields] @ r0<- dvmDex->pResFields
3001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
3002861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    ldr     r2, [r0, r1, lsl #2]        @ r2<- resolved StaticField ptr
3003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
3004861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    cmp     r2, #0                      @ is resolved entry null?
3005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_SPUT_WIDE_resolve         @ yes, do resolve
3006861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden.LOP_SPUT_WIDE_finish: @ field ptr in r2, AA in r9
3007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
3008861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    ldmia   r9, {r0-r1}                 @ r0/r1<- vAA/vAA+1
3009861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    GET_INST_OPCODE(r10)                @ extract opcode from rINST
3010861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    .if 0
3011861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    add     r2, r2, #offStaticField_value @ r2<- pointer to data
30126e10b9aaa72425a4825a25f0043533d0c6fdbba4Andy McFadden    bl      dvmQuasiAtomicSwap64        @ stores r0/r1 into addr r2
3013861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    .else
3014861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    strd    r0, [r2, #offStaticField_value] @ field<- vAA/vAA+1
3015861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    .endif
3016861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    GOTO_OPCODE(r10)                    @ jump to next instruction
3017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_OBJECT: /* 0x69 */
3021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT_OBJECT.S */
3022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3023919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee     * 32-bit SPUT handler for objects
3024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3025919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee     * for: sput-object, sput-object-volatile
3026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
30289f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
3029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref BBBB
3030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
3031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
3032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
3033919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    bne     .LOP_SPUT_OBJECT_finish          @ no, continue
30349f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r9, [rSELF, #offThread_method]    @ r9<- current method
3035919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    EXPORT_PC()                         @ resolve() could throw, so export now
3036d82097f6b409c5cd48568e54eb701604c3cceb18buzbee    ldr     r0, [r9, #offMethod_clazz]  @ r0<- method->clazz
3037919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
3038919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    cmp     r0, #0                      @ success?
3039919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    bne     .LOP_SPUT_OBJECT_finish          @ yes, finish
3040919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    b       common_exceptionThrown      @ no, handle exception
3041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_BOOLEAN: /* 0x6a */
3046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT_BOOLEAN.S */
3047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT.S */
3048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SPUT handler.
3050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3051919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee     * for: sput, sput-boolean, sput-byte, sput-char, sput-short
3052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
30549f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
3055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref BBBB
3056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
3057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
3058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
3059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_SPUT_BOOLEAN_resolve         @ yes, do resolve
3060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BOOLEAN_finish:   @ field ptr in r0
3061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
3062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
3063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r2)                    @ r1<- fp[AA]
3064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
30650890e5bf0b2a502ca1030e9773fabc16ef1b5981Andy McFadden    @ no-op                             @ releasing store
3066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    str     r1, [r0, #offStaticField_value] @ field<- vAA
3067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
3068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_BYTE: /* 0x6b */
3073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT_BYTE.S */
3074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT.S */
3075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SPUT handler.
3077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3078919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee     * for: sput, sput-boolean, sput-byte, sput-char, sput-short
3079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
30819f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
3082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref BBBB
3083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
3084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
3085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
3086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_SPUT_BYTE_resolve         @ yes, do resolve
3087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BYTE_finish:   @ field ptr in r0
3088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
3089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
3090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r2)                    @ r1<- fp[AA]
3091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
30920890e5bf0b2a502ca1030e9773fabc16ef1b5981Andy McFadden    @ no-op                             @ releasing store
3093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    str     r1, [r0, #offStaticField_value] @ field<- vAA
3094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
3095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_CHAR: /* 0x6c */
3100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT_CHAR.S */
3101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT.S */
3102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SPUT handler.
3104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3105919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee     * for: sput, sput-boolean, sput-byte, sput-char, sput-short
3106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
31089f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
3109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref BBBB
3110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
3111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
3112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
3113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_SPUT_CHAR_resolve         @ yes, do resolve
3114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_CHAR_finish:   @ field ptr in r0
3115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
3116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
3117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r2)                    @ r1<- fp[AA]
3118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
31190890e5bf0b2a502ca1030e9773fabc16ef1b5981Andy McFadden    @ no-op                             @ releasing store
3120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    str     r1, [r0, #offStaticField_value] @ field<- vAA
3121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
3122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_SHORT: /* 0x6d */
3127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT_SHORT.S */
3128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT.S */
3129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * General 32-bit SPUT handler.
3131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3132919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee     * for: sput, sput-boolean, sput-byte, sput-char, sput-short
3133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, field@BBBB */
31359f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
3136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field ref BBBB
3137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
3138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
3139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is resolved entry null?
3140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_SPUT_SHORT_resolve         @ yes, do resolve
3141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_SHORT_finish:   @ field ptr in r0
3142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
3143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
3144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r2)                    @ r1<- fp[AA]
3145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
31460890e5bf0b2a502ca1030e9773fabc16ef1b5981Andy McFadden    @ no-op                             @ releasing store
3147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    str     r1, [r0, #offStaticField_value] @ field<- vAA
3148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
3149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL: /* 0x6e */
3154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_VIRTUAL.S */
3155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle a virtual method call.
3157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: invoke-virtual, invoke-virtual/range
3159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
3161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
31629f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- pDvmDex
3163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
3164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r3, #offDvmDex_pResMethods]    @ r3<- pDvmDex->pResMethods
3165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r10, 2)                       @ r10<- GFED or CCCC
3166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, r1, lsl #2]        @ r0<- resolved baseMethod
3167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if     (!0)
3168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r10, r10, #15               @ r10<- D (or stays CCCC)
3169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ already resolved?
3171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ must export for invoke
3172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_INVOKE_VIRTUAL_continue        @ yes, continue on
31739f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_method] @ r3<- self->method
3174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, #offMethod_clazz]  @ r0<- method->clazz
3175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, #METHOD_VIRTUAL         @ resolver method type
3176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveMethod            @ r0<- call(clazz, ref, flags)
3177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ got null?
3178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_INVOKE_VIRTUAL_continue        @ no, continue
3179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown      @ yes, handle exception
3180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER: /* 0x6f */
3184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_SUPER.S */
3185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle a "super" method call.
3187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: invoke-super, invoke-super/range
3189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
3191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
3192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r10, 2)                       @ r10<- GFED or CCCC
31939f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- pDvmDex
3194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if     (!0)
3195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r10, r10, #15               @ r10<- D (or stays CCCC)
3196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
3198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r3, #offDvmDex_pResMethods]    @ r3<- pDvmDex->pResMethods
3199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r10)                   @ r2<- "this" ptr
3200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, r1, lsl #2]        @ r0<- resolved baseMethod
3201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r2, #0                      @ null "this"?
32029f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r9, [rSELF, #offThread_method] @ r9<- current method
3203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ null "this", throw exception
3204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ already resolved?
3205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r9, [r9, #offMethod_clazz]  @ r9<- method->clazz
3206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ must export for invoke
3207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_INVOKE_SUPER_continue        @ resolved, continue on
3208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       .LOP_INVOKE_SUPER_resolve         @ do resolve now
3209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT: /* 0x70 */
3213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_DIRECT.S */
3214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle a direct method call.
3216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * (We could defer the "is 'this' pointer null" test to the common
3218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * method invocation code, and use a flag to indicate that static
3219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * calls don't count.  If we do this as part of copying the arguments
3220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * out we could avoiding loading the first arg twice.)
3221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: invoke-direct, invoke-direct/range
3223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
3225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
32269f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- pDvmDex
3227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
3228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r3, #offDvmDex_pResMethods]    @ r3<- pDvmDex->pResMethods
3229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r10, 2)                       @ r10<- GFED or CCCC
3230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, r1, lsl #2]        @ r0<- resolved methodToCall
3231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if     (!0)
3232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r10, r10, #15               @ r10<- D (or stays CCCC)
3233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ already resolved?
3235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ must export for invoke
3236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r10)                   @ r2<- "this" ptr
3237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_INVOKE_DIRECT_resolve         @ not resolved, do it now
3238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_finish:
3239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r2, #0                      @ null "this" ref?
3240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     common_invokeMethodNoRange   @ no, continue on
3241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_errNullObject        @ yes, throw exception
3242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_STATIC: /* 0x71 */
3246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_STATIC.S */
3247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle a static method call.
3249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: invoke-static, invoke-static/range
3251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
3253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
32549f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- pDvmDex
3255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
3256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r3, #offDvmDex_pResMethods]    @ r3<- pDvmDex->pResMethods
3257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, r1, lsl #2]        @ r0<- resolved methodToCall
3258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ already resolved?
3259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ must export for invoke
3260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     common_invokeMethodNoRange @ yes, continue on
32619f601a917c8878204482c37aec7005054b6776fabuzbee0:  ldr     r3, [rSELF, #offThread_method] @ r3<- self->method
3262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, #offMethod_clazz]  @ r0<- method->clazz
3263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, #METHOD_STATIC          @ resolver method type
3264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveMethod            @ r0<- call(clazz, ref, flags)
3265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ got null?
3266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     common_invokeMethodNoRange @ no, continue
3267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown      @ yes, handle exception
3268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_INTERFACE: /* 0x72 */
3272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_INTERFACE.S */
3273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle an interface method call.
3275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: invoke-interface, invoke-interface/range
3277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
3279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
3280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r2, 2)                        @ r2<- FEDC or CCCC
3281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
3282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if     (!0)
3283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r2, #15                 @ r2<- C (or stays CCCC)
3284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ must export for invoke
3286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- first arg ("this")
32879f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- methodClassDex
3288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ null obj?
32899f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]  @ r2<- method
3290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ yes, fail
3291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r0, #offObject_clazz]  @ r0<- thisPtr->clazz
3292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmFindInterfaceMethodInCache @ r0<- call(class, ref, method, dex)
3293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ failed?
3294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_exceptionThrown      @ yes, handle exception
3295de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    b       common_invokeMethodNoRange @ jump to common handler
3296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_73: /* 0x73 */
3300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_73.S */
3301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */
3302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      common_abort
3303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_RANGE: /* 0x74 */
3308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_VIRTUAL_RANGE.S */
3309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_VIRTUAL.S */
3310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle a virtual method call.
3312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: invoke-virtual, invoke-virtual/range
3314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
3316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
33179f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- pDvmDex
3318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
3319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r3, #offDvmDex_pResMethods]    @ r3<- pDvmDex->pResMethods
3320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r10, 2)                       @ r10<- GFED or CCCC
3321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, r1, lsl #2]        @ r0<- resolved baseMethod
3322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if     (!1)
3323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r10, r10, #15               @ r10<- D (or stays CCCC)
3324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ already resolved?
3326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ must export for invoke
3327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_INVOKE_VIRTUAL_RANGE_continue        @ yes, continue on
33289f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_method] @ r3<- self->method
3329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, #offMethod_clazz]  @ r0<- method->clazz
3330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, #METHOD_VIRTUAL         @ resolver method type
3331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveMethod            @ r0<- call(clazz, ref, flags)
3332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ got null?
3333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_INVOKE_VIRTUAL_RANGE_continue        @ no, continue
3334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown      @ yes, handle exception
3335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_RANGE: /* 0x75 */
3340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_SUPER_RANGE.S */
3341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_SUPER.S */
3342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle a "super" method call.
3344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: invoke-super, invoke-super/range
3346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
3348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
3349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r10, 2)                       @ r10<- GFED or CCCC
33509f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- pDvmDex
3351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if     (!1)
3352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r10, r10, #15               @ r10<- D (or stays CCCC)
3353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
3355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r3, #offDvmDex_pResMethods]    @ r3<- pDvmDex->pResMethods
3356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r10)                   @ r2<- "this" ptr
3357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, r1, lsl #2]        @ r0<- resolved baseMethod
3358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r2, #0                      @ null "this"?
33599f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r9, [rSELF, #offThread_method] @ r9<- current method
3360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ null "this", throw exception
3361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ already resolved?
3362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r9, [r9, #offMethod_clazz]  @ r9<- method->clazz
3363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ must export for invoke
3364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LOP_INVOKE_SUPER_RANGE_continue        @ resolved, continue on
3365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       .LOP_INVOKE_SUPER_RANGE_resolve         @ do resolve now
3366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT_RANGE: /* 0x76 */
3371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_DIRECT_RANGE.S */
3372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_DIRECT.S */
3373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle a direct method call.
3375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * (We could defer the "is 'this' pointer null" test to the common
3377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * method invocation code, and use a flag to indicate that static
3378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * calls don't count.  If we do this as part of copying the arguments
3379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * out we could avoiding loading the first arg twice.)
3380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: invoke-direct, invoke-direct/range
3382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
3384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
33859f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- pDvmDex
3386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
3387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r3, #offDvmDex_pResMethods]    @ r3<- pDvmDex->pResMethods
3388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r10, 2)                       @ r10<- GFED or CCCC
3389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, r1, lsl #2]        @ r0<- resolved methodToCall
3390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if     (!1)
3391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r10, r10, #15               @ r10<- D (or stays CCCC)
3392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ already resolved?
3394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ must export for invoke
3395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r10)                   @ r2<- "this" ptr
3396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LOP_INVOKE_DIRECT_RANGE_resolve         @ not resolved, do it now
3397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_RANGE_finish:
3398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r2, #0                      @ null "this" ref?
3399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     common_invokeMethodRange   @ no, continue on
3400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_errNullObject        @ yes, throw exception
3401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_STATIC_RANGE: /* 0x77 */
3406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_STATIC_RANGE.S */
3407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_STATIC.S */
3408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle a static method call.
3410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: invoke-static, invoke-static/range
3412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
3414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
34159f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- pDvmDex
3416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
3417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r3, #offDvmDex_pResMethods]    @ r3<- pDvmDex->pResMethods
3418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, r1, lsl #2]        @ r0<- resolved methodToCall
3419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ already resolved?
3420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ must export for invoke
3421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     common_invokeMethodRange @ yes, continue on
34229f601a917c8878204482c37aec7005054b6776fabuzbee0:  ldr     r3, [rSELF, #offThread_method] @ r3<- self->method
3423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, #offMethod_clazz]  @ r0<- method->clazz
3424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, #METHOD_STATIC          @ resolver method type
3425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveMethod            @ r0<- call(clazz, ref, flags)
3426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ got null?
3427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     common_invokeMethodRange @ no, continue
3428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown      @ yes, handle exception
3429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_INTERFACE_RANGE: /* 0x78 */
3434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_INTERFACE_RANGE.S */
3435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_INTERFACE.S */
3436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle an interface method call.
3438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: invoke-interface, invoke-interface/range
3440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
3442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
3443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r2, 2)                        @ r2<- FEDC or CCCC
3444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
3445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if     (!1)
3446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r2, #15                 @ r2<- C (or stays CCCC)
3447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
3448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ must export for invoke
3449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- first arg ("this")
34509f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- methodClassDex
3451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ null obj?
34529f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]  @ r2<- method
3453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ yes, fail
3454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r0, #offObject_clazz]  @ r0<- thisPtr->clazz
3455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmFindInterfaceMethodInCache @ r0<- call(class, ref, method, dex)
3456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ failed?
3457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_exceptionThrown      @ yes, handle exception
3458de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    b       common_invokeMethodRange @ jump to common handler
3459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_79: /* 0x79 */
3464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_79.S */
3465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */
3466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      common_abort
3467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_7A: /* 0x7a */
3472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_7A.S */
3473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */
3474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      common_abort
3475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_INT: /* 0x7b */
3480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NEG_INT.S */
3481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */
3482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit unary operation.  Provide an "instr" line that
3484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = op r0".
3485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.
3486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: neg-int, not-int, neg-float, int-to-float, float-to-int,
3488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      int-to-byte, int-to-char, int-to-short
3489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
3492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
3493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r3)                    @ r0<- vB
3494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
3495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
3496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
3497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    rsb     r0, r0, #0                              @ r0<- op, r0-r3 changed
3498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
3499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)                    @ vAA<- r0
3500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
3501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 9-10 instructions */
3502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOT_INT: /* 0x7c */
3507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NOT_INT.S */
3508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */
3509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit unary operation.  Provide an "instr" line that
3511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = op r0".
3512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.
3513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: neg-int, not-int, neg-float, int-to-float, float-to-int,
3515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      int-to-byte, int-to-char, int-to-short
3516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
3519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
3520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r3)                    @ r0<- vB
3521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
3522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
3523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
3524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mvn     r0, r0                              @ r0<- op, r0-r3 changed
3525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
3526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)                    @ vAA<- r0
3527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
3528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 9-10 instructions */
3529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_LONG: /* 0x7d */
3534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NEG_LONG.S */
3535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWide.S */
3536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit unary operation.  Provide an "instr" line that
3538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = op r0/r1".
3539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.
3540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: neg-long, not-long, neg-double, long-to-double, double-to-long
3542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
3545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
3546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
3547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[B]
3548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
3549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r0-r1}                 @ r0/r1<- vAA
3550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
3551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    rsbs    r0, r0, #0                           @ optional op; may set condition codes
3552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    rsc     r1, r1, #0                              @ r0/r1<- op, r2-r3 changed
3553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
3554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0-r1}                 @ vAA<- r0/r1
3555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
3556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 12-13 instructions */
3557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOT_LONG: /* 0x7e */
3562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NOT_LONG.S */
3563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWide.S */
3564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit unary operation.  Provide an "instr" line that
3566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = op r0/r1".
3567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.
3568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: neg-long, not-long, neg-double, long-to-double, double-to-long
3570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
3573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
3574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
3575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[B]
3576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
3577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r0-r1}                 @ r0/r1<- vAA
3578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
3579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mvn     r0, r0                           @ optional op; may set condition codes
3580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mvn     r1, r1                              @ r0/r1<- op, r2-r3 changed
3581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
3582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0-r1}                 @ vAA<- r0/r1
3583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
3584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 12-13 instructions */
3585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_FLOAT: /* 0x7f */
3590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NEG_FLOAT.S */
3591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */
3592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit unary operation.  Provide an "instr" line that
3594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = op r0".
3595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.
3596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: neg-int, not-int, neg-float, int-to-float, float-to-int,
3598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      int-to-byte, int-to-char, int-to-short
3599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
3602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
3603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r3)                    @ r0<- vB
3604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
3605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
3606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
3607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, r0, #0x80000000                              @ r0<- op, r0-r3 changed
3608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
3609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)                    @ vAA<- r0
3610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
3611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 9-10 instructions */
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_NEG_DOUBLE: /* 0x80 */
3617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NEG_DOUBLE.S */
3618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWide.S */
3619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit unary operation.  Provide an "instr" line that
3621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = op r0/r1".
3622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.
3623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: neg-long, not-long, neg-double, long-to-double, double-to-long
3625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
3628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
3629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
3630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[B]
3631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
3632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r0-r1}                 @ r0/r1<- vAA
3633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
3634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
3635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r1, r1, #0x80000000                              @ r0/r1<- op, r2-r3 changed
3636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
3637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0-r1}                 @ vAA<- r0/r1
3638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
3639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 12-13 instructions */
3640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_LONG: /* 0x81 */
3645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INT_TO_LONG.S */
3646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWider.S */
3647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32bit-to-64bit unary operation.  Provide an "instr" line
3649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = op r0", where
3650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * "result" is a 64-bit quantity in r0/r1.
3651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: int-to-long, int-to-double, float-to-long, float-to-double
3653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
3656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
3657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
3658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r3)                    @ r0<- vB
3659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
3660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
3661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
3662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r0, asr #31                              @ r0<- op, r0-r3 changed
3663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
3664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0-r1}                 @ vA/vA+1<- r0/r1
3665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
3666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-11 instructions */
3667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_FLOAT: /* 0x82 */
3672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INT_TO_FLOAT.S */
3673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */
3674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit unary operation.  Provide an "instr" line that
3676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = op r0".
3677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.
3678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: neg-int, not-int, neg-float, int-to-float, float-to-int,
3680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      int-to-byte, int-to-char, int-to-short
3681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
3684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
3685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r3)                    @ r0<- vB
3686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
3687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
3688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
3689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_i2f                              @ r0<- op, r0-r3 changed
3690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
3691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)                    @ vAA<- r0
3692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
3693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 9-10 instructions */
3694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_DOUBLE: /* 0x83 */
3699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INT_TO_DOUBLE.S */
3700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWider.S */
3701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32bit-to-64bit unary operation.  Provide an "instr" line
3703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = op r0", where
3704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * "result" is a 64-bit quantity in r0/r1.
3705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: int-to-long, int-to-double, float-to-long, float-to-double
3707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
3710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
3711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
3712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r3)                    @ r0<- vB
3713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
3714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
3715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
3716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_i2d                              @ r0<- op, r0-r3 changed
3717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
3718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0-r1}                 @ vA/vA+1<- r0/r1
3719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
3720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-11 instructions */
3721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_INT: /* 0x84 */
3726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_LONG_TO_INT.S */
3727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* we ignore the high word, making this equivalent to a 32-bit reg move */
3728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE.S */
3729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* for move, move-object, long-to-int */
3730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB */
3731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B from 15:12
3732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #8           @ r0<- A from 11:8
3733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
3734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r1)                    @ r2<- fp[B]
3735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r0, r0, #15
3736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ ip<- opcode from rINST
3737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r2, r0)                    @ fp[A]<- r2
3738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ execute next instruction
3739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_FLOAT: /* 0x85 */
3744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_LONG_TO_FLOAT.S */
3745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopNarrower.S */
3746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64bit-to-32bit unary operation.  Provide an "instr" line
3748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = op r0/r1", where
3749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * "result" is a 32-bit quantity in r0.
3750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: long-to-float, double-to-int, double-to-float
3752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * (This would work for long-to-int, but that instruction is actually
3754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * an exact match for OP_MOVE.)
3755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
3758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
3759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[B]
3760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
3761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r0-r1}                 @ r0/r1<- vB/vB+1
3762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
3763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
3764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_l2f                              @ r0<- op, r0-r3 changed
3765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
3766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)                    @ vA<- r0
3767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
3768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-11 instructions */
3769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_DOUBLE: /* 0x86 */
3774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_LONG_TO_DOUBLE.S */
3775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWide.S */
3776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit unary operation.  Provide an "instr" line that
3778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = op r0/r1".
3779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.
3780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: neg-long, not-long, neg-double, long-to-double, double-to-long
3782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
3785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
3786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
3787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[B]
3788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
3789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r0-r1}                 @ r0/r1<- vAA
3790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
3791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
3792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_l2d                              @ r0/r1<- op, r2-r3 changed
3793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
3794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0-r1}                 @ vAA<- r0/r1
3795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
3796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 12-13 instructions */
3797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_INT: /* 0x87 */
3802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FLOAT_TO_INT.S */
3803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* EABI appears to have Java-style conversions of +inf/-inf/NaN */
3804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */
3805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit unary operation.  Provide an "instr" line that
3807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = op r0".
3808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.
3809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: neg-int, not-int, neg-float, int-to-float, float-to-int,
3811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      int-to-byte, int-to-char, int-to-short
3812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
3815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
3816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r3)                    @ r0<- vB
3817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
3818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
3819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
3820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_f2iz                              @ r0<- op, r0-r3 changed
3821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
3822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)                    @ vAA<- r0
3823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
3824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 9-10 instructions */
3825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if 0
3828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/unop.S" {"instr":"bl      f2i_doconv"}
3829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@break
3830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
3831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Convert the float in r0 to an int in r0.
3832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
3833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We have to clip values to int min/max per the specification.  The
3834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * expected common case is a "reasonable" value that converts directly
3835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to modest integer.  The EABI convert function isn't doing this for us.
3836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
3837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectf2i_doconv:
3838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmfd   sp!, {r4, lr}
3839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, #0x4f000000             @ (float)maxint
3840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r4, r0
3841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_fcmpge              @ is arg >= maxint?
3842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ nonzero == yes
3843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mvnne   r0, #0x80000000             @ return maxint (7fffffff)
3844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmnefd sp!, {r4, pc}
3845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r4                      @ recover arg
3847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, #0xcf000000             @ (float)minint
3848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_fcmple              @ is arg <= minint?
3849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ nonzero == yes
3850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movne   r0, #0x80000000             @ return minint (80000000)
3851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmnefd sp!, {r4, pc}
3852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r4                      @ recover arg
3854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r4
3855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_fcmpeq              @ is arg == self?
3856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ zero == no
3857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmeqfd sp!, {r4, pc}               @ return zero for NaN
3858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r4                      @ recover arg
3860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_f2iz                @ convert float to int
3861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmfd   sp!, {r4, pc}
3862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif
3863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_LONG: /* 0x88 */
3867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FLOAT_TO_LONG.S */
3868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/unopWider.S" {"instr":"bl      __aeabi_f2lz"}
3869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWider.S */
3870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32bit-to-64bit unary operation.  Provide an "instr" line
3872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = op r0", where
3873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * "result" is a 64-bit quantity in r0/r1.
3874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: int-to-long, int-to-double, float-to-long, float-to-double
3876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
3879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
3880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
3881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r3)                    @ r0<- vB
3882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
3883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
3884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
3885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      f2l_doconv                              @ r0<- op, r0-r3 changed
3886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
3887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0-r1}                 @ vA/vA+1<- r0/r1
3888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
3889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-11 instructions */
3890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_DOUBLE: /* 0x89 */
3896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FLOAT_TO_DOUBLE.S */
3897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWider.S */
3898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32bit-to-64bit unary operation.  Provide an "instr" line
3900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = op r0", where
3901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * "result" is a 64-bit quantity in r0/r1.
3902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: int-to-long, int-to-double, float-to-long, float-to-double
3904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
3907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
3908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
3909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r3)                    @ r0<- vB
3910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
3911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
3912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
3913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_f2d                              @ r0<- op, r0-r3 changed
3914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
3915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0-r1}                 @ vA/vA+1<- r0/r1
3916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
3917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-11 instructions */
3918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
3921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
3922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_INT: /* 0x8a */
3923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DOUBLE_TO_INT.S */
3924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* EABI appears to have Java-style conversions of +inf/-inf/NaN */
3925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopNarrower.S */
3926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64bit-to-32bit unary operation.  Provide an "instr" line
3928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = op r0/r1", where
3929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * "result" is a 32-bit quantity in r0.
3930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: long-to-float, double-to-int, double-to-float
3932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * (This would work for long-to-int, but that instruction is actually
3934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * an exact match for OP_MOVE.)
3935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
3937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
3938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
3939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[B]
3940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
3941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r0-r1}                 @ r0/r1<- vB/vB+1
3942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
3943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
3944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_d2iz                              @ r0<- op, r0-r3 changed
3945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
3946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)                    @ vA<- r0
3947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
3948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-11 instructions */
3949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if 0
3952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/unopNarrower.S" {"instr":"bl      d2i_doconv"}
3953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@break
3954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
3955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Convert the double in r0/r1 to an int in r0.
3956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
3957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We have to clip values to int min/max per the specification.  The
3958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * expected common case is a "reasonable" value that converts directly
3959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to modest integer.  The EABI convert function isn't doing this for us.
3960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
3961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectd2i_doconv:
3962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmfd   sp!, {r4, r5, lr}           @ save regs
39635162c5fbc20b7ba7791e79c640ac51b9fcd7937aAndy McFadden    mov     r2, #0x80000000             @ maxint, as a double (low word)
39645162c5fbc20b7ba7791e79c640ac51b9fcd7937aAndy McFadden    mov     r2, r2, asr #9              @  0xffc00000
3965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sub     sp, sp, #4                  @ align for EABI
39665162c5fbc20b7ba7791e79c640ac51b9fcd7937aAndy McFadden    mvn     r3, #0xbe000000             @ maxint, as a double (high word)
39675162c5fbc20b7ba7791e79c640ac51b9fcd7937aAndy McFadden    sub     r3, r3, #0x00200000         @  0x41dfffff
39685162c5fbc20b7ba7791e79c640ac51b9fcd7937aAndy McFadden    mov     r4, r0                      @ save a copy of r0
3969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r5, r1                      @  and r1
3970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_dcmpge              @ is arg >= maxint?
3971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ nonzero == yes
39725162c5fbc20b7ba7791e79c640ac51b9fcd7937aAndy McFadden    mvnne   r0, #0x80000000             @ return maxint (0x7fffffff)
3973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     1f
3974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r4                      @ recover arg
3976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r5
39775162c5fbc20b7ba7791e79c640ac51b9fcd7937aAndy McFadden    mov     r3, #0xc1000000             @ minint, as a double (high word)
39785162c5fbc20b7ba7791e79c640ac51b9fcd7937aAndy McFadden    add     r3, r3, #0x00e00000         @  0xc1e00000
39795162c5fbc20b7ba7791e79c640ac51b9fcd7937aAndy McFadden    mov     r2, #0                      @ minint, as a double (low word)
3980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_dcmple              @ is arg <= minint?
3981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ nonzero == yes
3982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movne   r0, #0x80000000             @ return minint (80000000)
3983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     1f
3984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r4                      @ recover arg
3986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r5
3987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, r4                      @ compare against self
3988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r5
3989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_dcmpeq              @ is arg == self?
3990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ zero == no
3991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     1f                          @ return zero for NaN
3992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r4                      @ recover arg
3994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r5
3995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_d2iz                @ convert double to int
3996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:
3998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     sp, sp, #4
3999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmfd   sp!, {r4, r5, pc}
4000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif
4001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_LONG: /* 0x8b */
4005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DOUBLE_TO_LONG.S */
4006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/unopWide.S" {"instr":"bl      __aeabi_d2lz"}
4007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWide.S */
4008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit unary operation.  Provide an "instr" line that
4010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = op r0/r1".
4011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.
4012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: neg-long, not-long, neg-double, long-to-double, double-to-long
4014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
4016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
4017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
4018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
4019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[B]
4020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
4021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r0-r1}                 @ r0/r1<- vAA
4022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
4023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
4024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      d2l_doconv                              @ r0/r1<- op, r2-r3 changed
4025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0-r1}                 @ vAA<- r0/r1
4027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 12-13 instructions */
4029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_FLOAT: /* 0x8c */
4035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DOUBLE_TO_FLOAT.S */
4036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopNarrower.S */
4037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64bit-to-32bit unary operation.  Provide an "instr" line
4039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = op r0/r1", where
4040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * "result" is a 32-bit quantity in r0.
4041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: long-to-float, double-to-int, double-to-float
4043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * (This would work for long-to-int, but that instruction is actually
4045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * an exact match for OP_MOVE.)
4046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
4048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
4049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
4050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[B]
4051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
4052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r0-r1}                 @ r0/r1<- vB/vB+1
4053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
4054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
4055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_d2f                              @ r0<- op, r0-r3 changed
4056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)                    @ vA<- r0
4058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-11 instructions */
4060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_BYTE: /* 0x8d */
4065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INT_TO_BYTE.S */
4066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */
4067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit unary operation.  Provide an "instr" line that
4069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = op r0".
4070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.
4071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: neg-int, not-int, neg-float, int-to-float, float-to-int,
4073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      int-to-byte, int-to-char, int-to-short
4074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
4076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
4077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
4078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r3)                    @ r0<- vB
4079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
4080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, asl #24                           @ optional op; may set condition codes
4081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
4082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, asr #24                              @ r0<- op, r0-r3 changed
4083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)                    @ vAA<- r0
4085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 9-10 instructions */
4087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_CHAR: /* 0x8e */
4092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INT_TO_CHAR.S */
4093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */
4094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit unary operation.  Provide an "instr" line that
4096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = op r0".
4097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.
4098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: neg-int, not-int, neg-float, int-to-float, float-to-int,
4100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      int-to-byte, int-to-char, int-to-short
4101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
4103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
4104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
4105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r3)                    @ r0<- vB
4106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
4107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, asl #16                           @ optional op; may set condition codes
4108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
4109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, lsr #16                              @ r0<- op, r0-r3 changed
4110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)                    @ vAA<- r0
4112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 9-10 instructions */
4114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_SHORT: /* 0x8f */
4119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INT_TO_SHORT.S */
4120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */
4121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit unary operation.  Provide an "instr" line that
4123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = op r0".
4124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.
4125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: neg-int, not-int, neg-float, int-to-float, float-to-int,
4127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      int-to-byte, int-to-char, int-to-short
4128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* unop vA, vB */
4130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
4131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
4132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r3)                    @ r0<- vB
4133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
4134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, asl #16                           @ optional op; may set condition codes
4135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
4136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, asr #16                              @ r0<- op, r0-r3 changed
4137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)                    @ vAA<- r0
4139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 9-10 instructions */
4141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT: /* 0x90 */
4146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_INT.S */
4147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */
4148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
4150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0 op r1".
4151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.  Note that we
4156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * *don't* check for (INT_MIN / -1) here, because the ARM math lib
4157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * handles it correctly.
4158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
4160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int, add-float, sub-float,
4161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      mul-float, div-float, rem-float
4162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
4166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
4167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
4168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC
4169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
4170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
4171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
4172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
4173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
4174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
4176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
4177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, r0, r1                              @ r0<- op, r0-r3 changed
4178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
4180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 11-14 instructions */
4182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_INT: /* 0x91 */
4187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_INT.S */
4188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */
4189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
4191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0 op r1".
4192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.  Note that we
4197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * *don't* check for (INT_MIN / -1) here, because the ARM math lib
4198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * handles it correctly.
4199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
4201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int, add-float, sub-float,
4202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      mul-float, div-float, rem-float
4203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
4207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
4208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
4209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC
4210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
4211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
4212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
4213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
4214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
4215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
4217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
4218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sub     r0, r0, r1                              @ r0<- op, r0-r3 changed
4219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
4221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 11-14 instructions */
4223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT: /* 0x92 */
4228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_INT.S */
4229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* must be "mul r0, r1, r0" -- "r0, r0, r1" is illegal */
4230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */
4231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
4233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0 op r1".
4234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.  Note that we
4239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * *don't* check for (INT_MIN / -1) here, because the ARM math lib
4240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * handles it correctly.
4241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
4243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int, add-float, sub-float,
4244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      mul-float, div-float, rem-float
4245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
4249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
4250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
4251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC
4252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
4253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
4254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
4255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
4256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
4257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
4259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
4260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mul     r0, r1, r0                              @ r0<- op, r0-r3 changed
4261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
4263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 11-14 instructions */
4265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT: /* 0x93 */
4270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_INT.S */
4271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */
4272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
4274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0 op r1".
4275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.  Note that we
4280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * *don't* check for (INT_MIN / -1) here, because the ARM math lib
4281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * handles it correctly.
4282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
4284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int, add-float, sub-float,
4285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      mul-float, div-float, rem-float
4286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
4290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
4291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
4292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC
4293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
4294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 1
4295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
4296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
4297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
4298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
4300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
4301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl     __aeabi_idiv                              @ r0<- op, r0-r3 changed
4302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
4304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 11-14 instructions */
4306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT: /* 0x94 */
4311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_INT.S */
4312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* idivmod returns quotient in r0 and remainder in r1 */
4313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */
4314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
4316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0 op r1".
4317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.  Note that we
4322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * *don't* check for (INT_MIN / -1) here, because the ARM math lib
4323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * handles it correctly.
4324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
4326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int, add-float, sub-float,
4327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      mul-float, div-float, rem-float
4328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
4332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
4333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
4334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC
4335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
4336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 1
4337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
4338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
4339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
4340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
4342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
4343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_idivmod                              @ r1<- op, r0-r3 changed
4344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r1, r9)               @ vAA<- r1
4346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 11-14 instructions */
4348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT: /* 0x95 */
4353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AND_INT.S */
4354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */
4355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
4357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0 op r1".
4358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.  Note that we
4363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * *don't* check for (INT_MIN / -1) here, because the ARM math lib
4364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * handles it correctly.
4365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
4367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int, add-float, sub-float,
4368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      mul-float, div-float, rem-float
4369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
4373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
4374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
4375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC
4376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
4377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
4378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
4379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
4380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
4381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
4383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
4384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r0, r0, r1                              @ r0<- op, r0-r3 changed
4385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
4387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 11-14 instructions */
4389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT: /* 0x96 */
4394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_OR_INT.S */
4395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */
4396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
4398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0 op r1".
4399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.  Note that we
4404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * *don't* check for (INT_MIN / -1) here, because the ARM math lib
4405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * handles it correctly.
4406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
4408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int, add-float, sub-float,
4409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      mul-float, div-float, rem-float
4410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
4414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
4415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
4416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC
4417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
4418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
4419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
4420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
4421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
4422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
4424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
4425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r0, r0, r1                              @ r0<- op, r0-r3 changed
4426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
4428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 11-14 instructions */
4430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT: /* 0x97 */
4435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_XOR_INT.S */
4436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */
4437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
4439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0 op r1".
4440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.  Note that we
4445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * *don't* check for (INT_MIN / -1) here, because the ARM math lib
4446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * handles it correctly.
4447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
4449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int, add-float, sub-float,
4450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      mul-float, div-float, rem-float
4451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
4455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
4456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
4457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC
4458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
4459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
4460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
4461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
4462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
4463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
4465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
4466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    eor     r0, r0, r1                              @ r0<- op, r0-r3 changed
4467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
4469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 11-14 instructions */
4471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT: /* 0x98 */
4476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHL_INT.S */
4477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */
4478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
4480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0 op r1".
4481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.  Note that we
4486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * *don't* check for (INT_MIN / -1) here, because the ARM math lib
4487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * handles it correctly.
4488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
4490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int, add-float, sub-float,
4491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      mul-float, div-float, rem-float
4492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
4496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
4497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
4498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC
4499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
4500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
4501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
4502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
4503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
4504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
4506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r1, r1, #31                           @ optional op; may set condition codes
4507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, asl r1                              @ r0<- op, r0-r3 changed
4508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
4510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 11-14 instructions */
4512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT: /* 0x99 */
4517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHR_INT.S */
4518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */
4519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
4521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0 op r1".
4522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.  Note that we
4527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * *don't* check for (INT_MIN / -1) here, because the ARM math lib
4528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * handles it correctly.
4529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
4531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int, add-float, sub-float,
4532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      mul-float, div-float, rem-float
4533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
4537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
4538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
4539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC
4540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
4541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
4542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
4543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
4544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
4545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
4547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r1, r1, #31                           @ optional op; may set condition codes
4548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, asr r1                              @ r0<- op, r0-r3 changed
4549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
4551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 11-14 instructions */
4553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT: /* 0x9a */
4558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_USHR_INT.S */
4559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */
4560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
4562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0 op r1".
4563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.  Note that we
4568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * *don't* check for (INT_MIN / -1) here, because the ARM math lib
4569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * handles it correctly.
4570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
4572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int, add-float, sub-float,
4573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      mul-float, div-float, rem-float
4574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
4578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
4579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
4580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC
4581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
4582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
4583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
4584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
4585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
4586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
4588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r1, r1, #31                           @ optional op; may set condition codes
4589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, lsr r1                              @ r0<- op, r0-r3 changed
4590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
4592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 11-14 instructions */
4594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_LONG: /* 0x9b */
4599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_LONG.S */
4600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */
4601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.  Provide an "instr" line that
4603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0-r1 op r2-r3".
4604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
4609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: add-long, sub-long, div-long, rem-long, and-long, or-long,
4611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-long, add-double, sub-double, mul-double, div-double,
4612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double
4613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * IMPORTANT: you may specify "chkzero" or "preinstr" but not both.
4615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
4619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
4620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
4621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
4622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r2, rFP, r2, lsl #2         @ r2<- &fp[BB]
4623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[CC]
4624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r2, {r0-r1}                 @ r0/r1<- vBB/vBB+1
4625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r2-r3}                 @ r2/r3<- vCC/vCC+1
4626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
4627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
4628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
4629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
4630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
4631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    adds    r0, r0, r2                           @ optional op; may set condition codes
4633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    adc     r1, r1, r3                              @ result<- op, r0-r3 changed
4634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
4636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 14-17 instructions */
4638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_LONG: /* 0x9c */
4643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_LONG.S */
4644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */
4645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.  Provide an "instr" line that
4647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0-r1 op r2-r3".
4648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
4653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: add-long, sub-long, div-long, rem-long, and-long, or-long,
4655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-long, add-double, sub-double, mul-double, div-double,
4656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double
4657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * IMPORTANT: you may specify "chkzero" or "preinstr" but not both.
4659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
4663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
4664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
4665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
4666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r2, rFP, r2, lsl #2         @ r2<- &fp[BB]
4667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[CC]
4668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r2, {r0-r1}                 @ r0/r1<- vBB/vBB+1
4669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r2-r3}                 @ r2/r3<- vCC/vCC+1
4670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
4671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
4672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
4673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
4674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
4675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    subs    r0, r0, r2                           @ optional op; may set condition codes
4677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sbc     r1, r1, r3                              @ result<- op, r0-r3 changed
4678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
4680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 14-17 instructions */
4682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_LONG: /* 0x9d */
4687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_LONG.S */
4688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Signed 64-bit integer multiply.
4690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Consider WXxYZ (r1r0 x r3r2) with a long multiply:
4692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *        WX
4693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      x YZ
4694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  --------
4695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *     ZW ZX
4696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  YW YX
4697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The low word of the result holds ZX, the high word holds
4699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * (ZW+YX) + (the high overflow from ZX).  YW doesn't matter because
4700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * it doesn't fit in the low 64 bits.
4701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Unlike most ARM math operations, multiply instructions have
4703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * restrictions on using the same register more than once (Rd and Rm
4704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * cannot be the same).
4705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* mul-long vAA, vBB, vCC */
4707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
4709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
4710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r2, rFP, r2, lsl #2         @ r2<- &fp[BB]
4711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[CC]
4712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r2, {r0-r1}                 @ r0/r1<- vBB/vBB+1
4713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r2-r3}                 @ r2/r3<- vCC/vCC+1
4714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mul     ip, r2, r1                  @  ip<- ZxW
4715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    umull   r9, r10, r2, r0             @  r9/r10 <- ZxX
4716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mla     r2, r0, r3, ip              @  r2<- YxX + (ZxW)
4717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #8           @ r0<- AA
4718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r10, r2, r10                @  r10<- r10 + low(ZxW + (YxX))
4719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, rFP, r0, lsl #2         @ r0<- &fp[AA]
4720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
4721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       .LOP_MUL_LONG_finish
4722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_LONG: /* 0x9e */
4726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_LONG.S */
4727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */
4728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.  Provide an "instr" line that
4730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0-r1 op r2-r3".
4731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
4736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: add-long, sub-long, div-long, rem-long, and-long, or-long,
4738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-long, add-double, sub-double, mul-double, div-double,
4739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double
4740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * IMPORTANT: you may specify "chkzero" or "preinstr" but not both.
4742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
4746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
4747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
4748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
4749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r2, rFP, r2, lsl #2         @ r2<- &fp[BB]
4750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[CC]
4751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r2, {r0-r1}                 @ r0/r1<- vBB/vBB+1
4752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r2-r3}                 @ r2/r3<- vCC/vCC+1
4753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 1
4754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
4755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
4756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
4757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
4758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
4760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_ldivmod                              @ result<- op, r0-r3 changed
4761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
4763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 14-17 instructions */
4765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_LONG: /* 0x9f */
4770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_LONG.S */
4771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ldivmod returns quotient in r0/r1 and remainder in r2/r3 */
4772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */
4773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.  Provide an "instr" line that
4775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0-r1 op r2-r3".
4776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
4781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: add-long, sub-long, div-long, rem-long, and-long, or-long,
4783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-long, add-double, sub-double, mul-double, div-double,
4784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double
4785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * IMPORTANT: you may specify "chkzero" or "preinstr" but not both.
4787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
4791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
4792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
4793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
4794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r2, rFP, r2, lsl #2         @ r2<- &fp[BB]
4795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[CC]
4796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r2, {r0-r1}                 @ r0/r1<- vBB/vBB+1
4797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r2-r3}                 @ r2/r3<- vCC/vCC+1
4798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 1
4799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
4800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
4801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
4802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
4803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
4805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_ldivmod                              @ result<- op, r0-r3 changed
4806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r2,r3}     @ vAA/vAA+1<- r2/r3
4808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 14-17 instructions */
4810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_LONG: /* 0xa0 */
4815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AND_LONG.S */
4816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */
4817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.  Provide an "instr" line that
4819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0-r1 op r2-r3".
4820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
4825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: add-long, sub-long, div-long, rem-long, and-long, or-long,
4827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-long, add-double, sub-double, mul-double, div-double,
4828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double
4829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * IMPORTANT: you may specify "chkzero" or "preinstr" but not both.
4831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
4835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
4836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
4837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
4838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r2, rFP, r2, lsl #2         @ r2<- &fp[BB]
4839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[CC]
4840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r2, {r0-r1}                 @ r0/r1<- vBB/vBB+1
4841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r2-r3}                 @ r2/r3<- vCC/vCC+1
4842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
4843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
4844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
4845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
4846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
4847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r0, r0, r2                           @ optional op; may set condition codes
4849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r1, r1, r3                              @ result<- op, r0-r3 changed
4850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
4852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 14-17 instructions */
4854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_LONG: /* 0xa1 */
4859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_OR_LONG.S */
4860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */
4861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.  Provide an "instr" line that
4863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0-r1 op r2-r3".
4864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
4869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: add-long, sub-long, div-long, rem-long, and-long, or-long,
4871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-long, add-double, sub-double, mul-double, div-double,
4872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double
4873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * IMPORTANT: you may specify "chkzero" or "preinstr" but not both.
4875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
4879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
4880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
4881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
4882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r2, rFP, r2, lsl #2         @ r2<- &fp[BB]
4883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[CC]
4884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r2, {r0-r1}                 @ r0/r1<- vBB/vBB+1
4885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r2-r3}                 @ r2/r3<- vCC/vCC+1
4886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
4887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
4888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
4889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
4890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
4891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r0, r0, r2                           @ optional op; may set condition codes
4893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r1, r1, r3                              @ result<- op, r0-r3 changed
4894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
4896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 14-17 instructions */
4898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_LONG: /* 0xa2 */
4903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_XOR_LONG.S */
4904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */
4905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.  Provide an "instr" line that
4907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0-r1 op r2-r3".
4908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
4909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
4910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
4912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
4913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: add-long, sub-long, div-long, rem-long, and-long, or-long,
4915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-long, add-double, sub-double, mul-double, div-double,
4916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double
4917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
4918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * IMPORTANT: you may specify "chkzero" or "preinstr" but not both.
4919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
4921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
4923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
4924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
4925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
4926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r2, rFP, r2, lsl #2         @ r2<- &fp[BB]
4927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[CC]
4928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r2, {r0-r1}                 @ r0/r1<- vBB/vBB+1
4929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r2-r3}                 @ r2/r3<- vCC/vCC+1
4930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
4931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
4932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
4933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
4934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
4935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    eor     r0, r0, r2                           @ optional op; may set condition codes
4937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    eor     r1, r1, r3                              @ result<- op, r0-r3 changed
4938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
4939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
4940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
4941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 14-17 instructions */
4942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_LONG: /* 0xa3 */
4947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHL_LONG.S */
4948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Long integer shift.  This is different from the generic 32/64-bit
4950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * binary operations because vAA/vBB are 64-bit but vCC (the shift
4951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * distance) is 32-bit.  Also, Dalvik requires us to mask off the low
4952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 6 bits of the shift distance.
4953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* shl-long vAA, vBB, vCC */
4955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
4957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r3, r0, #255                @ r3<- BB
4958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, lsr #8              @ r0<- CC
4959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[BB]
4960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r0)                    @ r2<- vCC
4961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r0-r1}                 @ r0/r1<- vBB/vBB+1
4962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r2, #63                 @ r2<- r2 & 0x3f
4963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
4964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r1, asl r2              @  r1<- r1 << r2
4966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    rsb     r3, r2, #32                 @  r3<- 32 - r2
4967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r1, r1, r0, lsr r3          @  r1<- r1 | (r0 << (32-r2))
4968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    subs    ip, r2, #32                 @  ip<- r2 - 32
4969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movpl   r1, r0, asl ip              @  if r2 >= 32, r1<- r0 << (r2-32)
4970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
4971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       .LOP_SHL_LONG_finish
4972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
4974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
4975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_LONG: /* 0xa4 */
4976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHR_LONG.S */
4977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Long integer shift.  This is different from the generic 32/64-bit
4979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * binary operations because vAA/vBB are 64-bit but vCC (the shift
4980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * distance) is 32-bit.  Also, Dalvik requires us to mask off the low
4981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 6 bits of the shift distance.
4982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
4983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* shr-long vAA, vBB, vCC */
4984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
4985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
4986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r3, r0, #255                @ r3<- BB
4987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, lsr #8              @ r0<- CC
4988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[BB]
4989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r0)                    @ r2<- vCC
4990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r0-r1}                 @ r0/r1<- vBB/vBB+1
4991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r2, #63                 @ r0<- r0 & 0x3f
4992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
4993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, lsr r2              @  r0<- r2 >> r2
4995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    rsb     r3, r2, #32                 @  r3<- 32 - r2
4996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r0, r0, r1, asl r3          @  r0<- r0 | (r1 << (32-r2))
4997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    subs    ip, r2, #32                 @  ip<- r2 - 32
4998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movpl   r0, r1, asr ip              @  if r2 >= 32, r0<-r1 >> (r2-32)
4999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
5000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       .LOP_SHR_LONG_finish
5001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_LONG: /* 0xa5 */
5005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_USHR_LONG.S */
5006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Long integer shift.  This is different from the generic 32/64-bit
5008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * binary operations because vAA/vBB are 64-bit but vCC (the shift
5009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * distance) is 32-bit.  Also, Dalvik requires us to mask off the low
5010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 6 bits of the shift distance.
5011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* ushr-long vAA, vBB, vCC */
5013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
5014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
5015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r3, r0, #255                @ r3<- BB
5016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, lsr #8              @ r0<- CC
5017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[BB]
5018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r0)                    @ r2<- vCC
5019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r0-r1}                 @ r0/r1<- vBB/vBB+1
5020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r2, #63                 @ r0<- r0 & 0x3f
5021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
5022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, lsr r2              @  r0<- r2 >> r2
5024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    rsb     r3, r2, #32                 @  r3<- 32 - r2
5025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r0, r0, r1, asl r3          @  r0<- r0 | (r1 << (32-r2))
5026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    subs    ip, r2, #32                 @  ip<- r2 - 32
5027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movpl   r0, r1, lsr ip              @  if r2 >= 32, r0<-r1 >>> (r2-32)
5028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
5029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       .LOP_USHR_LONG_finish
5030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_FLOAT: /* 0xa6 */
5034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_FLOAT.S */
5035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */
5036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
5038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0 op r1".
5039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.  Note that we
5044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * *don't* check for (INT_MIN / -1) here, because the ARM math lib
5045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * handles it correctly.
5046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
5048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int, add-float, sub-float,
5049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      mul-float, div-float, rem-float
5050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
5052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
5053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
5054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
5055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
5056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC
5057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
5058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
5060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
5064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
5065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_fadd                              @ r0<- op, r0-r3 changed
5066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
5068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 11-14 instructions */
5070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_FLOAT: /* 0xa7 */
5075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_FLOAT.S */
5076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */
5077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
5079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0 op r1".
5080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.  Note that we
5085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * *don't* check for (INT_MIN / -1) here, because the ARM math lib
5086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * handles it correctly.
5087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
5089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int, add-float, sub-float,
5090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      mul-float, div-float, rem-float
5091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
5093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
5094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
5095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
5096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
5097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC
5098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
5099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
5101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
5105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
5106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_fsub                              @ r0<- op, r0-r3 changed
5107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
5109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 11-14 instructions */
5111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_FLOAT: /* 0xa8 */
5116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_FLOAT.S */
5117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */
5118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
5120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0 op r1".
5121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.  Note that we
5126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * *don't* check for (INT_MIN / -1) here, because the ARM math lib
5127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * handles it correctly.
5128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
5130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int, add-float, sub-float,
5131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      mul-float, div-float, rem-float
5132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
5134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
5135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
5136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
5137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
5138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC
5139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
5140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
5142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
5146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
5147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_fmul                              @ r0<- op, r0-r3 changed
5148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
5150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 11-14 instructions */
5152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_FLOAT: /* 0xa9 */
5157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_FLOAT.S */
5158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */
5159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
5161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0 op r1".
5162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.  Note that we
5167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * *don't* check for (INT_MIN / -1) here, because the ARM math lib
5168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * handles it correctly.
5169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
5171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int, add-float, sub-float,
5172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      mul-float, div-float, rem-float
5173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
5175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
5176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
5177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
5178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
5179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC
5180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
5181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
5183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
5187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
5188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_fdiv                              @ r0<- op, r0-r3 changed
5189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
5191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 11-14 instructions */
5193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_FLOAT: /* 0xaa */
5198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_FLOAT.S */
5199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* EABI doesn't define a float remainder function, but libm does */
5200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */
5201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit binary operation.  Provide an "instr" line that
5203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0 op r1".
5204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.  Note that we
5209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * *don't* check for (INT_MIN / -1) here, because the ARM math lib
5210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * handles it correctly.
5211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
5213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-int, shl-int, shr-int, ushr-int, add-float, sub-float,
5214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      mul-float, div-float, rem-float
5215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
5217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
5218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
5219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
5220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
5221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vCC
5222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
5223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
5225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
5229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
5230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      fmodf                              @ r0<- op, r0-r3 changed
5231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
5233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 11-14 instructions */
5235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_DOUBLE: /* 0xab */
5240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_DOUBLE.S */
5241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */
5242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.  Provide an "instr" line that
5244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0-r1 op r2-r3".
5245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
5250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: add-long, sub-long, div-long, rem-long, and-long, or-long,
5252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-long, add-double, sub-double, mul-double, div-double,
5253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double
5254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * IMPORTANT: you may specify "chkzero" or "preinstr" but not both.
5256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
5258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
5259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
5260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
5261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
5262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
5263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r2, rFP, r2, lsl #2         @ r2<- &fp[BB]
5264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[CC]
5265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r2, {r0-r1}                 @ r0/r1<- vBB/vBB+1
5266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r2-r3}                 @ r2/r3<- vCC/vCC+1
5267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
5269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
5272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
5274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_dadd                              @ result<- op, r0-r3 changed
5275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
5277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 14-17 instructions */
5279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_DOUBLE: /* 0xac */
5284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_DOUBLE.S */
5285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */
5286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.  Provide an "instr" line that
5288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0-r1 op r2-r3".
5289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
5294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: add-long, sub-long, div-long, rem-long, and-long, or-long,
5296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-long, add-double, sub-double, mul-double, div-double,
5297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double
5298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * IMPORTANT: you may specify "chkzero" or "preinstr" but not both.
5300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
5302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
5303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
5304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
5305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
5306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
5307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r2, rFP, r2, lsl #2         @ r2<- &fp[BB]
5308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[CC]
5309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r2, {r0-r1}                 @ r0/r1<- vBB/vBB+1
5310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r2-r3}                 @ r2/r3<- vCC/vCC+1
5311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
5313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
5316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
5318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_dsub                              @ result<- op, r0-r3 changed
5319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
5321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 14-17 instructions */
5323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_DOUBLE: /* 0xad */
5328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_DOUBLE.S */
5329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */
5330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.  Provide an "instr" line that
5332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0-r1 op r2-r3".
5333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
5338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: add-long, sub-long, div-long, rem-long, and-long, or-long,
5340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-long, add-double, sub-double, mul-double, div-double,
5341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double
5342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * IMPORTANT: you may specify "chkzero" or "preinstr" but not both.
5344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
5346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
5347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
5348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
5349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
5350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
5351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r2, rFP, r2, lsl #2         @ r2<- &fp[BB]
5352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[CC]
5353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r2, {r0-r1}                 @ r0/r1<- vBB/vBB+1
5354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r2-r3}                 @ r2/r3<- vCC/vCC+1
5355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
5357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
5360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
5362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_dmul                              @ result<- op, r0-r3 changed
5363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
5365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 14-17 instructions */
5367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_DOUBLE: /* 0xae */
5372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_DOUBLE.S */
5373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */
5374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.  Provide an "instr" line that
5376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0-r1 op r2-r3".
5377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
5382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: add-long, sub-long, div-long, rem-long, and-long, or-long,
5384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-long, add-double, sub-double, mul-double, div-double,
5385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double
5386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * IMPORTANT: you may specify "chkzero" or "preinstr" but not both.
5388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
5390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
5391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
5392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
5393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
5394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
5395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r2, rFP, r2, lsl #2         @ r2<- &fp[BB]
5396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[CC]
5397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r2, {r0-r1}                 @ r0/r1<- vBB/vBB+1
5398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r2-r3}                 @ r2/r3<- vCC/vCC+1
5399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
5401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
5404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
5406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_ddiv                              @ result<- op, r0-r3 changed
5407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
5409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 14-17 instructions */
5411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_DOUBLE: /* 0xaf */
5416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_DOUBLE.S */
5417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* EABI doesn't define a double remainder function, but libm does */
5418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */
5419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit binary operation.  Provide an "instr" line that
5421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * specifies an instruction that performs "result = r0-r1 op r2-r3".
5422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
5427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: add-long, sub-long, div-long, rem-long, and-long, or-long,
5429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      xor-long, add-double, sub-double, mul-double, div-double,
5430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double
5431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * IMPORTANT: you may specify "chkzero" or "preinstr" but not both.
5433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop vAA, vBB, vCC */
5435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- CCBB
5436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
5437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r0, #255                @ r2<- BB
5438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r0, lsr #8              @ r3<- CC
5439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
5440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r2, rFP, r2, lsl #2         @ r2<- &fp[BB]
5441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r3, lsl #2         @ r3<- &fp[CC]
5442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r2, {r0-r1}                 @ r0/r1<- vBB/vBB+1
5443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r2-r3}                 @ r2/r3<- vCC/vCC+1
5444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
5446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
5449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
5451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      fmod                              @ result<- op, r0-r3 changed
5452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
5454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 14-17 instructions */
5456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_2ADDR: /* 0xb0 */
5461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_INT_2ADDR.S */
5462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */
5463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
5465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
5466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
5471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
5473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
5474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
5475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
5476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
5479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
5480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
5481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vB
5482a5069fb7eb2da846ff1fc2c903ebd8ce9fa3647fAndy McFadden    GET_VREG(r0, r9)                    @ r0<- vA
5483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
5485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
5488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
5490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, r0, r1                              @ r0<- op, r0-r3 changed
5491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
5493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
5495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_INT_2ADDR: /* 0xb1 */
5500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_INT_2ADDR.S */
5501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */
5502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
5504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
5505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
5510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
5512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
5513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
5514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
5515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
5518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
5519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
5520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vB
5521a5069fb7eb2da846ff1fc2c903ebd8ce9fa3647fAndy McFadden    GET_VREG(r0, r9)                    @ r0<- vA
5522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
5524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
5527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
5529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sub     r0, r0, r1                              @ r0<- op, r0-r3 changed
5530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
5532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
5534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_2ADDR: /* 0xb2 */
5539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_INT_2ADDR.S */
5540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* must be "mul r0, r1, r0" -- "r0, r0, r1" is illegal */
5541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */
5542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
5544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
5545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
5550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
5552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
5553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
5554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
5555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
5558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
5559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
5560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vB
5561a5069fb7eb2da846ff1fc2c903ebd8ce9fa3647fAndy McFadden    GET_VREG(r0, r9)                    @ r0<- vA
5562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
5564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
5567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
5569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mul     r0, r1, r0                              @ r0<- op, r0-r3 changed
5570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
5572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
5574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_2ADDR: /* 0xb3 */
5579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_INT_2ADDR.S */
5580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */
5581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
5583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
5584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
5589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
5591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
5592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
5593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
5594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
5597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
5598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
5599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vB
5600a5069fb7eb2da846ff1fc2c903ebd8ce9fa3647fAndy McFadden    GET_VREG(r0, r9)                    @ r0<- vA
5601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 1
5602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
5603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
5606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
5608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl     __aeabi_idiv                              @ r0<- op, r0-r3 changed
5609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
5611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
5613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_2ADDR: /* 0xb4 */
5618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_INT_2ADDR.S */
5619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* idivmod returns quotient in r0 and remainder in r1 */
5620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */
5621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
5623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
5624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
5629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
5631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
5632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
5633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
5634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
5637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
5638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
5639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vB
5640a5069fb7eb2da846ff1fc2c903ebd8ce9fa3647fAndy McFadden    GET_VREG(r0, r9)                    @ r0<- vA
5641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 1
5642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
5643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
5646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
5648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_idivmod                              @ r1<- op, r0-r3 changed
5649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r1, r9)               @ vAA<- r1
5651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
5653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_2ADDR: /* 0xb5 */
5658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AND_INT_2ADDR.S */
5659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */
5660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
5662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
5663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
5668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
5670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
5671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
5672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
5673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
5676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
5677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
5678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vB
5679a5069fb7eb2da846ff1fc2c903ebd8ce9fa3647fAndy McFadden    GET_VREG(r0, r9)                    @ r0<- vA
5680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
5682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
5685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
5687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r0, r0, r1                              @ r0<- op, r0-r3 changed
5688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
5690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
5692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_2ADDR: /* 0xb6 */
5697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_OR_INT_2ADDR.S */
5698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */
5699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
5701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
5702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
5707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
5709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
5710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
5711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
5712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
5715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
5716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
5717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vB
5718a5069fb7eb2da846ff1fc2c903ebd8ce9fa3647fAndy McFadden    GET_VREG(r0, r9)                    @ r0<- vA
5719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
5721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
5724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
5726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r0, r0, r1                              @ r0<- op, r0-r3 changed
5727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
5729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
5731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_2ADDR: /* 0xb7 */
5736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_XOR_INT_2ADDR.S */
5737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */
5738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
5740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
5741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
5746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
5748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
5749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
5750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
5751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
5754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
5755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
5756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vB
5757a5069fb7eb2da846ff1fc2c903ebd8ce9fa3647fAndy McFadden    GET_VREG(r0, r9)                    @ r0<- vA
5758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
5760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
5763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
5765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    eor     r0, r0, r1                              @ r0<- op, r0-r3 changed
5766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
5768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
5770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT_2ADDR: /* 0xb8 */
5775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHL_INT_2ADDR.S */
5776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */
5777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
5779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
5780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
5785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
5787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
5788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
5789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
5790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
5793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
5794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
5795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vB
5796a5069fb7eb2da846ff1fc2c903ebd8ce9fa3647fAndy McFadden    GET_VREG(r0, r9)                    @ r0<- vA
5797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
5799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
5802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r1, r1, #31                           @ optional op; may set condition codes
5804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, asl r1                              @ r0<- op, r0-r3 changed
5805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
5807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
5809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT_2ADDR: /* 0xb9 */
5814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHR_INT_2ADDR.S */
5815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */
5816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
5818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
5819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
5824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
5826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
5827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
5828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
5829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
5832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
5833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
5834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vB
5835a5069fb7eb2da846ff1fc2c903ebd8ce9fa3647fAndy McFadden    GET_VREG(r0, r9)                    @ r0<- vA
5836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
5838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
5841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r1, r1, #31                           @ optional op; may set condition codes
5843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, asr r1                              @ r0<- op, r0-r3 changed
5844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
5846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
5848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT_2ADDR: /* 0xba */
5853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_USHR_INT_2ADDR.S */
5854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */
5855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
5857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
5858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
5863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
5865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
5866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
5867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
5868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
5871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
5872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
5873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vB
5874a5069fb7eb2da846ff1fc2c903ebd8ce9fa3647fAndy McFadden    GET_VREG(r0, r9)                    @ r0<- vA
5875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
5877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
5880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r1, r1, #31                           @ optional op; may set condition codes
5882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, lsr r1                              @ r0<- op, r0-r3 changed
5883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
5885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
5887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_LONG_2ADDR: /* 0xbb */
5892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_LONG_2ADDR.S */
5893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */
5894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
5896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0-r1 op r2-r3".
5897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
5902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr,
5904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr,
5905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-double/2addr, mul-double/2addr, div-double/2addr,
5906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double/2addr
5907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
5910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
5911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
5912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r1, rFP, r1, lsl #2         @ r1<- &fp[B]
5913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
5914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r1, {r2-r3}                 @ r2/r3<- vBB/vBB+1
5915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r9, {r0-r1}                 @ r0/r1<- vAA/vAA+1
5916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
5918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
5921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    adds    r0, r0, r2                           @ optional op; may set condition codes
5923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    adc     r1, r1, r3                              @ result<- op, r0-r3 changed
5924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
5926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 12-15 instructions */
5928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_LONG_2ADDR: /* 0xbc */
5933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_LONG_2ADDR.S */
5934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */
5935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
5937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0-r1 op r2-r3".
5938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
5939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
5940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
5942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
5943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr,
5945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr,
5946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-double/2addr, mul-double/2addr, div-double/2addr,
5947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double/2addr
5948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
5950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
5951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
5952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
5953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r1, rFP, r1, lsl #2         @ r1<- &fp[B]
5954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
5955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r1, {r2-r3}                 @ r2/r3<- vBB/vBB+1
5956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r9, {r0-r1}                 @ r0/r1<- vAA/vAA+1
5957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
5958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
5959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
5960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
5961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
5962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    subs    r0, r0, r2                           @ optional op; may set condition codes
5964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sbc     r1, r1, r3                              @ result<- op, r0-r3 changed
5965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
5967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
5968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 12-15 instructions */
5969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
5972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
5973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_LONG_2ADDR: /* 0xbd */
5974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_LONG_2ADDR.S */
5975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Signed 64-bit integer multiply, "/2addr" version.
5977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * See OP_MUL_LONG for an explanation.
5979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * We get a little tight on registers, so to avoid looking up &fp[A]
5981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * again we stuff it into rINST.
5982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
5983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* mul-long/2addr vA, vB */
5984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
5985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
5986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
5987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r1, rFP, r1, lsl #2         @ r1<- &fp[B]
5988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     rINST, rFP, r9, lsl #2      @ rINST<- &fp[A]
5989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r1, {r2-r3}                 @ r2/r3<- vBB/vBB+1
5990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   rINST, {r0-r1}              @ r0/r1<- vAA/vAA+1
5991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mul     ip, r2, r1                  @  ip<- ZxW
5992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    umull   r9, r10, r2, r0             @  r9/r10 <- ZxX
5993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mla     r2, r0, r3, ip              @  r2<- YxX + (ZxW)
5994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST                   @ r0<- &fp[A] (free up rINST)
5995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
5996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r10, r2, r10                @  r10<- r10 + low(ZxW + (YxX))
5997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
5998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r0, {r9-r10}                @ vAA/vAA+1<- r9/r10
5999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_LONG_2ADDR: /* 0xbe */
6004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_LONG_2ADDR.S */
6005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */
6006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
6008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0-r1 op r2-r3".
6009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr,
6016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr,
6017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-double/2addr, mul-double/2addr, div-double/2addr,
6018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double/2addr
6019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
6021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
6023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r1, rFP, r1, lsl #2         @ r1<- &fp[B]
6025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
6026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r1, {r2-r3}                 @ r2/r3<- vBB/vBB+1
6027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r9, {r0-r1}                 @ r0/r1<- vAA/vAA+1
6028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 1
6029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
6030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
6033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
6035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_ldivmod                              @ result<- op, r0-r3 changed
6036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
6038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 12-15 instructions */
6040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_LONG_2ADDR: /* 0xbf */
6045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_LONG_2ADDR.S */
6046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ldivmod returns quotient in r0/r1 and remainder in r2/r3 */
6047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */
6048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
6050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0-r1 op r2-r3".
6051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr,
6058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr,
6059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-double/2addr, mul-double/2addr, div-double/2addr,
6060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double/2addr
6061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
6063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
6065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r1, rFP, r1, lsl #2         @ r1<- &fp[B]
6067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
6068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r1, {r2-r3}                 @ r2/r3<- vBB/vBB+1
6069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r9, {r0-r1}                 @ r0/r1<- vAA/vAA+1
6070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 1
6071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
6072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
6075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
6077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_ldivmod                              @ result<- op, r0-r3 changed
6078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r2,r3}     @ vAA/vAA+1<- r2/r3
6080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 12-15 instructions */
6082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_LONG_2ADDR: /* 0xc0 */
6087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AND_LONG_2ADDR.S */
6088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */
6089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
6091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0-r1 op r2-r3".
6092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr,
6099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr,
6100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-double/2addr, mul-double/2addr, div-double/2addr,
6101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double/2addr
6102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
6104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
6106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r1, rFP, r1, lsl #2         @ r1<- &fp[B]
6108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
6109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r1, {r2-r3}                 @ r2/r3<- vBB/vBB+1
6110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r9, {r0-r1}                 @ r0/r1<- vAA/vAA+1
6111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
6112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
6113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
6116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r0, r0, r2                           @ optional op; may set condition codes
6118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r1, r1, r3                              @ result<- op, r0-r3 changed
6119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
6121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 12-15 instructions */
6123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_LONG_2ADDR: /* 0xc1 */
6128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_OR_LONG_2ADDR.S */
6129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */
6130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
6132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0-r1 op r2-r3".
6133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr,
6140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr,
6141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-double/2addr, mul-double/2addr, div-double/2addr,
6142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double/2addr
6143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
6145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
6147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r1, rFP, r1, lsl #2         @ r1<- &fp[B]
6149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
6150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r1, {r2-r3}                 @ r2/r3<- vBB/vBB+1
6151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r9, {r0-r1}                 @ r0/r1<- vAA/vAA+1
6152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
6153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
6154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
6157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r0, r0, r2                           @ optional op; may set condition codes
6159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r1, r1, r3                              @ result<- op, r0-r3 changed
6160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
6162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 12-15 instructions */
6164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_LONG_2ADDR: /* 0xc2 */
6169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_XOR_LONG_2ADDR.S */
6170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */
6171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
6173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0-r1 op r2-r3".
6174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr,
6181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr,
6182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-double/2addr, mul-double/2addr, div-double/2addr,
6183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double/2addr
6184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
6186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
6188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r1, rFP, r1, lsl #2         @ r1<- &fp[B]
6190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
6191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r1, {r2-r3}                 @ r2/r3<- vBB/vBB+1
6192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r9, {r0-r1}                 @ r0/r1<- vAA/vAA+1
6193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
6194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
6195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
6198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    eor     r0, r0, r2                           @ optional op; may set condition codes
6200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    eor     r1, r1, r3                              @ result<- op, r0-r3 changed
6201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
6203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 12-15 instructions */
6205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_LONG_2ADDR: /* 0xc3 */
6210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHL_LONG_2ADDR.S */
6211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Long integer shift, 2addr version.  vA is 64-bit value/result, vB is
6213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 32-bit shift distance.
6214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* shl-long/2addr vA, vB */
6216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
6218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r3)                    @ r2<- vB
6220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
6221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r2, #63                 @ r2<- r2 & 0x3f
6222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r9, {r0-r1}                 @ r0/r1<- vAA/vAA+1
6223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r1, asl r2              @  r1<- r1 << r2
6225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    rsb     r3, r2, #32                 @  r3<- 32 - r2
6226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r1, r1, r0, lsr r3          @  r1<- r1 | (r0 << (32-r2))
6227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    subs    ip, r2, #32                 @  ip<- r2 - 32
6228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
6229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movpl   r1, r0, asl ip              @  if r2 >= 32, r1<- r0 << (r2-32)
6230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, asl r2              @  r0<- r0 << r2
6231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       .LOP_SHL_LONG_2ADDR_finish
6232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_LONG_2ADDR: /* 0xc4 */
6236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHR_LONG_2ADDR.S */
6237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Long integer shift, 2addr version.  vA is 64-bit value/result, vB is
6239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 32-bit shift distance.
6240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* shr-long/2addr vA, vB */
6242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
6244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r3)                    @ r2<- vB
6246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
6247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r2, #63                 @ r2<- r2 & 0x3f
6248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r9, {r0-r1}                 @ r0/r1<- vAA/vAA+1
6249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, lsr r2              @  r0<- r2 >> r2
6251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    rsb     r3, r2, #32                 @  r3<- 32 - r2
6252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r0, r0, r1, asl r3          @  r0<- r0 | (r1 << (32-r2))
6253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    subs    ip, r2, #32                 @  ip<- r2 - 32
6254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
6255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movpl   r0, r1, asr ip              @  if r2 >= 32, r0<-r1 >> (r2-32)
6256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r1, asr r2              @  r1<- r1 >> r2
6257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       .LOP_SHR_LONG_2ADDR_finish
6258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_LONG_2ADDR: /* 0xc5 */
6262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_USHR_LONG_2ADDR.S */
6263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Long integer shift, 2addr version.  vA is 64-bit value/result, vB is
6265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 32-bit shift distance.
6266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* ushr-long/2addr vA, vB */
6268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
6270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r3)                    @ r2<- vB
6272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
6273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r2, #63                 @ r2<- r2 & 0x3f
6274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r9, {r0-r1}                 @ r0/r1<- vAA/vAA+1
6275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, lsr r2              @  r0<- r2 >> r2
6277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    rsb     r3, r2, #32                 @  r3<- 32 - r2
6278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r0, r0, r1, asl r3          @  r0<- r0 | (r1 << (32-r2))
6279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    subs    ip, r2, #32                 @  ip<- r2 - 32
6280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
6281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movpl   r0, r1, lsr ip              @  if r2 >= 32, r0<-r1 >>> (r2-32)
6282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r1, lsr r2              @  r1<- r1 >>> r2
6283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       .LOP_USHR_LONG_2ADDR_finish
6284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_FLOAT_2ADDR: /* 0xc6 */
6288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_FLOAT_2ADDR.S */
6289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */
6290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
6292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
6293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
6300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
6301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
6302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
6303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
6305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
6307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vB
6309a5069fb7eb2da846ff1fc2c903ebd8ce9fa3647fAndy McFadden    GET_VREG(r0, r9)                    @ r0<- vA
6310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
6311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
6312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
6315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
6317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_fadd                              @ r0<- op, r0-r3 changed
6318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
6320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
6322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_FLOAT_2ADDR: /* 0xc7 */
6327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_FLOAT_2ADDR.S */
6328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */
6329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
6331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
6332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
6339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
6340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
6341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
6342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
6344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
6346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vB
6348a5069fb7eb2da846ff1fc2c903ebd8ce9fa3647fAndy McFadden    GET_VREG(r0, r9)                    @ r0<- vA
6349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
6350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
6351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
6354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
6356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_fsub                              @ r0<- op, r0-r3 changed
6357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
6359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
6361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_FLOAT_2ADDR: /* 0xc8 */
6366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_FLOAT_2ADDR.S */
6367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */
6368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
6370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
6371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
6378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
6379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
6380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
6381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
6383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
6385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vB
6387a5069fb7eb2da846ff1fc2c903ebd8ce9fa3647fAndy McFadden    GET_VREG(r0, r9)                    @ r0<- vA
6388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
6389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
6390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
6393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
6395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_fmul                              @ r0<- op, r0-r3 changed
6396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
6398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
6400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_FLOAT_2ADDR: /* 0xc9 */
6405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_FLOAT_2ADDR.S */
6406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */
6407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
6409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
6410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
6417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
6418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
6419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
6420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
6422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
6424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vB
6426a5069fb7eb2da846ff1fc2c903ebd8ce9fa3647fAndy McFadden    GET_VREG(r0, r9)                    @ r0<- vA
6427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
6428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
6429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
6432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
6434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_fdiv                              @ r0<- op, r0-r3 changed
6435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
6437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
6439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_FLOAT_2ADDR: /* 0xca */
6444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_FLOAT_2ADDR.S */
6445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* EABI doesn't define a float remainder function, but libm does */
6446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */
6447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
6449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
6450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
6457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
6458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr,
6459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr
6460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
6462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #12          @ r3<- B
6464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r3)                    @ r1<- vB
6466a5069fb7eb2da846ff1fc2c903ebd8ce9fa3647fAndy McFadden    GET_VREG(r0, r9)                    @ r0<- vA
6467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
6468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
6469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
6472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
6474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      fmodf                              @ r0<- op, r0-r3 changed
6475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
6477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
6479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_DOUBLE_2ADDR: /* 0xcb */
6484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_DOUBLE_2ADDR.S */
6485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */
6486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
6488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0-r1 op r2-r3".
6489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr,
6496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr,
6497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-double/2addr, mul-double/2addr, div-double/2addr,
6498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double/2addr
6499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
6501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
6503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r1, rFP, r1, lsl #2         @ r1<- &fp[B]
6505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
6506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r1, {r2-r3}                 @ r2/r3<- vBB/vBB+1
6507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r9, {r0-r1}                 @ r0/r1<- vAA/vAA+1
6508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
6509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
6510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
6513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
6515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_dadd                              @ result<- op, r0-r3 changed
6516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
6518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 12-15 instructions */
6520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_DOUBLE_2ADDR: /* 0xcc */
6525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_DOUBLE_2ADDR.S */
6526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */
6527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
6529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0-r1 op r2-r3".
6530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr,
6537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr,
6538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-double/2addr, mul-double/2addr, div-double/2addr,
6539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double/2addr
6540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
6542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
6544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r1, rFP, r1, lsl #2         @ r1<- &fp[B]
6546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
6547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r1, {r2-r3}                 @ r2/r3<- vBB/vBB+1
6548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r9, {r0-r1}                 @ r0/r1<- vAA/vAA+1
6549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
6550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
6551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
6554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
6556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_dsub                              @ result<- op, r0-r3 changed
6557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
6559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 12-15 instructions */
6561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_DOUBLE_2ADDR: /* 0xcd */
6566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_DOUBLE_2ADDR.S */
6567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */
6568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
6570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0-r1 op r2-r3".
6571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr,
6578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr,
6579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-double/2addr, mul-double/2addr, div-double/2addr,
6580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double/2addr
6581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
6583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
6585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r1, rFP, r1, lsl #2         @ r1<- &fp[B]
6587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
6588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r1, {r2-r3}                 @ r2/r3<- vBB/vBB+1
6589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r9, {r0-r1}                 @ r0/r1<- vAA/vAA+1
6590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
6591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
6592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
6595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
6597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_dmul                              @ result<- op, r0-r3 changed
6598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
6600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 12-15 instructions */
6602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_DOUBLE_2ADDR: /* 0xce */
6607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_DOUBLE_2ADDR.S */
6608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */
6609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
6611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0-r1 op r2-r3".
6612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr,
6619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr,
6620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-double/2addr, mul-double/2addr, div-double/2addr,
6621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double/2addr
6622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
6624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
6626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r1, rFP, r1, lsl #2         @ r1<- &fp[B]
6628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
6629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r1, {r2-r3}                 @ r2/r3<- vBB/vBB+1
6630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r9, {r0-r1}                 @ r0/r1<- vAA/vAA+1
6631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
6632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
6633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
6636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
6638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_ddiv                              @ result<- op, r0-r3 changed
6639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
6641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 12-15 instructions */
6643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_DOUBLE_2ADDR: /* 0xcf */
6648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_DOUBLE_2ADDR.S */
6649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* EABI doesn't define a double remainder function, but libm does */
6650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */
6651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
6653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0-r1 op r2-r3".
6654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr,
6661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr,
6662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      sub-double/2addr, mul-double/2addr, div-double/2addr,
6663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-double/2addr
6664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/2addr vA, vB */
6666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
6668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r1, rFP, r1, lsl #2         @ r1<- &fp[B]
6670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r9, rFP, r9, lsl #2         @ r9<- &fp[A]
6671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r1, {r2-r3}                 @ r2/r3<- vBB/vBB+1
6672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r9, {r0-r1}                 @ r0/r1<- vAA/vAA+1
6673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
6674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orrs    ip, r2, r3                  @ second arg (r2-r3) is zero?
6675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ advance rPC, load rINST
6678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
6680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      fmod                              @ result<- op, r0-r3 changed
6681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r9, {r0,r1}     @ vAA/vAA+1<- r0/r1
6683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 12-15 instructions */
6685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_LIT16: /* 0xd0 */
6690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_INT_LIT16.S */
6691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */
6692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
6694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
6695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16,
6702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16
6703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit16 vA, vB, #+CCCC */
6705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r1, 1)                      @ r1<- ssssCCCC (sign-extended)
6706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #12          @ r2<- B
6707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vB
6709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
6711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
6712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
6715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, r0, r1                              @ r0<- op, r0-r3 changed
6717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
6719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
6721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RSUB_INT: /* 0xd1 */
6726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RSUB_INT.S */
6727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* this op is "rsub-int", but can be thought of as "rsub-int/lit16" */
6728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */
6729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
6731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
6732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16,
6739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16
6740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit16 vA, vB, #+CCCC */
6742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r1, 1)                      @ r1<- ssssCCCC (sign-extended)
6743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #12          @ r2<- B
6744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vB
6746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
6748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
6749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
6752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    rsb     r0, r0, r1                              @ r0<- op, r0-r3 changed
6754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
6756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
6758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_LIT16: /* 0xd2 */
6763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_INT_LIT16.S */
6764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* must be "mul r0, r1, r0" -- "r0, r0, r1" is illegal */
6765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */
6766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
6768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
6769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16,
6776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16
6777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit16 vA, vB, #+CCCC */
6779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r1, 1)                      @ r1<- ssssCCCC (sign-extended)
6780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #12          @ r2<- B
6781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vB
6783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
6785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
6786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
6789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mul     r0, r1, r0                              @ r0<- op, r0-r3 changed
6791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
6793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
6795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_LIT16: /* 0xd3 */
6800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_INT_LIT16.S */
6801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */
6802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
6804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
6805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16,
6812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16
6813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit16 vA, vB, #+CCCC */
6815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r1, 1)                      @ r1<- ssssCCCC (sign-extended)
6816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #12          @ r2<- B
6817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vB
6819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 1
6821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
6822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
6825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl     __aeabi_idiv                              @ r0<- op, r0-r3 changed
6827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
6829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
6831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_LIT16: /* 0xd4 */
6836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_INT_LIT16.S */
6837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* idivmod returns quotient in r0 and remainder in r1 */
6838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */
6839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
6841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
6842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16,
6849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16
6850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit16 vA, vB, #+CCCC */
6852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r1, 1)                      @ r1<- ssssCCCC (sign-extended)
6853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #12          @ r2<- B
6854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vB
6856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 1
6858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
6859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
6862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_idivmod                              @ r1<- op, r0-r3 changed
6864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r1, r9)               @ vAA<- r1
6866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
6868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_LIT16: /* 0xd5 */
6873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AND_INT_LIT16.S */
6874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */
6875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
6877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
6878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16,
6885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16
6886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit16 vA, vB, #+CCCC */
6888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r1, 1)                      @ r1<- ssssCCCC (sign-extended)
6889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #12          @ r2<- B
6890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vB
6892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
6894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
6895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
6898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r0, r0, r1                              @ r0<- op, r0-r3 changed
6900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
6902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
6904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_LIT16: /* 0xd6 */
6909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_OR_INT_LIT16.S */
6910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */
6911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
6913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
6914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16,
6921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16
6922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit16 vA, vB, #+CCCC */
6924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r1, 1)                      @ r1<- ssssCCCC (sign-extended)
6925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #12          @ r2<- B
6926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vB
6928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
6930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
6931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
6934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r0, r0, r1                              @ r0<- op, r0-r3 changed
6936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
6938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
6940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_LIT16: /* 0xd7 */
6945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_XOR_INT_LIT16.S */
6946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */
6947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
6949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
6950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16,
6957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16
6958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit16 vA, vB, #+CCCC */
6960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r1, 1)                      @ r1<- ssssCCCC (sign-extended)
6961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #12          @ r2<- B
6962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- A+
6963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vB
6964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r9, r9, #15
6965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
6966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ is second operand zero?
6967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
6968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
6969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
6970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    eor     r0, r0, r1                              @ r0<- op, r0-r3 changed
6972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
6973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
6974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
6975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-13 instructions */
6976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
6979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
6980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_LIT8: /* 0xd8 */
6981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_INT_LIT8.S */
6982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */
6983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
6984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
6985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
6986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
6987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
6988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
6990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
6991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
6993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
6994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
6995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit8 vAA, vBB, #+CC */
6997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r3, 1)                      @ r3<- ssssCCBB (sign-extended for CC)
6998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
6999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r3, #255                @ r2<- BB
7000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
7001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r1, r3, asr #8              @ r1<- ssssssCC (sign extended)
7002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
7003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @cmp     r1, #0                      @ is second operand zero?
7004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
7005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
7006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
7009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r0, r0, r1                              @ r0<- op, r0-r3 changed
7010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
7011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
7012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
7013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-12 instructions */
7014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RSUB_INT_LIT8: /* 0xd9 */
7019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RSUB_INT_LIT8.S */
7020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */
7021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
7022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
7023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
7024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
7025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
7026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
7028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
7029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
7031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
7032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
7033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
7034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit8 vAA, vBB, #+CC */
7035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r3, 1)                      @ r3<- ssssCCBB (sign-extended for CC)
7036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
7037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r3, #255                @ r2<- BB
7038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
7039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r1, r3, asr #8              @ r1<- ssssssCC (sign extended)
7040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
7041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @cmp     r1, #0                      @ is second operand zero?
7042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
7043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
7044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
7047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    rsb     r0, r0, r1                              @ r0<- op, r0-r3 changed
7048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
7049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
7050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
7051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-12 instructions */
7052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_LIT8: /* 0xda */
7057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_INT_LIT8.S */
7058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* must be "mul r0, r1, r0" -- "r0, r0, r1" is illegal */
7059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */
7060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
7061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
7062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
7063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
7064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
7065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
7067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
7068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
7070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
7071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
7072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
7073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit8 vAA, vBB, #+CC */
7074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r3, 1)                      @ r3<- ssssCCBB (sign-extended for CC)
7075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
7076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r3, #255                @ r2<- BB
7077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
7078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r1, r3, asr #8              @ r1<- ssssssCC (sign extended)
7079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
7080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @cmp     r1, #0                      @ is second operand zero?
7081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
7082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
7083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
7086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mul     r0, r1, r0                              @ r0<- op, r0-r3 changed
7087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
7088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
7089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
7090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-12 instructions */
7091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_LIT8: /* 0xdb */
7096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_INT_LIT8.S */
7097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */
7098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
7099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
7100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
7101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
7102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
7103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
7105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
7106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
7108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
7109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
7110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
7111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit8 vAA, vBB, #+CC */
7112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r3, 1)                      @ r3<- ssssCCBB (sign-extended for CC)
7113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
7114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r3, #255                @ r2<- BB
7115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
7116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r1, r3, asr #8              @ r1<- ssssssCC (sign extended)
7117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 1
7118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @cmp     r1, #0                      @ is second operand zero?
7119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
7120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
7121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
7124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl     __aeabi_idiv                              @ r0<- op, r0-r3 changed
7125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
7126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
7127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
7128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-12 instructions */
7129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_LIT8: /* 0xdc */
7134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_INT_LIT8.S */
7135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* idivmod returns quotient in r0 and remainder in r1 */
7136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */
7137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
7138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
7139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
7140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
7141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
7142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
7144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
7145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
7147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
7148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
7149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
7150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit8 vAA, vBB, #+CC */
7151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r3, 1)                      @ r3<- ssssCCBB (sign-extended for CC)
7152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
7153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r3, #255                @ r2<- BB
7154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
7155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r1, r3, asr #8              @ r1<- ssssssCC (sign extended)
7156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 1
7157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @cmp     r1, #0                      @ is second operand zero?
7158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
7159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
7160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
7163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __aeabi_idivmod                              @ r1<- op, r0-r3 changed
7164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
7165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r1, r9)               @ vAA<- r1
7166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
7167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-12 instructions */
7168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_LIT8: /* 0xdd */
7173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AND_INT_LIT8.S */
7174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */
7175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
7176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
7177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
7178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
7179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
7180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
7182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
7183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
7185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
7186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
7187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
7188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit8 vAA, vBB, #+CC */
7189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r3, 1)                      @ r3<- ssssCCBB (sign-extended for CC)
7190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
7191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r3, #255                @ r2<- BB
7192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
7193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r1, r3, asr #8              @ r1<- ssssssCC (sign extended)
7194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
7195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @cmp     r1, #0                      @ is second operand zero?
7196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
7197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
7198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
7201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r0, r0, r1                              @ r0<- op, r0-r3 changed
7202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
7203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
7204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
7205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-12 instructions */
7206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_LIT8: /* 0xde */
7211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_OR_INT_LIT8.S */
7212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */
7213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
7214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
7215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
7216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
7217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
7218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
7220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
7221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
7223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
7224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
7225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
7226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit8 vAA, vBB, #+CC */
7227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r3, 1)                      @ r3<- ssssCCBB (sign-extended for CC)
7228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
7229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r3, #255                @ r2<- BB
7230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
7231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r1, r3, asr #8              @ r1<- ssssssCC (sign extended)
7232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
7233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @cmp     r1, #0                      @ is second operand zero?
7234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
7235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
7236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
7239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    orr     r0, r0, r1                              @ r0<- op, r0-r3 changed
7240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
7241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
7242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
7243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-12 instructions */
7244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_LIT8: /* 0xdf */
7249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_XOR_INT_LIT8.S */
7250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */
7251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
7252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
7253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
7254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
7255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
7256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
7258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
7259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
7261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
7262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
7263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
7264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit8 vAA, vBB, #+CC */
7265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r3, 1)                      @ r3<- ssssCCBB (sign-extended for CC)
7266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
7267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r3, #255                @ r2<- BB
7268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
7269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r1, r3, asr #8              @ r1<- ssssssCC (sign extended)
7270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
7271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @cmp     r1, #0                      @ is second operand zero?
7272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
7273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
7274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                               @ optional op; may set condition codes
7277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    eor     r0, r0, r1                              @ r0<- op, r0-r3 changed
7278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
7279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
7280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
7281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-12 instructions */
7282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT_LIT8: /* 0xe0 */
7287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHL_INT_LIT8.S */
7288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */
7289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
7290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
7291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
7292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
7293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
7294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
7296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
7297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
7299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
7300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
7301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
7302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit8 vAA, vBB, #+CC */
7303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r3, 1)                      @ r3<- ssssCCBB (sign-extended for CC)
7304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
7305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r3, #255                @ r2<- BB
7306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
7307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r1, r3, asr #8              @ r1<- ssssssCC (sign extended)
7308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
7309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @cmp     r1, #0                      @ is second operand zero?
7310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
7311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
7312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r1, r1, #31                           @ optional op; may set condition codes
7315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, asl r1                              @ r0<- op, r0-r3 changed
7316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
7317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
7318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
7319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-12 instructions */
7320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT_LIT8: /* 0xe1 */
7325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHR_INT_LIT8.S */
7326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */
7327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
7328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
7329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
7330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
7331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
7332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
7334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
7335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
7337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
7338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
7339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
7340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit8 vAA, vBB, #+CC */
7341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r3, 1)                      @ r3<- ssssCCBB (sign-extended for CC)
7342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
7343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r3, #255                @ r2<- BB
7344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
7345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r1, r3, asr #8              @ r1<- ssssssCC (sign extended)
7346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
7347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @cmp     r1, #0                      @ is second operand zero?
7348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
7349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
7350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r1, r1, #31                           @ optional op; may set condition codes
7353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, asr r1                              @ r0<- op, r0-r3 changed
7354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
7355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
7356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
7357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-12 instructions */
7358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT_LIT8: /* 0xe2 */
7363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_USHR_INT_LIT8.S */
7364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */
7365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
7366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
7367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * that specifies an instruction that performs "result = r0 op r1".
7368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This could be an ARM instruction or a function call.  (If the result
7369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * comes back in a register other than r0, you can override "result".)
7370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If "chkzero" is set to 1, we perform a divide-by-zero check on
7372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * vCC (r1).  Useful for integer division and modulus.
7373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
7375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
7376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
7377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
7378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* binop/lit8 vAA, vBB, #+CC */
7379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_S(r3, 1)                      @ r3<- ssssCCBB (sign-extended for CC)
7380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, rINST, lsr #8           @ r9<- AA
7381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r3, #255                @ r2<- BB
7382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- vBB
7383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r1, r3, asr #8              @ r1<- ssssssCC (sign extended)
7384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if 0
7385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @cmp     r1, #0                      @ is second operand zero?
7386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errDivideByZero
7387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
7388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r1, r1, #31                           @ optional op; may set condition codes
7391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0, lsr r1                              @ r0<- op, r0-r3 changed
7392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
7393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r9)               @ vAA<- r0
7394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
7395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* 10-12 instructions */
7396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7400c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_IGET_VOLATILE: /* 0xe3 */
7401c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden/* File: armv5te/OP_IGET_VOLATILE.S */
7402c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden/* File: armv5te/OP_IGET.S */
7403c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /*
7404c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     * General 32-bit instance field get.
7405c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     *
7406c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
7407c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     */
7408c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /* op vA, vB, field@CCCC */
7409c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    mov     r0, rINST, lsr #12          @ r0<- B
74109f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
7411c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    FETCH(r1, 1)                        @ r1<- field ref CCCC
7412c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
7413c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
7414c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
7415c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    cmp     r0, #0                      @ is resolved entry null?
7416c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    bne     .LOP_IGET_VOLATILE_finish          @ no, already resolved
74179f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
7418c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    EXPORT_PC()                         @ resolve() could throw
7419c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
7420c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
7421c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    cmp     r0, #0
7422c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    bne     .LOP_IGET_VOLATILE_finish
7423c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    b       common_exceptionThrown
7424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7428c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_IPUT_VOLATILE: /* 0xe4 */
7429c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden/* File: armv5te/OP_IPUT_VOLATILE.S */
7430c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden/* File: armv5te/OP_IPUT.S */
7431c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /*
7432c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     * General 32-bit instance field put.
7433c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     *
7434919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee     * for: iput, iput-boolean, iput-byte, iput-char, iput-short
7435c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     */
7436c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /* op vA, vB, field@CCCC */
7437c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    mov     r0, rINST, lsr #12          @ r0<- B
74389f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
7439c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    FETCH(r1, 1)                        @ r1<- field ref CCCC
7440c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
7441c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
7442c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
7443c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    cmp     r0, #0                      @ is resolved entry null?
7444c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    bne     .LOP_IPUT_VOLATILE_finish          @ no, already resolved
74459f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
7446c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    EXPORT_PC()                         @ resolve() could throw
7447c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
7448c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
7449c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    cmp     r0, #0                      @ success?
7450c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    bne     .LOP_IPUT_VOLATILE_finish          @ yes, finish up
7451c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    b       common_exceptionThrown
7452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7456c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_SGET_VOLATILE: /* 0xe5 */
7457c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden/* File: armv5te/OP_SGET_VOLATILE.S */
7458c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden/* File: armv5te/OP_SGET.S */
7459c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /*
7460c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     * General 32-bit SGET handler.
7461c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     *
7462c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
7463c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     */
7464c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /* op vAA, field@BBBB */
74659f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
7466c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    FETCH(r1, 1)                        @ r1<- field ref BBBB
7467c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
7468c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
7469c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    cmp     r0, #0                      @ is resolved entry null?
7470c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    beq     .LOP_SGET_VOLATILE_resolve         @ yes, do resolve
7471c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.LOP_SGET_VOLATILE_finish: @ field ptr in r0
7472c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r1, [r0, #offStaticField_value] @ r1<- field value
74730890e5bf0b2a502ca1030e9773fabc16ef1b5981Andy McFadden    SMP_DMB                            @ acquiring load
7474c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    mov     r2, rINST, lsr #8           @ r2<- AA
7475c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7476c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    SET_VREG(r1, r2)                    @ fp[AA]<- r1
7477c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
7478c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    GOTO_OPCODE(ip)                     @ jump to next instruction
7479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7483c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_SPUT_VOLATILE: /* 0xe6 */
7484c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden/* File: armv5te/OP_SPUT_VOLATILE.S */
7485c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden/* File: armv5te/OP_SPUT.S */
7486c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /*
7487c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     * General 32-bit SPUT handler.
7488c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     *
7489919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee     * for: sput, sput-boolean, sput-byte, sput-char, sput-short
7490c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     */
7491c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /* op vAA, field@BBBB */
74929f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
7493c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    FETCH(r1, 1)                        @ r1<- field ref BBBB
7494c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
7495c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
7496c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    cmp     r0, #0                      @ is resolved entry null?
7497c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    beq     .LOP_SPUT_VOLATILE_resolve         @ yes, do resolve
7498c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.LOP_SPUT_VOLATILE_finish:   @ field ptr in r0
7499c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    mov     r2, rINST, lsr #8           @ r2<- AA
7500c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7501c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    GET_VREG(r1, r2)                    @ r1<- fp[AA]
7502c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
75030890e5bf0b2a502ca1030e9773fabc16ef1b5981Andy McFadden    SMP_DMB                            @ releasing store
7504c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    str     r1, [r0, #offStaticField_value] @ field<- vAA
7505c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    GOTO_OPCODE(ip)                     @ jump to next instruction
7506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7510c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_IGET_OBJECT_VOLATILE: /* 0xe7 */
7511c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden/* File: armv5te/OP_IGET_OBJECT_VOLATILE.S */
7512c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden/* File: armv5te/OP_IGET.S */
7513c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /*
7514c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     * General 32-bit instance field get.
7515c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     *
7516c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
7517c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     */
7518c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /* op vA, vB, field@CCCC */
7519c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    mov     r0, rINST, lsr #12          @ r0<- B
75209f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
7521c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    FETCH(r1, 1)                        @ r1<- field ref CCCC
7522c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
7523c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
7524c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
7525c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    cmp     r0, #0                      @ is resolved entry null?
7526c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    bne     .LOP_IGET_OBJECT_VOLATILE_finish          @ no, already resolved
75279f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
7528c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    EXPORT_PC()                         @ resolve() could throw
7529c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
7530c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
7531c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    cmp     r0, #0
7532c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    bne     .LOP_IGET_OBJECT_VOLATILE_finish
7533c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    b       common_exceptionThrown
7534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
75385387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_IGET_WIDE_VOLATILE: /* 0xe8 */
75395387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden/* File: armv5te/OP_IGET_WIDE_VOLATILE.S */
75405387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden/* File: armv5te/OP_IGET_WIDE.S */
75415387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    /*
75425387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden     * Wide 32-bit instance field get.
75435387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden     */
75445387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    /* iget-wide vA, vB, field@CCCC */
75455387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    mov     r0, rINST, lsr #12          @ r0<- B
75469f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
75475387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    FETCH(r1, 1)                        @ r1<- field ref CCCC
75485387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pResFields
75495387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
75505387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
75515387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    cmp     r0, #0                      @ is resolved entry null?
75525387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    bne     .LOP_IGET_WIDE_VOLATILE_finish          @ no, already resolved
75539f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method] @ r2<- current method
75545387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    EXPORT_PC()                         @ resolve() could throw
75555387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
75565387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
75575387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    cmp     r0, #0
75585387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    bne     .LOP_IGET_WIDE_VOLATILE_finish
75595387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    b       common_exceptionThrown
7560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
75645387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_IPUT_WIDE_VOLATILE: /* 0xe9 */
75655387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden/* File: armv5te/OP_IPUT_WIDE_VOLATILE.S */
75665387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden/* File: armv5te/OP_IPUT_WIDE.S */
75675387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    /* iput-wide vA, vB, field@CCCC */
75685387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    mov     r0, rINST, lsr #12          @ r0<- B
75699f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
75705387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    FETCH(r1, 1)                        @ r1<- field ref CCCC
75715387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pResFields
75725387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
75735387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
75745387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    cmp     r0, #0                      @ is resolved entry null?
75755387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    bne     .LOP_IPUT_WIDE_VOLATILE_finish          @ no, already resolved
75769f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method] @ r2<- current method
75775387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    EXPORT_PC()                         @ resolve() could throw
75785387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
75795387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
75805387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    cmp     r0, #0                      @ success?
75815387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    bne     .LOP_IPUT_WIDE_VOLATILE_finish          @ yes, finish up
75825387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    b       common_exceptionThrown
7583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
75875387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_SGET_WIDE_VOLATILE: /* 0xea */
75885387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden/* File: armv5te/OP_SGET_WIDE_VOLATILE.S */
75895387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden/* File: armv5te/OP_SGET_WIDE.S */
75905387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    /*
75915387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden     * 64-bit SGET handler.
75925387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden     */
75935387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    /* sget-wide vAA, field@BBBB */
75949f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
75955387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    FETCH(r1, 1)                        @ r1<- field ref BBBB
75965387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
75975387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
75985387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    cmp     r0, #0                      @ is resolved entry null?
75995387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    beq     .LOP_SGET_WIDE_VOLATILE_resolve         @ yes, do resolve
76005387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.LOP_SGET_WIDE_VOLATILE_finish:
7601861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    mov     r9, rINST, lsr #8           @ r9<- AA
7602861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    .if 1
7603861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    add     r0, r0, #offStaticField_value @ r0<- pointer to data
76046e10b9aaa72425a4825a25f0043533d0c6fdbba4Andy McFadden    bl      dvmQuasiAtomicRead64        @ r0/r1<- contents of field
7605861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    .else
7606861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    ldrd    r0, [r0, #offStaticField_value] @ r0/r1<- field value (aligned)
7607861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    .endif
7608861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
76095387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7610861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    stmia   r9, {r0-r1}                 @ vAA/vAA+1<- r0/r1
76115387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
76125387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    GOTO_OPCODE(ip)                     @ jump to next instruction
7613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
76175387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_SPUT_WIDE_VOLATILE: /* 0xeb */
76185387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden/* File: armv5te/OP_SPUT_WIDE_VOLATILE.S */
76195387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden/* File: armv5te/OP_SPUT_WIDE.S */
76205387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    /*
76215387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden     * 64-bit SPUT handler.
76225387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden     */
76235387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    /* sput-wide vAA, field@BBBB */
76249f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r0, [rSELF, #offThread_methodClassDex]  @ r0<- DvmDex
76255387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    FETCH(r1, 1)                        @ r1<- field ref BBBB
7626861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    ldr     r0, [r0, #offDvmDex_pResFields] @ r0<- dvmDex->pResFields
76275387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    mov     r9, rINST, lsr #8           @ r9<- AA
7628861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    ldr     r2, [r0, r1, lsl #2]        @ r2<- resolved StaticField ptr
76295387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
7630861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    cmp     r2, #0                      @ is resolved entry null?
76315387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    beq     .LOP_SPUT_WIDE_VOLATILE_resolve         @ yes, do resolve
7632861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden.LOP_SPUT_WIDE_VOLATILE_finish: @ field ptr in r2, AA in r9
76335387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7634861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    ldmia   r9, {r0-r1}                 @ r0/r1<- vAA/vAA+1
7635861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    GET_INST_OPCODE(r10)                @ extract opcode from rINST
7636861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    .if 1
7637861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    add     r2, r2, #offStaticField_value @ r2<- pointer to data
76386e10b9aaa72425a4825a25f0043533d0c6fdbba4Andy McFadden    bl      dvmQuasiAtomicSwap64        @ stores r0/r1 into addr r2
7639861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    .else
7640861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    strd    r0, [r2, #offStaticField_value] @ field<- vAA/vAA+1
7641861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    .endif
7642861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden    GOTO_OPCODE(r10)                    @ jump to next instruction
7643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
764796516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden.L_OP_BREAKPOINT: /* 0xec */
764896516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden/* File: armv5te/OP_BREAKPOINT.S */
7649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */
7650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      common_abort
7651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
76553a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden.L_OP_THROW_VERIFICATION_ERROR: /* 0xed */
76563a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden/* File: armv5te/OP_THROW_VERIFICATION_ERROR.S */
76573a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden    /*
76583a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden     * Handle a throw-verification-error instruction.  This throws an
76593a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden     * exception for an error discovered during verification.  The
76603a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden     * exception is indicated by AA, with some detail provided by BBBB.
76613a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden     */
76623a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden    /* op AA, ref@BBBB */
76639f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r0, [rSELF, #offThread_method]    @ r0<- self->method
76643a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden    FETCH(r2, 1)                        @ r2<- BBBB
7665b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden    EXPORT_PC()                         @ export the PC
76663a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden    mov     r1, rINST, lsr #8           @ r1<- AA
76673a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden    bl      dvmThrowVerificationError   @ always throws
76683a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden    b       common_exceptionThrown      @ handle exception
7669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_EXECUTE_INLINE: /* 0xee */
7673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_EXECUTE_INLINE.S */
7674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
7675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Execute a "native inline" instruction.
7676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7677b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden     * We need to call an InlineOp4Func:
7678b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden     *  bool (func)(u4 arg0, u4 arg1, u4 arg2, u4 arg3, JValue* pResult)
7679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7680b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden     * The first four args are in r0-r3, pointer to return value storage
7681b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden     * is on the stack.  The function's return value is a flag that tells
7682b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden     * us if an exception was thrown.
7683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
7684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* [opt] execute-inline vAA, {vC, vD, vE, vF}, inline@BBBB */
7685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r10, 1)                       @ r10<- BBBB
76869f601a917c8878204482c37aec7005054b6776fabuzbee    add     r1, rSELF, #offThread_retval  @ r1<- &self->retval
7687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ can throw
7688b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden    sub     sp, sp, #8                  @ make room for arg, +64 bit align
7689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #12          @ r0<- B
76909f601a917c8878204482c37aec7005054b6776fabuzbee    str     r1, [sp]                    @ push &self->retval
7691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      .LOP_EXECUTE_INLINE_continue        @ make call; will return after
7692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     sp, sp, #8                  @ pop stack
7693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ test boolean result of inline
7694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_exceptionThrown      @ returned false, handle exception
7695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(3)               @ advance rPC, load rINST
7696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
7697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
7698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7701b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden.L_OP_EXECUTE_INLINE_RANGE: /* 0xef */
7702b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden/* File: armv5te/OP_EXECUTE_INLINE_RANGE.S */
7703b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden    /*
7704b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden     * Execute a "native inline" instruction, using "/range" semantics.
7705b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden     * Same idea as execute-inline, but we get the args differently.
7706b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden     *
7707b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden     * We need to call an InlineOp4Func:
7708b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden     *  bool (func)(u4 arg0, u4 arg1, u4 arg2, u4 arg3, JValue* pResult)
7709b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden     *
7710b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden     * The first four args are in r0-r3, pointer to return value storage
7711b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden     * is on the stack.  The function's return value is a flag that tells
7712b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden     * us if an exception was thrown.
7713b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden     */
7714b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden    /* [opt] execute-inline/range {vCCCC..v(CCCC+AA-1)}, inline@BBBB */
7715b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden    FETCH(r10, 1)                       @ r10<- BBBB
77169f601a917c8878204482c37aec7005054b6776fabuzbee    add     r1, rSELF, #offThread_retval  @ r1<- &self->retval
7717b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden    EXPORT_PC()                         @ can throw
7718b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden    sub     sp, sp, #8                  @ make room for arg, +64 bit align
7719b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden    mov     r0, rINST, lsr #8           @ r0<- AA
77209f601a917c8878204482c37aec7005054b6776fabuzbee    str     r1, [sp]                    @ push &self->retval
7721b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden    bl      .LOP_EXECUTE_INLINE_RANGE_continue        @ make call; will return after
7722b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden    add     sp, sp, #8                  @ pop stack
7723b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden    cmp     r0, #0                      @ test boolean result of inline
7724b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden    beq     common_exceptionThrown      @ returned false, handle exception
7725b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden    FETCH_ADVANCE_INST(3)               @ advance rPC, load rINST
7726b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
7727b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden    GOTO_OPCODE(ip)                     @ jump to next instruction
7728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7731750d110b62cef538e193b6f91f5239b0c4b63ef1Andy McFadden.L_OP_INVOKE_OBJECT_INIT: /* 0xf0 */
7732750d110b62cef538e193b6f91f5239b0c4b63ef1Andy McFadden/* File: armv5te/OP_INVOKE_OBJECT_INIT.S */
7733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
77346af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden     * Invoke Object.<init> on an object.  In practice we know that
77356af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden     * Object's nullary constructor doesn't do anything, so we just
77366af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden     * skip it (we know a debugger isn't active).
77376af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden     */
77386af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden    FETCH(r0, 2)                        @ r0<- GFED
77396af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden    and     r1, r0, #15                 @ r1<- D
77406af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden    GET_VREG(r0, r1)                    @ r0<- "this" ptr
77416af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden    cmp     r0, #0                      @ check for NULL
77426af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden    beq     common_errNullObject        @ export PC and throw NPE
77436af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden    ldr     r1, [r0, #offObject_clazz]  @ r1<- obj->clazz
77446af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden    ldr     r2, [r1, #offClassObject_accessFlags] @ r2<- clazz->accessFlags
77456af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden    tst     r2, #CLASS_ISFINALIZABLE    @ is this class finalizable?
77466af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden    beq     1f                          @ nope, done
77476af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden    bl      dvmSetFinalizable           @ call dvmSetFinalizable(obj)
77486af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden1:  FETCH_ADVANCE_INST(3)               @ advance to next instr, load rINST
7749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ ip<- opcode from rINST
7750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ execute it
7751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7754291758c5c4902900c6f86794ba8ab9cad9b26197Andy McFadden.L_OP_RETURN_VOID_BARRIER: /* 0xf1 */
7755291758c5c4902900c6f86794ba8ab9cad9b26197Andy McFadden/* File: armv5te/OP_RETURN_VOID_BARRIER.S */
77561df319e3674d993a07bc0ff1f56a5915410b5903Andy McFadden    SMP_DMB_ST
7757291758c5c4902900c6f86794ba8ab9cad9b26197Andy McFadden    b       common_returnFromMethod
7758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_QUICK: /* 0xf2 */
7762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_QUICK.S */
7763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* For: iget-quick, iget-object-quick */
7764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, offset@CCCC */
7765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #12          @ r2<- B
7766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r3, r2)                    @ r3<- object we're operating on
7767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field byte offset
7768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r3, #0                      @ check object for null
7769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- A(+)
7770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ object was null
7771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, r1]                @ r0<- obj.field (always 32 bits)
7772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r2, #15
7774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
7775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r2)                    @ fp[A]<- r0
7776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
7777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_WIDE_QUICK: /* 0xf3 */
7781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_WIDE_QUICK.S */
7782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* iget-wide-quick vA, vB, offset@CCCC */
7783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #12          @ r2<- B
7784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r3, r2)                    @ r3<- object we're operating on
7785b48a4d53bc3349b5c99f8b87a396e7374e2d335cDave Butcher    FETCH(ip, 1)                        @ ip<- field byte offset
7786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r3, #0                      @ check object for null
7787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- A(+)
7788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ object was null
7789b48a4d53bc3349b5c99f8b87a396e7374e2d335cDave Butcher    ldrd    r0, [r3, ip]                @ r0<- obj.field (64 bits, aligned)
7790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r2, #15
7791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r2, lsl #2         @ r3<- &fp[A]
7793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
7794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmia   r3, {r0-r1}                 @ fp[A]<- r0/r1
7795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
7796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_OBJECT_QUICK: /* 0xf4 */
7800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_OBJECT_QUICK.S */
7801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_QUICK.S */
7802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* For: iget-quick, iget-object-quick */
7803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, offset@CCCC */
7804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #12          @ r2<- B
7805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r3, r2)                    @ r3<- object we're operating on
7806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field byte offset
7807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r3, #0                      @ check object for null
7808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- A(+)
7809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ object was null
7810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, r1]                @ r0<- obj.field (always 32 bits)
7811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r2, #15
7813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
7814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG(r0, r2)                    @ fp[A]<- r0
7815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
7816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_QUICK: /* 0xf5 */
7821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_QUICK.S */
7822919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    /* For: iput-quick */
7823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, offset@CCCC */
7824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #12          @ r2<- B
7825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r3, r2)                    @ r3<- fp[B], the object pointer
7826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field byte offset
7827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r3, #0                      @ check object for null
7828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- A(+)
7829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ object was null
7830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r2, #15
7831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- fp[A]
7832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    str     r0, [r3, r1]                @ obj.field (always 32 bits)<- r0
7834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
7835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
7836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_WIDE_QUICK: /* 0xf6 */
7840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_WIDE_QUICK.S */
7841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* iput-wide-quick vA, vB, offset@CCCC */
7842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rINST, lsr #8           @ r0<- A(+)
7843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #12          @ r1<- B
7844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r0, r0, #15
7845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r1)                    @ r2<- fp[B], the object pointer
7846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r0, lsl #2         @ r3<- &fp[A]
7847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r2, #0                      @ check object for null
7848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmia   r3, {r0-r1}                 @ r0/r1<- fp[A]
7849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ object was null
7850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r3, 1)                        @ r3<- field byte offset
7851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    strd    r0, [r2, r3]                @ obj.field (64 bits, aligned)<- r0/r1
7853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
7854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
7855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_OBJECT_QUICK: /* 0xf7 */
7859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_OBJECT_QUICK.S */
7860919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    /* For: iput-object-quick */
7861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vA, vB, offset@CCCC */
7862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #12          @ r2<- B
7863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r3, r2)                    @ r3<- fp[B], the object pointer
7864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- field byte offset
7865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r3, #0                      @ check object for null
7866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- A(+)
7867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ object was null
7868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r2, r2, #15
7869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r2)                    @ r0<- fp[A]
78709f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_cardTable]  @ r2<- card table base
7871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
7872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    str     r0, [r3, r1]                @ obj.field (always 32 bits)<- r0
7873919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    cmp     r0, #0
7874d82097f6b409c5cd48568e54eb701604c3cceb18buzbee    strneb  r2, [r2, r3, lsr #GC_CARD_SHIFT] @ mark card based on obj head
7875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
7876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
7877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_QUICK: /* 0xf8 */
7881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_VIRTUAL_QUICK.S */
7882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
7883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle an optimized virtual method call.
7884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: [opt] invoke-virtual-quick, invoke-virtual-quick/range
7886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
7887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
7888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
7889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r3, 2)                        @ r3<- FEDC or CCCC
7890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
7891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if     (!0)
7892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r3, r3, #15                 @ r3<- C (or stays CCCC)
7893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
7894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r3)                    @ r2<- vC ("this" ptr)
7895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r2, #0                      @ is "this" null?
7896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ null "this", throw exception
7897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offObject_clazz]  @ r2<- thisPtr->clazz
7898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offClassObject_vtable]    @ r2<- thisPtr->clazz->vtable
7899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ invoke must export
7900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r3<- vtable[BBBB]
7901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      common_invokeMethodNoRange @ continue on
7902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_QUICK_RANGE: /* 0xf9 */
7906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_VIRTUAL_QUICK_RANGE.S */
7907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_VIRTUAL_QUICK.S */
7908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
7909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle an optimized virtual method call.
7910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: [opt] invoke-virtual-quick, invoke-virtual-quick/range
7912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
7913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
7914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
7915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r3, 2)                        @ r3<- FEDC or CCCC
7916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
7917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if     (!1)
7918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r3, r3, #15                 @ r3<- C (or stays CCCC)
7919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
7920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r2, r3)                    @ r2<- vC ("this" ptr)
7921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r2, #0                      @ is "this" null?
7922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ null "this", throw exception
7923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offObject_clazz]  @ r2<- thisPtr->clazz
7924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offClassObject_vtable]    @ r2<- thisPtr->clazz->vtable
7925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ invoke must export
7926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r3<- vtable[BBBB]
7927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      common_invokeMethodRange @ continue on
7928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_QUICK: /* 0xfa */
7933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_SUPER_QUICK.S */
7934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
7935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle an optimized "super" method call.
7936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: [opt] invoke-super-quick, invoke-super-quick/range
7938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
7939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
7940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
7941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r10, 2)                       @ r10<- GFED or CCCC
79429f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
7943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if     (!0)
7944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r10, r10, #15               @ r10<- D (or stays CCCC)
7945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
7946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
7947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offMethod_clazz]  @ r2<- method->clazz
7948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ must export for invoke
7949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offClassObject_super]     @ r2<- method->clazz->super
7950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r3, r10)                   @ r3<- "this"
7951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offClassObject_vtable]    @ r2<- ...clazz->super->vtable
7952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r3, #0                      @ null "this" ref?
7953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- super->vtable[BBBB]
7954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ "this" is null, throw exception
7955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      common_invokeMethodNoRange @ continue on
7956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_QUICK_RANGE: /* 0xfb */
7960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_SUPER_QUICK_RANGE.S */
7961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_SUPER_QUICK.S */
7962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
7963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Handle an optimized "super" method call.
7964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: [opt] invoke-super-quick, invoke-super-quick/range
7966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
7967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
7968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
7969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r10, 2)                       @ r10<- GFED or CCCC
79709f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
7971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if     (!1)
7972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r10, r10, #15               @ r10<- D (or stays CCCC)
7973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
7974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 1)                        @ r1<- BBBB
7975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offMethod_clazz]  @ r2<- method->clazz
7976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ must export for invoke
7977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offClassObject_super]     @ r2<- method->clazz->super
7978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r3, r10)                   @ r3<- "this"
7979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offClassObject_vtable]    @ r2<- ...clazz->super->vtable
7980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r3, #0                      @ null "this" ref?
7981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, r1, lsl #2]        @ r0<- super->vtable[BBBB]
7982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ "this" is null, throw exception
7983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      common_invokeMethodRange @ continue on
7984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
7987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
7988c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_IPUT_OBJECT_VOLATILE: /* 0xfc */
7989c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden/* File: armv5te/OP_IPUT_OBJECT_VOLATILE.S */
7990919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee/* File: armv5te/OP_IPUT_OBJECT.S */
7991c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /*
7992919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee     * 32-bit instance field put.
7993c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     *
7994919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee     * for: iput-object, iput-object-volatile
7995c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     */
7996c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /* op vA, vB, field@CCCC */
7997c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    mov     r0, rINST, lsr #12          @ r0<- B
79989f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
7999c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    FETCH(r1, 1)                        @ r1<- field ref CCCC
8000c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
8001c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
8002c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
8003c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    cmp     r0, #0                      @ is resolved entry null?
8004c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    bne     .LOP_IPUT_OBJECT_VOLATILE_finish          @ no, already resolved
80059f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
8006c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    EXPORT_PC()                         @ resolve() could throw
8007c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
8008c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
8009c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    cmp     r0, #0                      @ success?
8010c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    bne     .LOP_IPUT_OBJECT_VOLATILE_finish          @ yes, finish up
8011c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    b       common_exceptionThrown
8012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
8013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
8014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
8015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
8016c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_SGET_OBJECT_VOLATILE: /* 0xfd */
8017c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden/* File: armv5te/OP_SGET_OBJECT_VOLATILE.S */
8018c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden/* File: armv5te/OP_SGET.S */
8019c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /*
8020c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     * General 32-bit SGET handler.
8021c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     *
8022c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
8023c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     */
8024c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /* op vAA, field@BBBB */
80259f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
8026c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    FETCH(r1, 1)                        @ r1<- field ref BBBB
8027c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
8028c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
8029c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    cmp     r0, #0                      @ is resolved entry null?
8030c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    beq     .LOP_SGET_OBJECT_VOLATILE_resolve         @ yes, do resolve
8031c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.LOP_SGET_OBJECT_VOLATILE_finish: @ field ptr in r0
8032c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r1, [r0, #offStaticField_value] @ r1<- field value
80330890e5bf0b2a502ca1030e9773fabc16ef1b5981Andy McFadden    SMP_DMB                            @ acquiring load
8034c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    mov     r2, rINST, lsr #8           @ r2<- AA
8035c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
8036c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    SET_VREG(r1, r2)                    @ fp[AA]<- r1
8037c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
8038c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    GOTO_OPCODE(ip)                     @ jump to next instruction
8039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
8040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
8041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
8042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
8043c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_SPUT_OBJECT_VOLATILE: /* 0xfe */
8044c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden/* File: armv5te/OP_SPUT_OBJECT_VOLATILE.S */
8045919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee/* File: armv5te/OP_SPUT_OBJECT.S */
8046c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /*
8047919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee     * 32-bit SPUT handler for objects
8048c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     *
8049919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee     * for: sput-object, sput-object-volatile
8050c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     */
8051c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /* op vAA, field@BBBB */
80529f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
8053c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    FETCH(r1, 1)                        @ r1<- field ref BBBB
8054c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
8055c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
8056c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    cmp     r0, #0                      @ is resolved entry null?
8057919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    bne     .LOP_SPUT_OBJECT_VOLATILE_finish          @ no, continue
80589f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r9, [rSELF, #offThread_method]    @ r9<- current method
8059919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    EXPORT_PC()                         @ resolve() could throw, so export now
8060d82097f6b409c5cd48568e54eb701604c3cceb18buzbee    ldr     r0, [r9, #offMethod_clazz]  @ r0<- method->clazz
8061919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
8062919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    cmp     r0, #0                      @ success?
8063919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    bne     .LOP_SPUT_OBJECT_VOLATILE_finish          @ yes, finish
8064919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    b       common_exceptionThrown      @ no, handle exception
8065919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee
8066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
8067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
8068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */
8069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
807090f15431b24a4004fab2db70f273155fcd1c42a4Dan Bornstein.L_OP_DISPATCH_FF: /* 0xff */
807190f15431b24a4004fab2db70f273155fcd1c42a4Dan Bornstein/* File: armv5te/OP_DISPATCH_FF.S */
807271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     ip, rINST, lsr #8           @ r9<- extended opcode
807371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     ip, ip, #256                @ add offset for extended opcodes
807471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ go to proper extended handler
8075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
8076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
807771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
8078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .balign 64
807971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_CONST_CLASS_JUMBO: /* 0x100 */
808071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_CONST_CLASS_JUMBO.S */
808171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* const-class/jumbo vBBBB, Class@AAAAAAAA */
808271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r0<- aaaa (lo)
80839f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<-self>methodClassDex
808471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
808571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r2, #offDvmDex_pResClasses]   @ r2<- dvmDex->pResClasses
808671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
808771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r9, 3)                        @ r9<- BBBB
808871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- pResClasses[AAAAaaaa]
808971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ not yet resolved?
809071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_CONST_CLASS_JUMBO_resolve
809171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(4)               @ advance rPC, load rINST
8092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
809371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r9)                    @ vBBBB<- r0
8094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
8095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
809671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
809771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
809871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_CHECK_CAST_JUMBO: /* 0x101 */
809971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_CHECK_CAST_JUMBO.S */
8100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
810171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Check to see if a cast from one class to another is allowed.
8102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
810371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* check-cast/jumbo vBBBB, class@AAAAAAAA */
810471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r0<- aaaa (lo)
810571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 2)                        @ r2<- AAAA (hi)
810671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r3, 3)                        @ r3<- BBBB
810771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r2, r0, r2, lsl #16         @ r2<- AAAAaaaa
810871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r9, r3)                    @ r9<- object
81099f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r0, [rSELF, #offThread_methodClassDex]    @ r0<- pDvmDex
811071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ is object null?
811171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r0, #offDvmDex_pResClasses]    @ r0<- pDvmDex->pResClasses
811271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_CHECK_CAST_JUMBO_okay            @ null obj, cast always succeeds
811371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, [r0, r2, lsl #2]        @ r1<- resolved class
811471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r9, #offObject_clazz]  @ r0<- obj->clazz
811571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r1, #0                      @ have we resolved this before?
811671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_CHECK_CAST_JUMBO_resolve         @ not resolved, do it now
811771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CHECK_CAST_JUMBO_resolved:
811871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, r1                      @ same class (trivial success)?
811971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_CHECK_CAST_JUMBO_fullcheck       @ no, do full check
812071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_CHECK_CAST_JUMBO_okay            @ yes, finish up
8121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
812271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
812371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
812471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_INSTANCE_OF_JUMBO: /* 0x102 */
812571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_INSTANCE_OF_JUMBO.S */
8126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
812771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Check to see if an object reference is an instance of a class.
812871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
812971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Most common situation is a non-null object, being compared against
813071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * an already-resolved class.
813171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
813271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * TODO: convert most of this into a common subroutine, shared with
813371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *       OP_INSTANCE_OF.S.
8134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
813571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* instance-of/jumbo vBBBB, vCCCC, class@AAAAAAAA */
813671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r3, 4)                        @ r3<- vCCCC
813771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r9, 3)                        @ r9<- vBBBB
813871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r0, r3)                    @ r0<- vCCCC (object)
81399f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- pDvmDex
814071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is object null?
814171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_INSTANCE_OF_JUMBO_store           @ null obj, not an instance, store r0
814271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 1)                        @ r1<- aaaa (lo)
814371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r3, 2)                        @ r3<- AAAA (hi)
814471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r2, #offDvmDex_pResClasses]    @ r2<- pDvmDex->pResClasses
814571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r3, r1, r3, lsl #16         @ r3<- AAAAaaaa
814671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, [r2, r3, lsl #2]        @ r1<- resolved class
814771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r0, #offObject_clazz]  @ r0<- obj->clazz
814871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r1, #0                      @ have we resolved this before?
814971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_INSTANCE_OF_JUMBO_resolve         @ not resolved, do it now
815071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_INSTANCE_OF_JUMBO_resolved        @ resolved, continue
8151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
815271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
815371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
815471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_NEW_INSTANCE_JUMBO: /* 0x103 */
815571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_NEW_INSTANCE_JUMBO.S */
8156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
815771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Create a new instance of a class.
8158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
815971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* new-instance/jumbo vBBBB, class@AAAAAAAA */
816071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r0<- aaaa (lo)
816171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
81629f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- pDvmDex
816371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
816471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r3, #offDvmDex_pResClasses]    @ r3<- pDvmDex->pResClasses
816571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, r1, lsl #2]        @ r0<- resolved class
816671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ req'd for init, resolve, alloc
816771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ already resolved?
816871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_NEW_INSTANCE_JUMBO_resolve         @ no, resolve it now
816971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_JUMBO_resolved:   @ r0=class
817071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldrb    r1, [r0, #offClassObject_status]    @ r1<- ClassStatus enum
817171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r1, #CLASS_INITIALIZED      @ has class been initialized?
817271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_NEW_INSTANCE_JUMBO_needinit        @ no, init class now
817371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_JUMBO_initialized: @ r0=class
817471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, #ALLOC_DONT_TRACK       @ flags for alloc call
817571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmAllocObject              @ r0<- new object
817671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_NEW_INSTANCE_JUMBO_finish          @ continue
8177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
817871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
817971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
818071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_NEW_ARRAY_JUMBO: /* 0x104 */
818171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_NEW_ARRAY_JUMBO.S */
818271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
818371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Allocate an array of objects, specified with the array class
818471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * and a count.
818571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
818671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * The verifier guarantees that this is an array class, so we don't
818771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * check for it here.
818871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
818971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* new-array/jumbo vBBBB, vCCCC, class@AAAAAAAA */
819071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 1)                        @ r2<- aaaa (lo)
819171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r3, 2)                        @ r3<- AAAA (hi)
819271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 4)                        @ r0<- vCCCC
819371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r2, r2, r3, lsl #16         @ r2<- AAAAaaaa
81949f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- pDvmDex
819571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r1, r0)                    @ r1<- vCCCC (array length)
819671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r3, #offDvmDex_pResClasses]    @ r3<- pDvmDex->pResClasses
819771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r1, #0                      @ check length
819871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, r2, lsl #2]        @ r0<- resolved class
81998cb0d098d79af61546e275f633325794f4587602buzbee    bmi     common_errNegativeArraySize @ negative length, bail - len in r1
820071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ already resolved?
820171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ req'd for resolve, alloc
820271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_NEW_ARRAY_JUMBO_finish          @ resolved, continue
820371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_NEW_ARRAY_JUMBO_resolve         @ do resolve now
8204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
820571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
820671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
820771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_FILLED_NEW_ARRAY_JUMBO: /* 0x105 */
820871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_FILLED_NEW_ARRAY_JUMBO.S */
8209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
821071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Create a new array with elements filled from registers.
8211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
821271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * TODO: convert most of this into a common subroutine, shared with
821371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *       OP_FILLED_NEW_ARRAY.S.
8214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
821571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* filled-new-array/jumbo {vCCCC..v(CCCC+BBBB-1)}, type@AAAAAAAA */
82169f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- pDvmDex
821771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r0<- aaaa (lo)
821871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
821971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r3, #offDvmDex_pResClasses]    @ r3<- pDvmDex->pResClasses
822071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
822171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, r1, lsl #2]        @ r0<- resolved class
822271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ need for resolve and alloc
822371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ already resolved?
822471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_FILLED_NEW_ARRAY_JUMBO_continue        @ yes, continue on
82259f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r3, [rSELF, #offThread_method] @ r3<- self->method
8226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, #0                      @ r2<- false
8227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r3, #offMethod_clazz]  @ r0<- method->clazz
822871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveClass             @ r0<- call(clazz, ref)
8229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ got null?
8230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_exceptionThrown      @ yes, handle exception
823171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_FILLED_NEW_ARRAY_JUMBO_continue
8232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
823371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
823471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
823571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_JUMBO: /* 0x106 */
823671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IGET_JUMBO.S */
8237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
823871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field get.
823971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
824071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iget/jumbo, iget-object/jumbo, iget-boolean/jumbo, iget-byte/jumbo,
824171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      iget-char/jumbo, iget-short/jumbo
8242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
824371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
824471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 1)                        @ r1<- aaaa (lo)
824571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 2)                        @ r2<- AAAA (hi)
824671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 4)                        @ r0<- CCCC
82479f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
824871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r1, r2, lsl #16         @ r1<- AAAAaaaa
824971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
825071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r9, r0)                    @ r9<- fp[CCCC], the object pointer
825171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
825271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
825371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_IGET_JUMBO_finish          @ no, already resolved
82549f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
825571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw
825671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
825771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
825871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_IGET_JUMBO_resolved        @ resolved, continue
8259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
826071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
826171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
826271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_WIDE_JUMBO: /* 0x107 */
826371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IGET_WIDE_JUMBO.S */
8264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
826571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 64-bit instance field get.
8266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
826771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* iget-wide/jumbo vBBBB, vCCCC, field@AAAAAAAA */
826871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 1)                        @ r1<- aaaa (lo)
826971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 2)                        @ r2<- AAAA (hi)
827071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 4)                        @ r0<- CCCC
82719f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
827271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r1, r2, lsl #16         @ r1<- AAAAaaaa
827371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pResFields
827471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r9, r0)                    @ r9<- fp[CCCC], the object pointer
827571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
827671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
827771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_IGET_WIDE_JUMBO_finish          @ no, already resolved
82789f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method] @ r2<- current method
827971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw
828071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
828171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
828271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_IGET_WIDE_JUMBO_resolved        @ resolved, continue
8283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
828471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
828571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
828671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_OBJECT_JUMBO: /* 0x108 */
828771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IGET_OBJECT_JUMBO.S */
828871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IGET_JUMBO.S */
8289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
829071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field get.
829171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
829271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iget/jumbo, iget-object/jumbo, iget-boolean/jumbo, iget-byte/jumbo,
829371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      iget-char/jumbo, iget-short/jumbo
8294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
829571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
829671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 1)                        @ r1<- aaaa (lo)
829771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 2)                        @ r2<- AAAA (hi)
829871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 4)                        @ r0<- CCCC
82999f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
830071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r1, r2, lsl #16         @ r1<- AAAAaaaa
830171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
830271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r9, r0)                    @ r9<- fp[CCCC], the object pointer
830371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
830471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
830571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_IGET_OBJECT_JUMBO_finish          @ no, already resolved
83069f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
830771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw
830871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
830971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
831071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_IGET_OBJECT_JUMBO_resolved        @ resolved, continue
831171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
8312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
831371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
831471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
831571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_BOOLEAN_JUMBO: /* 0x109 */
831671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IGET_BOOLEAN_JUMBO.S */
831771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao@include "armv5te/OP_IGET_JUMBO.S" { "load":"ldrb", "sqnum":"1" }
831871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IGET_JUMBO.S */
8319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
832071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field get.
8321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
832271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iget/jumbo, iget-object/jumbo, iget-boolean/jumbo, iget-byte/jumbo,
832371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      iget-char/jumbo, iget-short/jumbo
8324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
832571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
832671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 1)                        @ r1<- aaaa (lo)
832771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 2)                        @ r2<- AAAA (hi)
832871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 4)                        @ r0<- CCCC
83299f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
833071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r1, r2, lsl #16         @ r1<- AAAAaaaa
833171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
833271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r9, r0)                    @ r9<- fp[CCCC], the object pointer
833371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
833471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
833571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_IGET_BOOLEAN_JUMBO_finish          @ no, already resolved
83369f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
8337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ resolve() could throw
833871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
833971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
834071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_IGET_BOOLEAN_JUMBO_resolved        @ resolved, continue
8341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
8342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
834371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
834471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
834571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_BYTE_JUMBO: /* 0x10a */
834671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IGET_BYTE_JUMBO.S */
834771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao@include "armv5te/OP_IGET_JUMBO.S" { "load":"ldrsb", "sqnum":"2" }
834871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IGET_JUMBO.S */
8349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
835071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field get.
8351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
835271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iget/jumbo, iget-object/jumbo, iget-boolean/jumbo, iget-byte/jumbo,
835371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      iget-char/jumbo, iget-short/jumbo
8354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
835571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
835671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 1)                        @ r1<- aaaa (lo)
835771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 2)                        @ r2<- AAAA (hi)
835871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 4)                        @ r0<- CCCC
83599f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
836071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r1, r2, lsl #16         @ r1<- AAAAaaaa
836171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
836271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r9, r0)                    @ r9<- fp[CCCC], the object pointer
836371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
836471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
836571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_IGET_BYTE_JUMBO_finish          @ no, already resolved
83669f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
836771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw
836871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
836971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
837071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_IGET_BYTE_JUMBO_resolved        @ resolved, continue
837171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
8372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
837371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
837471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
837571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_CHAR_JUMBO: /* 0x10b */
837671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IGET_CHAR_JUMBO.S */
837771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao@include "armv5te/OP_IGET_JUMBO.S" { "load":"ldrh", "sqnum":"3" }
837871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IGET_JUMBO.S */
8379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
838071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field get.
8381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
838271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iget/jumbo, iget-object/jumbo, iget-boolean/jumbo, iget-byte/jumbo,
838371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      iget-char/jumbo, iget-short/jumbo
8384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
838571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
838671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 1)                        @ r1<- aaaa (lo)
838771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 2)                        @ r2<- AAAA (hi)
838871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 4)                        @ r0<- CCCC
83899f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
839071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r1, r2, lsl #16         @ r1<- AAAAaaaa
839171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
839271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r9, r0)                    @ r9<- fp[CCCC], the object pointer
839371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
839471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
839571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_IGET_CHAR_JUMBO_finish          @ no, already resolved
83969f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
839771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw
839871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
839971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
840071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_IGET_CHAR_JUMBO_resolved        @ resolved, continue
8401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
8402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
840371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
840471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
840571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_SHORT_JUMBO: /* 0x10c */
840671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IGET_SHORT_JUMBO.S */
840771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao@include "armv5te/OP_IGET_JUMBO.S" { "load":"ldrsh", "sqnum":"4" }
840871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IGET_JUMBO.S */
840971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
841071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field get.
841171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
841271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iget/jumbo, iget-object/jumbo, iget-boolean/jumbo, iget-byte/jumbo,
841371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      iget-char/jumbo, iget-short/jumbo
841471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
841571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
841671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 1)                        @ r1<- aaaa (lo)
841771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 2)                        @ r2<- AAAA (hi)
841871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 4)                        @ r0<- CCCC
84199f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
842071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r1, r2, lsl #16         @ r1<- AAAAaaaa
842171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
842271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r9, r0)                    @ r9<- fp[CCCC], the object pointer
842371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
842471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
842571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_IGET_SHORT_JUMBO_finish          @ no, already resolved
84269f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
842771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw
842871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
842971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
843071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_IGET_SHORT_JUMBO_resolved        @ resolved, continue
8431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
8432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
843371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
843471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
843571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_JUMBO: /* 0x10d */
843671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IPUT_JUMBO.S */
8437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
843871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field put.
8439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
844071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iput/jumbo, iput-boolean/jumbo, iput-byte/jumbo, iput-char/jumbo,
844171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      iput-short/jumbo
8442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
844371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
844471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 1)                        @ r1<- aaaa (lo)
844571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 2)                        @ r2<- AAAA (hi)
844671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 4)                        @ r0<- CCCC
84479f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
844871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r1, r2, lsl #16         @ r1<- AAAAaaaa
844971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
845071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r9, r0)                    @ r9<- fp[CCCC], the object pointer
845171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
845271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
845371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_IPUT_JUMBO_finish          @ no, already resolved
84549f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
845571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw
845671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
845771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
845871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_IPUT_JUMBO_resolved        @ resolved, continue
845971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
846071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
846171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
846271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_WIDE_JUMBO: /* 0x10e */
846371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IPUT_WIDE_JUMBO.S */
846471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* iput-wide/jumbo vBBBB, vCCCC, field@AAAAAAAA */
846571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 1)                        @ r1<- aaaa (lo)
846671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 2)                        @ r2<- AAAA (hi)
846771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 4)                        @ r0<- CCCC
84689f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
846971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r1, r2, lsl #16         @ r1<- AAAAaaaa
847071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pResFields
847171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r9, r0)                    @ r9<- fp[B], the object pointer
847271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
847371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
847471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_IPUT_WIDE_JUMBO_finish          @ no, already resolved
84759f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method] @ r2<- current method
847671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw
847771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
847871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
847971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_IPUT_WIDE_JUMBO_resolved        @ resolved, continue
8480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
848171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
848271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
848371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_OBJECT_JUMBO: /* 0x10f */
848471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IPUT_OBJECT_JUMBO.S */
8485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
848671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field put.
848771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
848871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* iput-object/jumbo vBBBB, vCCCC, field@AAAAAAAA */
848971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 1)                        @ r1<- aaaa (lo)
849071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 2)                        @ r2<- AAAA (hi)
849171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 4)                        @ r0<- CCCC
84929f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
849371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r1, r2, lsl #16         @ r1<- AAAAaaaa
849471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
849571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r9, r0)                    @ r9<- fp[CCCC], the object pointer
849671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
849771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
849871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_IPUT_OBJECT_JUMBO_finish          @ no, already resolved
84999f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
850071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw
850171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
850271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
850371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_IPUT_OBJECT_JUMBO_resolved        @ resolved, continue
850471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
850571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
850671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
850771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_BOOLEAN_JUMBO: /* 0x110 */
850871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IPUT_BOOLEAN_JUMBO.S */
850971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao@include "armv5te/OP_IPUT_JUMBO.S" { "store":"strb", "sqnum":"1" }
851071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IPUT_JUMBO.S */
851171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
851271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field put.
8513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
851471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iput/jumbo, iput-boolean/jumbo, iput-byte/jumbo, iput-char/jumbo,
851571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      iput-short/jumbo
8516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
851771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
851871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 1)                        @ r1<- aaaa (lo)
851971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 2)                        @ r2<- AAAA (hi)
852071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 4)                        @ r0<- CCCC
85219f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
852271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r1, r2, lsl #16         @ r1<- AAAAaaaa
852371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
852471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r9, r0)                    @ r9<- fp[CCCC], the object pointer
852571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
852671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
852771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_IPUT_BOOLEAN_JUMBO_finish          @ no, already resolved
85289f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
852971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw
853071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
853171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
853271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_IPUT_BOOLEAN_JUMBO_resolved        @ resolved, continue
8533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
8534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
853571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
853671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
853771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_BYTE_JUMBO: /* 0x111 */
853871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IPUT_BYTE_JUMBO.S */
853971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao@include "armv5te/OP_IPUT_JUMBO.S" { "store":"strb", "sqnum":"2" }
854071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IPUT_JUMBO.S */
8541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
854271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field put.
854371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
854471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iput/jumbo, iput-boolean/jumbo, iput-byte/jumbo, iput-char/jumbo,
854571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      iput-short/jumbo
8546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
854771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
854871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 1)                        @ r1<- aaaa (lo)
854971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 2)                        @ r2<- AAAA (hi)
855071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 4)                        @ r0<- CCCC
85519f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
855271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r1, r2, lsl #16         @ r1<- AAAAaaaa
855371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
855471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r9, r0)                    @ r9<- fp[CCCC], the object pointer
855571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
855671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
855771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_IPUT_BYTE_JUMBO_finish          @ no, already resolved
85589f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
855971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw
856071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
856171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
856271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_IPUT_BYTE_JUMBO_resolved        @ resolved, continue
8563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
8564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
856571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
856671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
856771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_CHAR_JUMBO: /* 0x112 */
856871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IPUT_CHAR_JUMBO.S */
856971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao@include "armv5te/OP_IPUT_JUMBO.S" { "store":"strh", "sqnum":"3" }
857071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IPUT_JUMBO.S */
857171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
857271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field put.
857371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
857471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iput/jumbo, iput-boolean/jumbo, iput-byte/jumbo, iput-char/jumbo,
857571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      iput-short/jumbo
857671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
857771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
857871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 1)                        @ r1<- aaaa (lo)
857971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 2)                        @ r2<- AAAA (hi)
858071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 4)                        @ r0<- CCCC
85819f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
858271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r1, r2, lsl #16         @ r1<- AAAAaaaa
858371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
858471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r9, r0)                    @ r9<- fp[CCCC], the object pointer
858571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
858671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
858771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_IPUT_CHAR_JUMBO_finish          @ no, already resolved
85889f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
858971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw
859071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
859171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
859271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_IPUT_CHAR_JUMBO_resolved        @ resolved, continue
8593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
8594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
859571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
859671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
859771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_SHORT_JUMBO: /* 0x113 */
859871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IPUT_SHORT_JUMBO.S */
859971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao@include "armv5te/OP_IPUT_JUMBO.S" { "store":"strh", "sqnum":"4" }
860071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_IPUT_JUMBO.S */
8601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
860271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit instance field put.
860371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
860471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: iput/jumbo, iput-boolean/jumbo, iput-byte/jumbo, iput-char/jumbo,
860571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      iput-short/jumbo
8606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
860771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, vCCCC, field@AAAAAAAA */
860871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 1)                        @ r1<- aaaa (lo)
860971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 2)                        @ r2<- AAAA (hi)
861071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 4)                        @ r0<- CCCC
86119f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- DvmDex
861271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r1, r2, lsl #16         @ r1<- AAAAaaaa
861371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields
861471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r9, r0)                    @ r9<- fp[CCCC], the object pointer
861571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved InstField ptr
861671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
861771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_IPUT_SHORT_JUMBO_finish          @ no, already resolved
86189f601a917c8878204482c37aec7005054b6776fabuzbee8:  ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
861971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw
862071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
862171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveInstField         @ r0<- resolved InstField ptr
862271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_IPUT_SHORT_JUMBO_resolved        @ resolved, continue
8623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
8624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
862571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
862671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
862771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_JUMBO: /* 0x114 */
862871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SGET_JUMBO.S */
8629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
863071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SGET handler.
863171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
863271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sget/jumbo, sget-object/jumbo, sget-boolean/jumbo, sget-byte/jumbo,
863371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sget-char/jumbo, sget-short/jumbo
8634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
863571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
86369f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
863771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r0<- aaaa (lo)
863871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
863971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
864071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
864171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
864271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
864371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_SGET_JUMBO_resolve         @ yes, do resolve
864471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_JUMBO_finish: @ field ptr in r0
864571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, [r0, #offStaticField_value] @ r1<- field value
864671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ acquiring load
864771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r2<- BBBB
864871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(4)               @ advance rPC, load rINST
864971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r1, r2)                    @ fp[BBBB]<- r1
865071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
865171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
865271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
865371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
865471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
865571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_WIDE_JUMBO: /* 0x115 */
865671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SGET_WIDE_JUMBO.S */
865771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
865871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 64-bit SGET handler.
865971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
866071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* sget-wide/jumbo vBBBB, field@AAAAAAAA */
86619f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
866271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r0<- aaaa (lo)
866371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
866471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
866571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
866671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
866771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
866871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_SGET_WIDE_JUMBO_resolve         @ yes, do resolve
866971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_WIDE_JUMBO_finish:
867071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r9, 3)                        @ r9<- BBBB
867171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldrd    r0, [r0, #offStaticField_value] @ r0/r1<- field value (aligned)
867271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r9, rFP, r9, lsl #2         @ r9<- &fp[BBBB]
867371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(4)               @ advance rPC, load rINST
867471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    stmia   r9, {r0-r1}                 @ vBBBB/vBBBB+1<- r0/r1
867571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
867671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
867771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
867871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
867971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
868071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_OBJECT_JUMBO: /* 0x116 */
868171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SGET_OBJECT_JUMBO.S */
868271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SGET_JUMBO.S */
868371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
868471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SGET handler.
868571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
868671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sget/jumbo, sget-object/jumbo, sget-boolean/jumbo, sget-byte/jumbo,
868771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sget-char/jumbo, sget-short/jumbo
868871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
868971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
86909f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
869171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r0<- aaaa (lo)
869271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
869371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
869471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
869571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
869671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
869771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_SGET_OBJECT_JUMBO_resolve         @ yes, do resolve
869871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_OBJECT_JUMBO_finish: @ field ptr in r0
869971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, [r0, #offStaticField_value] @ r1<- field value
870071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ acquiring load
870171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r2<- BBBB
870271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(4)               @ advance rPC, load rINST
870371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r1, r2)                    @ fp[BBBB]<- r1
870471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
870571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
870671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
870771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
870871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
870971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
871071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_BOOLEAN_JUMBO: /* 0x117 */
871171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SGET_BOOLEAN_JUMBO.S */
871271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SGET_JUMBO.S */
871371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
871471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SGET handler.
871571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
871671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sget/jumbo, sget-object/jumbo, sget-boolean/jumbo, sget-byte/jumbo,
871771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sget-char/jumbo, sget-short/jumbo
871871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
871971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
87209f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
872171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r0<- aaaa (lo)
872271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
872371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
872471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
872571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
872671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
872771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_SGET_BOOLEAN_JUMBO_resolve         @ yes, do resolve
872871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_BOOLEAN_JUMBO_finish: @ field ptr in r0
872971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, [r0, #offStaticField_value] @ r1<- field value
873071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ acquiring load
873171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r2<- BBBB
873271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(4)               @ advance rPC, load rINST
873371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r1, r2)                    @ fp[BBBB]<- r1
873471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
873571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
873671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
873771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
873871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
873971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
874071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_BYTE_JUMBO: /* 0x118 */
874171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SGET_BYTE_JUMBO.S */
874271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SGET_JUMBO.S */
874371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
874471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SGET handler.
874571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
874671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sget/jumbo, sget-object/jumbo, sget-boolean/jumbo, sget-byte/jumbo,
874771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sget-char/jumbo, sget-short/jumbo
874871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
874971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
87509f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
875171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r0<- aaaa (lo)
875271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
875371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
875471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
875571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
875671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
875771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_SGET_BYTE_JUMBO_resolve         @ yes, do resolve
875871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_BYTE_JUMBO_finish: @ field ptr in r0
875971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, [r0, #offStaticField_value] @ r1<- field value
876071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ acquiring load
876171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r2<- BBBB
876271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(4)               @ advance rPC, load rINST
876371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r1, r2)                    @ fp[BBBB]<- r1
876471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
876571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
876671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
876771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
876871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
876971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
877071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_CHAR_JUMBO: /* 0x119 */
877171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SGET_CHAR_JUMBO.S */
877271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SGET_JUMBO.S */
877371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
877471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SGET handler.
877571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
877671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sget/jumbo, sget-object/jumbo, sget-boolean/jumbo, sget-byte/jumbo,
877771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sget-char/jumbo, sget-short/jumbo
877871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
877971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
87809f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
878171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r0<- aaaa (lo)
878271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
878371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
878471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
878571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
878671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
878771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_SGET_CHAR_JUMBO_resolve         @ yes, do resolve
878871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_CHAR_JUMBO_finish: @ field ptr in r0
878971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, [r0, #offStaticField_value] @ r1<- field value
879071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ acquiring load
879171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r2<- BBBB
879271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(4)               @ advance rPC, load rINST
879371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r1, r2)                    @ fp[BBBB]<- r1
879471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
879571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
879671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
879771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
879871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
879971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
880071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_SHORT_JUMBO: /* 0x11a */
880171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SGET_SHORT_JUMBO.S */
880271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SGET_JUMBO.S */
880371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
880471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SGET handler.
880571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
880671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sget/jumbo, sget-object/jumbo, sget-boolean/jumbo, sget-byte/jumbo,
880771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sget-char/jumbo, sget-short/jumbo
880871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
880971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
88109f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
881171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r0<- aaaa (lo)
881271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
881371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
881471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
881571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
881671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
881771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_SGET_SHORT_JUMBO_resolve         @ yes, do resolve
881871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_SHORT_JUMBO_finish: @ field ptr in r0
881971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, [r0, #offStaticField_value] @ r1<- field value
882071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ acquiring load
882171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r2<- BBBB
882271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(4)               @ advance rPC, load rINST
882371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r1, r2)                    @ fp[BBBB]<- r1
882471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
882571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
882671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
882771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
882871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
882971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
883071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_JUMBO: /* 0x11b */
883171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SPUT_JUMBO.S */
883271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
883371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SPUT handler.
883471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
883571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sput/jumbo, sput-boolean/jumbo, sput-byte/jumbo, sput-char/jumbo,
883671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sput-short/jumbo
883771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
883871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
88399f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
884071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r0<- aaaa (lo)
884171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
884271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
884371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
884471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
884571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
884671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_SPUT_JUMBO_resolve         @ yes, do resolve
884771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_JUMBO_finish:   @ field ptr in r0
884871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r2<- BBBB
884971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(4)               @ advance rPC, load rINST
885071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r1, r2)                    @ r1<- fp[BBBB]
885171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
885271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ releasing store
885371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str     r1, [r0, #offStaticField_value] @ field<- vBBBB
885471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
885571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
885671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
885771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
885871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_WIDE_JUMBO: /* 0x11c */
885971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SPUT_WIDE_JUMBO.S */
886071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
886171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 64-bit SPUT handler.
886271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
886371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* sput-wide/jumbo vBBBB, field@AAAAAAAA */
88649f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r0, [rSELF, #offThread_methodClassDex]  @ r0<- DvmDex
886571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 1)                        @ r1<- aaaa (lo)
886671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 2)                        @ r2<- AAAA (hi)
886771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r0, #offDvmDex_pResFields] @ r0<- dvmDex->pResFields
886871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r1, r2, lsl #16         @ r1<- AAAAaaaa
886971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r9, 3)                        @ r9<- BBBB
887071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r0, r1, lsl #2]        @ r2<- resolved StaticField ptr
887171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r9, rFP, r9, lsl #2         @ r9<- &fp[BBBB]
887271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r2, #0                      @ is resolved entry null?
887371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_SPUT_WIDE_JUMBO_resolve         @ yes, do resolve
887471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_WIDE_JUMBO_finish: @ field ptr in r2, BBBB in r9
887571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(4)               @ advance rPC, load rINST
887671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldmia   r9, {r0-r1}                 @ r0/r1<- vBBBB/vBBBB+1
887771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(r10)                @ extract opcode from rINST
887871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    strd    r0, [r2, #offStaticField_value] @ field<- vBBBB/vBBBB+1
887971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(r10)                    @ jump to next instruction
888071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
888171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
888271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
888371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_OBJECT_JUMBO: /* 0x11d */
888471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SPUT_OBJECT_JUMBO.S */
888571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
888671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SPUT handler for objects
888771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
888871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* sput-object/jumbo vBBBB, field@AAAAAAAA */
88899f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
889071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r0<- aaaa (lo)
889171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
889271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
889371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
889471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
889571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
889671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SPUT_OBJECT_JUMBO_finish          @ no, continue
88979f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r9, [rSELF, #offThread_method]    @ r9<- current method
889871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
889971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r9, #offMethod_clazz]  @ r0<- method->clazz
890071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
890171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
890271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SPUT_OBJECT_JUMBO_finish          @ yes, finish
890371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
890471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
890571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
890671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
890771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_BOOLEAN_JUMBO: /* 0x11e */
890871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SPUT_BOOLEAN_JUMBO.S */
890971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SPUT_JUMBO.S */
891071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
891171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SPUT handler.
891271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
891371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sput/jumbo, sput-boolean/jumbo, sput-byte/jumbo, sput-char/jumbo,
891471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sput-short/jumbo
891571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
891671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
89179f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
891871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r0<- aaaa (lo)
891971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
892071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
892171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
892271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
892371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
892471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_SPUT_BOOLEAN_JUMBO_resolve         @ yes, do resolve
892571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_BOOLEAN_JUMBO_finish:   @ field ptr in r0
892671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r2<- BBBB
892771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(4)               @ advance rPC, load rINST
892871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r1, r2)                    @ r1<- fp[BBBB]
892971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
893071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ releasing store
893171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str     r1, [r0, #offStaticField_value] @ field<- vBBBB
893271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
893371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
893471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
893571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
893671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
893771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_BYTE_JUMBO: /* 0x11f */
893871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SPUT_BYTE_JUMBO.S */
893971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SPUT_JUMBO.S */
894071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
894171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SPUT handler.
894271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
894371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sput/jumbo, sput-boolean/jumbo, sput-byte/jumbo, sput-char/jumbo,
894471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sput-short/jumbo
894571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
894671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
89479f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
894871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r0<- aaaa (lo)
894971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
895071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
895171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
895271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
895371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
895471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_SPUT_BYTE_JUMBO_resolve         @ yes, do resolve
895571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_BYTE_JUMBO_finish:   @ field ptr in r0
895671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r2<- BBBB
895771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(4)               @ advance rPC, load rINST
895871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r1, r2)                    @ r1<- fp[BBBB]
895971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
896071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ releasing store
896171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str     r1, [r0, #offStaticField_value] @ field<- vBBBB
896271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
896371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
896471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
896571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
896671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
896771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_CHAR_JUMBO: /* 0x120 */
896871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SPUT_CHAR_JUMBO.S */
896971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SPUT_JUMBO.S */
897071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
897171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SPUT handler.
897271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
897371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sput/jumbo, sput-boolean/jumbo, sput-byte/jumbo, sput-char/jumbo,
897471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sput-short/jumbo
897571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
897671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
89779f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
897871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r0<- aaaa (lo)
897971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
898071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
898171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
898271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
898371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
898471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_SPUT_CHAR_JUMBO_resolve         @ yes, do resolve
898571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_CHAR_JUMBO_finish:   @ field ptr in r0
898671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r2<- BBBB
898771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(4)               @ advance rPC, load rINST
898871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r1, r2)                    @ r1<- fp[BBBB]
898971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
899071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ releasing store
899171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str     r1, [r0, #offStaticField_value] @ field<- vBBBB
899271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
899371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
899471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
899571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
899671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
899771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_SHORT_JUMBO: /* 0x121 */
899871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SPUT_SHORT_JUMBO.S */
899971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_SPUT_JUMBO.S */
900071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
900171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Jumbo 32-bit SPUT handler.
900271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
900371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * for: sput/jumbo, sput-boolean/jumbo, sput-byte/jumbo, sput-char/jumbo,
900471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *      sput-short/jumbo
900571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
900671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop vBBBB, field@AAAAAAAA */
90079f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_methodClassDex]    @ r2<- DvmDex
900871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r0<- aaaa (lo)
900971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
901071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields
901171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
901271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, r1, lsl #2]        @ r0<- resolved StaticField ptr
901371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ is resolved entry null?
901471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_SPUT_SHORT_JUMBO_resolve         @ yes, do resolve
901571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_SHORT_JUMBO_finish:   @ field ptr in r0
901671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r2<- BBBB
901771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(4)               @ advance rPC, load rINST
901871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r1, r2)                    @ r1<- fp[BBBB]
901971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
902071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ releasing store
902171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str     r1, [r0, #offStaticField_value] @ field<- vBBBB
902271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
902371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
902471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
902571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
902671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
902771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_INVOKE_VIRTUAL_JUMBO: /* 0x122 */
902871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_INVOKE_VIRTUAL_JUMBO.S */
902971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
903071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Handle a virtual method call.
903171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
903271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* invoke-virtual/jumbo {vCCCC..v(CCCC+BBBB-1)}, meth@AAAAAAAA */
90339f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- pDvmDex
903471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r1<- aaaa (lo)
903571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
903671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r3, #offDvmDex_pResMethods]    @ r3<- pDvmDex->pResMethods
903771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
903871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, r1, lsl #2]        @ r0<- resolved baseMethod
903971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ already resolved?
904071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ must export for invoke
904171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_INVOKE_VIRTUAL_JUMBO_continue        @ yes, continue on
90429f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_method] @ r3<- self->method
904371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, #offMethod_clazz]  @ r0<- method->clazz
904471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #METHOD_VIRTUAL         @ resolver method type
904571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveMethod            @ r0<- call(clazz, ref, flags)
904671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ got null?
904771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_INVOKE_VIRTUAL_JUMBO_continue        @ no, continue
904871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ yes, handle exception
904971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
905071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
905171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
905271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_INVOKE_SUPER_JUMBO: /* 0x123 */
905371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_INVOKE_SUPER_JUMBO.S */
905471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
905571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Handle a "super" method call.
905671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
905771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* invoke-super/jumbo {vCCCC..v(CCCC+BBBB-1)}, meth@AAAAAAAA */
905871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r10, 4)                       @ r10<- CCCC
90599f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- pDvmDex
906071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r1<- aaaa (lo)
906171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
906271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r3, #offDvmDex_pResMethods]    @ r3<- pDvmDex->pResMethods
906371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
906471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r2, r10)                   @ r2<- "this" ptr
906571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, r1, lsl #2]        @ r0<- resolved baseMethod
906671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r2, #0                      @ null "this"?
90679f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r9, [rSELF, #offThread_method] @ r9<- current method
906871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ null "this", throw exception
906971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ already resolved?
907071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r9, [r9, #offMethod_clazz]  @ r9<- method->clazz
907171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ must export for invoke
907271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_INVOKE_SUPER_JUMBO_continue        @ resolved, continue on
907371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_INVOKE_SUPER_JUMBO_resolve         @ do resolve now
907471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
907571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
907671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
907771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_INVOKE_DIRECT_JUMBO: /* 0x124 */
907871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_INVOKE_DIRECT_JUMBO.S */
907971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
908071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Handle a direct method call.
908171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
908271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * (We could defer the "is 'this' pointer null" test to the common
908371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * method invocation code, and use a flag to indicate that static
908471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * calls don't count.  If we do this as part of copying the arguments
908571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * out we could avoiding loading the first arg twice.)
908671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
908771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
908871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* invoke-direct/jumbo {vCCCC..v(CCCC+BBBB-1)}, meth@AAAAAAAA */
90899f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- pDvmDex
909071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r1<- aaaa (lo)
909171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
909271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r3, #offDvmDex_pResMethods]    @ r3<- pDvmDex->pResMethods
909371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
909471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r10, 4)                       @ r10<- CCCC
909571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, r1, lsl #2]        @ r0<- resolved methodToCall
909671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ already resolved?
909771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ must export for invoke
909871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r2, r10)                   @ r2<- "this" ptr
909971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_INVOKE_DIRECT_JUMBO_resolve         @ not resolved, do it now
910071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_DIRECT_JUMBO_finish:
910171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r2, #0                      @ null "this" ref?
910271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     common_invokeMethodJumbo    @ no, continue on
910371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_errNullObject        @ yes, throw exception
910471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
910571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
910671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
910771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_INVOKE_STATIC_JUMBO: /* 0x125 */
910871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_INVOKE_STATIC_JUMBO.S */
910971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
911071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Handle a static method call.
911171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
911271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* invoke-static/jumbo {vCCCC..v(CCCC+BBBB-1)}, meth@AAAAAAAA */
91139f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- pDvmDex
911471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r1<- aaaa (lo)
911571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
911671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r3, #offDvmDex_pResMethods]    @ r3<- pDvmDex->pResMethods
911771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
911871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, r1, lsl #2]        @ r0<- resolved methodToCall
911971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ already resolved?
912071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ must export for invoke
912171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     common_invokeMethodJumbo    @ yes, continue on
91229f601a917c8878204482c37aec7005054b6776fabuzbee0:  ldr     r3, [rSELF, #offThread_method] @ r3<- self->method
912371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, #offMethod_clazz]  @ r0<- method->clazz
912471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #METHOD_STATIC          @ resolver method type
912571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveMethod            @ r0<- call(clazz, ref, flags)
912671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ got null?
912771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     common_invokeMethodJumbo    @ no, continue
912871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ yes, handle exception
912971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
913071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
913171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
913271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_INVOKE_INTERFACE_JUMBO: /* 0x126 */
913371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_INVOKE_INTERFACE_JUMBO.S */
913471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
913571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Handle an interface method call.
913671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
913771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* invoke-interface/jumbo {vCCCC..v(CCCC+BBBB-1)}, meth@AAAAAAAA */
913871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 4)                        @ r2<- CCCC
913971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r0<- aaaa (lo)
914071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- AAAA (hi)
914171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ must export for invoke
914271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r1, r0, r1, lsl #16         @ r1<- AAAAaaaa
914371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r0, r2)                    @ r0<- first arg ("this")
91449f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_methodClassDex]    @ r3<- methodClassDex
914571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ null obj?
91469f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]  @ r2<- method
914771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ yes, fail
914871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r0, #offObject_clazz]  @ r0<- thisPtr->clazz
914971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmFindInterfaceMethodInCache @ r0<- call(class, ref, method, dex)
915071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ failed?
915171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yes, handle exception
915271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_invokeMethodJumbo    @ jump to common handler
915371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
915471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
915571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
915671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_27FF: /* 0x127 */
915771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_27FF.S */
915871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
915971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
916071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
916171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
916271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
916371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
916471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_28FF: /* 0x128 */
916571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_28FF.S */
916671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
916771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
916871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
916971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
917071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
917171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
917271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_29FF: /* 0x129 */
917371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_29FF.S */
917471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
917571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
917671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
917771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
917871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
917971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
918071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_2AFF: /* 0x12a */
918171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_2AFF.S */
918271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
918371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
918471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
918571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
918671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
918771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
918871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_2BFF: /* 0x12b */
918971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_2BFF.S */
919071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
919171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
919271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
919371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
919471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
919571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
919671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_2CFF: /* 0x12c */
919771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_2CFF.S */
919871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
919971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
920071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
920171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
920271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
920371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
920471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_2DFF: /* 0x12d */
920571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_2DFF.S */
920671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
920771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
920871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
920971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
921071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
921171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
921271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_2EFF: /* 0x12e */
921371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_2EFF.S */
921471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
921571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
921671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
921771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
921871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
921971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
922071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_2FFF: /* 0x12f */
922171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_2FFF.S */
922271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
922371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
922471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
922571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
922671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
922771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
922871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_30FF: /* 0x130 */
922971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_30FF.S */
923071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
923171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
923271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
923371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
923471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
923571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
923671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_31FF: /* 0x131 */
923771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_31FF.S */
923871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
923971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
924071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
924171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
924271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
924371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
924471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_32FF: /* 0x132 */
924571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_32FF.S */
924671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
924771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
924871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
924971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
925071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
925171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
925271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_33FF: /* 0x133 */
925371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_33FF.S */
925471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
925571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
925671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
925771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
925871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
925971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
926071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_34FF: /* 0x134 */
926171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_34FF.S */
926271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
926371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
926471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
926571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
926671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
926771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
926871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_35FF: /* 0x135 */
926971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_35FF.S */
927071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
927171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
927271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
927371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
927471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
927571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
927671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_36FF: /* 0x136 */
927771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_36FF.S */
927871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
927971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
928071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
928171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
928271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
928371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
928471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_37FF: /* 0x137 */
928571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_37FF.S */
928671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
928771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
928871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
928971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
929071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
929171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
929271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_38FF: /* 0x138 */
929371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_38FF.S */
929471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
929571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
929671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
929771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
929871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
929971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
930071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_39FF: /* 0x139 */
930171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_39FF.S */
930271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
930371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
930471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
930571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
930671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
930771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
930871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_3AFF: /* 0x13a */
930971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_3AFF.S */
931071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
931171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
931271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
931371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
931471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
931571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
931671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_3BFF: /* 0x13b */
931771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_3BFF.S */
931871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
931971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
932071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
932171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
932271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
932371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
932471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_3CFF: /* 0x13c */
932571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_3CFF.S */
932671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
932771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
932871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
932971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
933071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
933171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
933271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_3DFF: /* 0x13d */
933371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_3DFF.S */
933471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
933571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
933671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
933771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
933871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
933971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
934071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_3EFF: /* 0x13e */
934171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_3EFF.S */
934271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
934371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
934471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
934571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
934671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
934771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
934871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_3FFF: /* 0x13f */
934971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_3FFF.S */
935071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
935171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
935271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
935371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
935471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
935571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
935671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_40FF: /* 0x140 */
935771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_40FF.S */
935871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
935971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
936071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
936171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
936271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
936371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
936471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_41FF: /* 0x141 */
936571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_41FF.S */
936671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
936771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
936871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
936971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
937071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
937171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
937271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_42FF: /* 0x142 */
937371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_42FF.S */
937471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
937571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
937671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
937771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
937871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
937971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
938071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_43FF: /* 0x143 */
938171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_43FF.S */
938271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
938371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
938471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
938571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
938671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
938771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
938871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_44FF: /* 0x144 */
938971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_44FF.S */
939071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
939171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
939271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
939371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
939471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
939571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
939671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_45FF: /* 0x145 */
939771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_45FF.S */
939871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
939971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
940071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
940171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
940271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
940371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
940471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_46FF: /* 0x146 */
940571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_46FF.S */
940671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
940771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
940871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
940971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
941071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
941171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
941271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_47FF: /* 0x147 */
941371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_47FF.S */
941471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
941571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
941671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
941771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
941871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
941971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
942071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_48FF: /* 0x148 */
942171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_48FF.S */
942271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
942371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
942471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
942571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
942671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
942771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
942871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_49FF: /* 0x149 */
942971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_49FF.S */
943071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
943171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
943271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
943371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
943471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
943571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
943671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_4AFF: /* 0x14a */
943771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_4AFF.S */
943871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
943971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
944071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
944171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
944271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
944371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
944471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_4BFF: /* 0x14b */
944571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_4BFF.S */
944671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
944771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
944871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
944971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
945071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
945171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
945271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_4CFF: /* 0x14c */
945371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_4CFF.S */
945471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
945571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
945671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
945771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
945871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
945971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
946071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_4DFF: /* 0x14d */
946171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_4DFF.S */
946271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
946371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
946471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
946571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
946671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
946771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
946871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_4EFF: /* 0x14e */
946971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_4EFF.S */
947071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
947171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
947271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
947371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
947471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
947571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
947671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_4FFF: /* 0x14f */
947771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_4FFF.S */
947871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
947971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
948071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
948171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
948271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
948371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
948471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_50FF: /* 0x150 */
948571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_50FF.S */
948671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
948771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
948871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
948971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
949071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
949171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
949271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_51FF: /* 0x151 */
949371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_51FF.S */
949471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
949571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
949671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
949771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
949871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
949971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
950071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_52FF: /* 0x152 */
950171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_52FF.S */
950271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
950371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
950471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
950571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
950671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
950771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
950871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_53FF: /* 0x153 */
950971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_53FF.S */
951071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
951171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
951271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
951371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
951471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
951571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
951671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_54FF: /* 0x154 */
951771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_54FF.S */
951871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
951971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
952071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
952171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
952271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
952371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
952471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_55FF: /* 0x155 */
952571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_55FF.S */
952671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
952771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
952871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
952971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
953071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
953171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
953271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_56FF: /* 0x156 */
953371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_56FF.S */
953471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
953571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
953671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
953771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
953871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
953971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
954071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_57FF: /* 0x157 */
954171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_57FF.S */
954271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
954371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
954471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
954571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
954671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
954771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
954871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_58FF: /* 0x158 */
954971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_58FF.S */
955071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
955171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
955271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
955371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
955471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
955571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
955671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_59FF: /* 0x159 */
955771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_59FF.S */
955871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
955971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
956071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
956171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
956271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
956371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
956471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_5AFF: /* 0x15a */
956571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_5AFF.S */
956671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
956771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
956871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
956971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
957071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
957171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
957271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_5BFF: /* 0x15b */
957371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_5BFF.S */
957471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
957571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
957671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
957771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
957871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
957971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
958071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_5CFF: /* 0x15c */
958171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_5CFF.S */
958271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
958371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
958471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
958571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
958671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
958771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
958871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_5DFF: /* 0x15d */
958971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_5DFF.S */
959071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
959171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
959271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
959371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
959471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
959571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
959671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_5EFF: /* 0x15e */
959771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_5EFF.S */
959871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
959971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
960071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
960171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
960271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
960371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
960471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_5FFF: /* 0x15f */
960571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_5FFF.S */
960671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
960771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
960871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
960971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
961071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
961171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
961271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_60FF: /* 0x160 */
961371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_60FF.S */
961471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
961571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
961671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
961771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
961871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
961971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
962071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_61FF: /* 0x161 */
962171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_61FF.S */
962271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
962371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
962471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
962571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
962671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
962771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
962871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_62FF: /* 0x162 */
962971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_62FF.S */
963071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
963171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
963271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
963371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
963471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
963571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
963671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_63FF: /* 0x163 */
963771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_63FF.S */
963871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
963971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
964071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
964171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
964271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
964371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
964471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_64FF: /* 0x164 */
964571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_64FF.S */
964671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
964771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
964871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
964971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
965071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
965171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
965271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_65FF: /* 0x165 */
965371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_65FF.S */
965471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
965571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
965671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
965771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
965871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
965971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
966071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_66FF: /* 0x166 */
966171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_66FF.S */
966271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
966371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
966471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
966571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
966671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
966771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
966871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_67FF: /* 0x167 */
966971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_67FF.S */
967071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
967171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
967271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
967371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
967471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
967571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
967671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_68FF: /* 0x168 */
967771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_68FF.S */
967871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
967971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
968071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
968171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
968271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
968371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
968471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_69FF: /* 0x169 */
968571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_69FF.S */
968671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
968771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
968871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
968971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
969071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
969171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
969271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_6AFF: /* 0x16a */
969371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_6AFF.S */
969471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
969571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
969671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
969771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
969871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
969971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
970071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_6BFF: /* 0x16b */
970171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_6BFF.S */
970271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
970371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
970471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
970571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
970671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
970771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
970871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_6CFF: /* 0x16c */
970971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_6CFF.S */
971071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
971171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
971271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
971371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
971471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
971571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
971671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_6DFF: /* 0x16d */
971771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_6DFF.S */
971871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
971971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
972071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
972171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
972271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
972371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
972471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_6EFF: /* 0x16e */
972571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_6EFF.S */
972671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
972771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
972871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
972971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
973071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
973171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
973271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_6FFF: /* 0x16f */
973371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_6FFF.S */
973471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
973571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
973671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
973771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
973871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
973971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
974071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_70FF: /* 0x170 */
974171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_70FF.S */
974271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
974371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
974471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
974571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
974671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
974771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
974871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_71FF: /* 0x171 */
974971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_71FF.S */
975071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
975171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
975271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
975371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
975471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
975571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
975671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_72FF: /* 0x172 */
975771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_72FF.S */
975871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
975971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
976071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
976171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
976271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
976371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
976471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_73FF: /* 0x173 */
976571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_73FF.S */
976671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
976771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
976871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
976971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
977071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
977171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
977271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_74FF: /* 0x174 */
977371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_74FF.S */
977471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
977571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
977671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
977771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
977871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
977971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
978071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_75FF: /* 0x175 */
978171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_75FF.S */
978271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
978371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
978471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
978571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
978671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
978771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
978871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_76FF: /* 0x176 */
978971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_76FF.S */
979071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
979171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
979271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
979371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
979471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
979571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
979671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_77FF: /* 0x177 */
979771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_77FF.S */
979871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
979971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
980071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
980171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
980271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
980371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
980471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_78FF: /* 0x178 */
980571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_78FF.S */
980671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
980771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
980871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
980971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
981071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
981171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
981271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_79FF: /* 0x179 */
981371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_79FF.S */
981471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
981571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
981671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
981771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
981871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
981971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
982071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_7AFF: /* 0x17a */
982171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_7AFF.S */
982271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
982371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
982471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
982571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
982671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
982771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
982871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_7BFF: /* 0x17b */
982971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_7BFF.S */
983071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
983171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
983271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
983371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
983471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
983571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
983671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_7CFF: /* 0x17c */
983771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_7CFF.S */
983871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
983971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
984071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
984171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
984271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
984371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
984471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_7DFF: /* 0x17d */
984571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_7DFF.S */
984671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
984771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
984871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
984971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
985071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
985171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
985271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_7EFF: /* 0x17e */
985371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_7EFF.S */
985471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
985571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
985671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
985771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
985871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
985971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
986071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_7FFF: /* 0x17f */
986171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_7FFF.S */
986271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
986371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
986471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
986571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
986671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
986771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
986871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_80FF: /* 0x180 */
986971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_80FF.S */
987071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
987171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
987271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
987371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
987471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
987571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
987671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_81FF: /* 0x181 */
987771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_81FF.S */
987871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
987971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
988071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
988171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
988271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
988371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
988471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_82FF: /* 0x182 */
988571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_82FF.S */
988671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
988771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
988871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
988971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
989071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
989171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
989271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_83FF: /* 0x183 */
989371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_83FF.S */
989471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
989571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
989671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
989771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
989871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
989971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
990071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_84FF: /* 0x184 */
990171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_84FF.S */
990271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
990371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
990471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
990571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
990671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
990771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
990871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_85FF: /* 0x185 */
990971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_85FF.S */
991071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
991171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
991271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
991371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
991471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
991571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
991671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_86FF: /* 0x186 */
991771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_86FF.S */
991871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
991971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
992071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
992171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
992271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
992371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
992471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_87FF: /* 0x187 */
992571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_87FF.S */
992671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
992771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
992871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
992971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
993071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
993171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
993271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_88FF: /* 0x188 */
993371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_88FF.S */
993471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
993571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
993671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
993771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
993871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
993971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
994071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_89FF: /* 0x189 */
994171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_89FF.S */
994271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
994371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
994471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
994571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
994671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
994771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
994871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_8AFF: /* 0x18a */
994971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_8AFF.S */
995071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
995171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
995271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
995371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
995471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
995571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
995671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_8BFF: /* 0x18b */
995771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_8BFF.S */
995871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
995971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
996071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
996171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
996271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
996371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
996471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_8CFF: /* 0x18c */
996571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_8CFF.S */
996671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
996771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
996871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
996971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
997071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
997171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
997271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_8DFF: /* 0x18d */
997371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_8DFF.S */
997471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
997571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
997671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
997771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
997871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
997971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
998071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_8EFF: /* 0x18e */
998171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_8EFF.S */
998271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
998371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
998471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
998571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
998671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
998771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
998871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_8FFF: /* 0x18f */
998971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_8FFF.S */
999071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
999171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
999271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
999371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
999471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
999571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
999671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_90FF: /* 0x190 */
999771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_90FF.S */
999871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
999971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1000071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1000171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1000271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1000371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1000471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_91FF: /* 0x191 */
1000571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_91FF.S */
1000671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1000771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1000871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1000971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1001071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1001171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1001271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_92FF: /* 0x192 */
1001371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_92FF.S */
1001471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1001571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1001671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1001771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1001871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1001971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1002071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_93FF: /* 0x193 */
1002171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_93FF.S */
1002271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1002371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1002471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1002571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1002671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1002771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1002871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_94FF: /* 0x194 */
1002971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_94FF.S */
1003071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1003171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1003271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1003371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1003471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1003571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1003671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_95FF: /* 0x195 */
1003771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_95FF.S */
1003871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1003971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1004071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1004171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1004271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1004371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1004471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_96FF: /* 0x196 */
1004571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_96FF.S */
1004671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1004771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1004871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1004971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1005071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1005171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1005271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_97FF: /* 0x197 */
1005371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_97FF.S */
1005471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1005571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1005671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1005771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1005871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1005971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1006071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_98FF: /* 0x198 */
1006171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_98FF.S */
1006271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1006371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1006471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1006571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1006671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1006771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1006871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_99FF: /* 0x199 */
1006971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_99FF.S */
1007071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1007171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1007271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1007371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1007471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1007571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1007671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_9AFF: /* 0x19a */
1007771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_9AFF.S */
1007871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1007971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1008071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1008171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1008271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1008371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1008471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_9BFF: /* 0x19b */
1008571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_9BFF.S */
1008671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1008771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1008871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1008971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1009071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1009171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1009271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_9CFF: /* 0x19c */
1009371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_9CFF.S */
1009471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1009571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1009671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1009771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1009871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1009971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1010071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_9DFF: /* 0x19d */
1010171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_9DFF.S */
1010271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1010371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1010471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1010571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1010671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1010771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1010871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_9EFF: /* 0x19e */
1010971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_9EFF.S */
1011071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1011171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1011271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1011371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1011471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1011571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1011671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_9FFF: /* 0x19f */
1011771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_9FFF.S */
1011871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1011971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1012071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1012171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1012271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1012371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1012471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A0FF: /* 0x1a0 */
1012571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_A0FF.S */
1012671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1012771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1012871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1012971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1013071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1013171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1013271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A1FF: /* 0x1a1 */
1013371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_A1FF.S */
1013471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1013571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1013671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1013771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1013871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1013971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1014071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A2FF: /* 0x1a2 */
1014171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_A2FF.S */
1014271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1014371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1014471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1014571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1014671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1014771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1014871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A3FF: /* 0x1a3 */
1014971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_A3FF.S */
1015071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1015171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1015271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1015371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1015471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1015571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1015671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A4FF: /* 0x1a4 */
1015771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_A4FF.S */
1015871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1015971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1016071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1016171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1016271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1016371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1016471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A5FF: /* 0x1a5 */
1016571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_A5FF.S */
1016671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1016771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1016871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1016971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1017071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1017171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1017271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A6FF: /* 0x1a6 */
1017371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_A6FF.S */
1017471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1017571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1017671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1017771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1017871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1017971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1018071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A7FF: /* 0x1a7 */
1018171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_A7FF.S */
1018271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1018371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1018471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1018571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1018671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1018771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1018871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A8FF: /* 0x1a8 */
1018971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_A8FF.S */
1019071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1019171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1019271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1019371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1019471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1019571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1019671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A9FF: /* 0x1a9 */
1019771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_A9FF.S */
1019871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1019971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1020071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1020171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1020271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1020371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1020471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_AAFF: /* 0x1aa */
1020571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_AAFF.S */
1020671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1020771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1020871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1020971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1021071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1021171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1021271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_ABFF: /* 0x1ab */
1021371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_ABFF.S */
1021471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1021571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1021671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1021771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1021871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1021971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1022071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_ACFF: /* 0x1ac */
1022171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_ACFF.S */
1022271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1022371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1022471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1022571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1022671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1022771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1022871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_ADFF: /* 0x1ad */
1022971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_ADFF.S */
1023071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1023171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1023271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1023371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1023471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1023571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1023671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_AEFF: /* 0x1ae */
1023771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_AEFF.S */
1023871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1023971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1024071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1024171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1024271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1024371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1024471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_AFFF: /* 0x1af */
1024571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_AFFF.S */
1024671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1024771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1024871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1024971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1025071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1025171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1025271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B0FF: /* 0x1b0 */
1025371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_B0FF.S */
1025471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1025571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1025671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1025771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1025871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1025971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1026071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B1FF: /* 0x1b1 */
1026171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_B1FF.S */
1026271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1026371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1026471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1026571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1026671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1026771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1026871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B2FF: /* 0x1b2 */
1026971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_B2FF.S */
1027071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1027171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1027271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1027371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1027471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1027571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1027671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B3FF: /* 0x1b3 */
1027771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_B3FF.S */
1027871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1027971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1028071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1028171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1028271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1028371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1028471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B4FF: /* 0x1b4 */
1028571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_B4FF.S */
1028671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1028771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1028871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1028971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1029071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1029171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1029271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B5FF: /* 0x1b5 */
1029371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_B5FF.S */
1029471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1029571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1029671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1029771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1029871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1029971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1030071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B6FF: /* 0x1b6 */
1030171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_B6FF.S */
1030271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1030371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1030471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1030571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1030671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1030771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1030871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B7FF: /* 0x1b7 */
1030971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_B7FF.S */
1031071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1031171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1031271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1031371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1031471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1031571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1031671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B8FF: /* 0x1b8 */
1031771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_B8FF.S */
1031871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1031971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1032071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1032171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1032271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1032371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1032471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B9FF: /* 0x1b9 */
1032571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_B9FF.S */
1032671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1032771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1032871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1032971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1033071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1033171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1033271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_BAFF: /* 0x1ba */
1033371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_BAFF.S */
1033471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1033571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1033671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1033771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1033871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1033971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1034071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_BBFF: /* 0x1bb */
1034171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_BBFF.S */
1034271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1034371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1034471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1034571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1034671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1034771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1034871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_BCFF: /* 0x1bc */
1034971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_BCFF.S */
1035071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1035171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1035271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1035371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1035471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1035571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1035671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_BDFF: /* 0x1bd */
1035771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_BDFF.S */
1035871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1035971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1036071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1036171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1036271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1036371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1036471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_BEFF: /* 0x1be */
1036571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_BEFF.S */
1036671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1036771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1036871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1036971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1037071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1037171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1037271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_BFFF: /* 0x1bf */
1037371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_BFFF.S */
1037471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1037571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1037671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1037771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1037871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1037971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1038071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C0FF: /* 0x1c0 */
1038171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_C0FF.S */
1038271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1038371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1038471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1038571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1038671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1038771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1038871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C1FF: /* 0x1c1 */
1038971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_C1FF.S */
1039071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1039171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1039271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1039371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1039471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1039571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1039671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C2FF: /* 0x1c2 */
1039771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_C2FF.S */
1039871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1039971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1040071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1040171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1040271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1040371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1040471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C3FF: /* 0x1c3 */
1040571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_C3FF.S */
1040671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1040771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1040871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1040971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1041071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1041171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1041271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C4FF: /* 0x1c4 */
1041371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_C4FF.S */
1041471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1041571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1041671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1041771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1041871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1041971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1042071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C5FF: /* 0x1c5 */
1042171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_C5FF.S */
1042271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1042371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1042471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1042571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1042671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1042771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1042871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C6FF: /* 0x1c6 */
1042971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_C6FF.S */
1043071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1043171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1043271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1043371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1043471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1043571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1043671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C7FF: /* 0x1c7 */
1043771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_C7FF.S */
1043871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1043971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1044071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1044171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1044271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1044371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1044471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C8FF: /* 0x1c8 */
1044571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_C8FF.S */
1044671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1044771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1044871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1044971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1045071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1045171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1045271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C9FF: /* 0x1c9 */
1045371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_C9FF.S */
1045471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1045571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1045671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1045771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1045871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1045971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1046071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_CAFF: /* 0x1ca */
1046171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_CAFF.S */
1046271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1046371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1046471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1046571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1046671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1046771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1046871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_CBFF: /* 0x1cb */
1046971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_CBFF.S */
1047071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1047171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1047271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1047371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1047471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1047571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1047671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_CCFF: /* 0x1cc */
1047771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_CCFF.S */
1047871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1047971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1048071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1048171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1048271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1048371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1048471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_CDFF: /* 0x1cd */
1048571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_CDFF.S */
1048671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1048771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1048871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1048971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1049071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1049171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1049271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_CEFF: /* 0x1ce */
1049371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_CEFF.S */
1049471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1049571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1049671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1049771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1049871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1049971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1050071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_CFFF: /* 0x1cf */
1050171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_CFFF.S */
1050271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1050371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1050471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1050571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1050671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1050771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1050871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D0FF: /* 0x1d0 */
1050971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_D0FF.S */
1051071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1051171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1051271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1051371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1051471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1051571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1051671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D1FF: /* 0x1d1 */
1051771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_D1FF.S */
1051871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1051971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1052071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1052171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1052271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1052371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1052471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D2FF: /* 0x1d2 */
1052571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_D2FF.S */
1052671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1052771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1052871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1052971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1053071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1053171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1053271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D3FF: /* 0x1d3 */
1053371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_D3FF.S */
1053471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1053571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1053671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1053771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1053871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1053971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1054071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D4FF: /* 0x1d4 */
1054171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_D4FF.S */
1054271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1054371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1054471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1054571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1054671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1054771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1054871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D5FF: /* 0x1d5 */
1054971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_D5FF.S */
1055071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1055171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1055271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1055371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1055471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1055571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1055671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D6FF: /* 0x1d6 */
1055771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_D6FF.S */
1055871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1055971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1056071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1056171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1056271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1056371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1056471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D7FF: /* 0x1d7 */
1056571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_D7FF.S */
1056671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1056771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1056871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1056971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1057071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1057171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1057271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D8FF: /* 0x1d8 */
1057371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_D8FF.S */
1057471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1057571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1057671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1057771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1057871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1057971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1058071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D9FF: /* 0x1d9 */
1058171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_D9FF.S */
1058271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1058371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1058471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1058571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1058671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1058771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1058871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_DAFF: /* 0x1da */
1058971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_DAFF.S */
1059071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1059171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1059271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1059371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1059471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1059571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1059671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_DBFF: /* 0x1db */
1059771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_DBFF.S */
1059871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1059971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1060071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1060171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1060271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1060371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1060471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_DCFF: /* 0x1dc */
1060571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_DCFF.S */
1060671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1060771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1060871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1060971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1061071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1061171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1061271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_DDFF: /* 0x1dd */
1061371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_DDFF.S */
1061471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1061571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1061671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1061771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1061871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1061971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1062071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_DEFF: /* 0x1de */
1062171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_DEFF.S */
1062271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1062371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1062471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1062571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1062671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1062771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1062871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_DFFF: /* 0x1df */
1062971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_DFFF.S */
1063071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1063171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1063271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1063371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1063471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1063571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1063671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E0FF: /* 0x1e0 */
1063771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_E0FF.S */
1063871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1063971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1064071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1064171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1064271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1064371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1064471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E1FF: /* 0x1e1 */
1064571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_E1FF.S */
1064671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1064771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1064871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1064971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1065071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1065171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1065271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E2FF: /* 0x1e2 */
1065371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_E2FF.S */
1065471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1065571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1065671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1065771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1065871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1065971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1066071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E3FF: /* 0x1e3 */
1066171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_E3FF.S */
1066271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1066371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1066471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1066571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1066671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1066771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1066871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E4FF: /* 0x1e4 */
1066971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_E4FF.S */
1067071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1067171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1067271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1067371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1067471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1067571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1067671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E5FF: /* 0x1e5 */
1067771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_E5FF.S */
1067871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1067971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1068071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1068171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1068271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1068371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1068471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E6FF: /* 0x1e6 */
1068571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_E6FF.S */
1068671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1068771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1068871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1068971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1069071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1069171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1069271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E7FF: /* 0x1e7 */
1069371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_E7FF.S */
1069471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1069571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1069671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1069771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1069871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1069971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1070071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E8FF: /* 0x1e8 */
1070171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_E8FF.S */
1070271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1070371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1070471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1070571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1070671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1070771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1070871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E9FF: /* 0x1e9 */
1070971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_E9FF.S */
1071071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1071171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1071271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1071371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1071471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1071571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1071671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_EAFF: /* 0x1ea */
1071771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_EAFF.S */
1071871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1071971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1072071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1072171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1072271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1072371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1072471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_EBFF: /* 0x1eb */
1072571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_EBFF.S */
1072671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1072771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1072871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1072971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1073071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1073171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1073271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_ECFF: /* 0x1ec */
1073371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_ECFF.S */
1073471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1073571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1073671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1073771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1073871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1073971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1074071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_EDFF: /* 0x1ed */
1074171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_EDFF.S */
1074271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1074371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1074471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1074571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1074671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1074771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1074871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_EEFF: /* 0x1ee */
1074971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_EEFF.S */
1075071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1075171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1075271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1075371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1075471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1075571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1075671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_EFFF: /* 0x1ef */
1075771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_EFFF.S */
1075871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1075971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1076071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1076171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1076271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1076371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1076471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F0FF: /* 0x1f0 */
1076571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_F0FF.S */
1076671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1076771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1076871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1076971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1077071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1077171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1077271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F1FF: /* 0x1f1 */
1077371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_F1FF.S */
1077471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1077571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1077671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1077771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1077871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1077971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1078071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F2FF: /* 0x1f2 */
1078171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_F2FF.S */
1078271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1078371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1078471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1078571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1078671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1078771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1078871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F3FF: /* 0x1f3 */
1078971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_F3FF.S */
1079071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1079171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1079271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1079371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1079471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1079571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1079671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F4FF: /* 0x1f4 */
1079771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_F4FF.S */
1079871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1079971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1080071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1080171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1080271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1080371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1080471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F5FF: /* 0x1f5 */
1080571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_F5FF.S */
1080671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1080771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1080871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1080971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1081071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1081171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1081271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F6FF: /* 0x1f6 */
1081371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_F6FF.S */
1081471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1081571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1081671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1081771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1081871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1081971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1082071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F7FF: /* 0x1f7 */
1082171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_F7FF.S */
1082271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1082371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1082471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1082571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1082671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1082771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1082871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F8FF: /* 0x1f8 */
1082971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_F8FF.S */
1083071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1083171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1083271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1083371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1083471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1083571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1083671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F9FF: /* 0x1f9 */
1083771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_F9FF.S */
1083871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1083971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1084071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1084171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1084271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1084371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1084471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_FAFF: /* 0x1fa */
1084571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_FAFF.S */
1084671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1084771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1084871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1084971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1085071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1085171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1085271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_FBFF: /* 0x1fb */
1085371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_FBFF.S */
1085471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1085571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1085671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1085771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1085871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1085971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1086071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_FCFF: /* 0x1fc */
1086171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_FCFF.S */
1086271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1086371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1086471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1086571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1086671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1086771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1086871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_FDFF: /* 0x1fd */
1086971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_FDFF.S */
1087071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1087171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1087271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1087371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1087471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1087571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1087671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_FEFF: /* 0x1fe */
1087771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_UNUSED_FEFF.S */
1087871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/unused.S */
1087971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort
1088071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1088171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1088271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */
1088371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
1088471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_THROW_VERIFICATION_ERROR_JUMBO: /* 0x1ff */
1088571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: armv5te/OP_THROW_VERIFICATION_ERROR_JUMBO.S */
1088671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1088771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Handle a jumbo throw-verification-error instruction.  This throws an
1088871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * exception for an error discovered during verification.  The
1088971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * exception is indicated by BBBB, with some detail provided by AAAAAAAA.
1089071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1089171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /* exop BBBB, Class@AAAAAAAA */
1089271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 1)                        @ r1<- aaaa (lo)
1089371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 2)                        @ r2<- AAAA (hi)
108949f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r0, [rSELF, #offThread_method]    @ r0<- self->method
1089571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    orr     r2, r1, r2, lsl #16         @ r2<- AAAAaaaa
1089671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ export the PC
1089771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 3)                        @ r1<- BBBB
1089871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmThrowVerificationError   @ always throws
1089971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ handle exception
1090071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1090171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1090271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 64
10903b387fe1b970a216c09d2abc98c893ff1fff3e512Andy McFadden    .size   .L_OP_NOP, .-.L_OP_NOP
1090471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .global dvmAsmInstructionEnd
1090571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhaodvmAsmInstructionEnd:
1090671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1090771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/*
1090871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ===========================================================================
1090971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *  Sister implementations
1091071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ===========================================================================
1091171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */
1091271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .global dvmAsmSisterStart
1091371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .type   dvmAsmSisterStart, %function
1091471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .text
1091571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 4
1091671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhaodvmAsmSisterStart:
1091771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1091871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CONST_STRING */
1091971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1092071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1092171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the String has not yet been resolved.
1092271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: BBBB (String ref)
1092371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9: target register
1092471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1092571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CONST_STRING_resolve:
1092671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()
109279f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r0, [rSELF, #offThread_method] @ r0<- self->method
1092871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r0, #offMethod_clazz]  @ r0<- method->clazz
1092971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveString            @ r0<- String reference
1093071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ failed?
1093171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yup, handle the exception
1093271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1093371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1093471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r9)                    @ vAA<- r0
1093571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1093671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1093771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CONST_STRING_JUMBO */
1093871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1093971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1094071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the String has not yet been resolved.
1094171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: BBBBBBBB (String ref)
1094271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9: target register
1094371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1094471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CONST_STRING_JUMBO_resolve:
1094571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()
109469f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r0, [rSELF, #offThread_method] @ r0<- self->method
1094771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r0, #offMethod_clazz]  @ r0<- method->clazz
1094871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveString            @ r0<- String reference
1094971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ failed?
1095071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yup, handle the exception
1095171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(3)               @ advance rPC, load rINST
1095271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1095371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r9)                    @ vAA<- r0
1095471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1095571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1095671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CONST_CLASS */
1095771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1095871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1095971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the Class has not yet been resolved.
1096071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: BBBB (Class ref)
1096171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9: target register
1096271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1096371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CONST_CLASS_resolve:
1096471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()
109659f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r0, [rSELF, #offThread_method] @ r0<- self->method
1096671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #1                      @ r2<- true
1096771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r0, #offMethod_clazz]  @ r0<- method->clazz
1096871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveClass             @ r0<- Class reference
1096971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ failed?
1097071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yup, handle the exception
1097171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1097271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1097371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r9)                    @ vAA<- r0
1097471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1097571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1097671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CHECK_CAST */
1097771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1097871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1097971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Trivial test failed, need to perform full check.  This is common.
1098071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds obj->clazz
1098171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1 holds desired class resolved from BBBB
1098271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1098371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1098471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CHECK_CAST_fullcheck:
1098571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r10, r1                     @ avoid ClassObject getting clobbered
1098671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmInstanceofNonTrivial     @ r0<- boolean result
1098771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ failed?
1098871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_CHECK_CAST_okay            @ no, success
1098971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1099071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ A cast has failed.  We need to throw a ClassCastException.
1099171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ about to throw
1099271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r9, #offObject_clazz]  @ r0<- obj->clazz (actual class)
1099371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r10                     @ r1<- desired class
1099471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmThrowClassCastException
1099571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown
1099671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1099771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1099871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Resolution required.  This is the least-likely path.
1099971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1100071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r2 holds BBBB
1100171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1100271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1100371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CHECK_CAST_resolve:
1100471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw
110059f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_method] @ r3<- self->method
1100671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r2                      @ r1<- BBBB
1100771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #0                      @ r2<- false
1100871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, #offMethod_clazz]  @ r0<- method->clazz
1100971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveClass             @ r0<- resolved ClassObject ptr
1101071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ got null?
1101171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yes, handle exception
1101271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r0                      @ r1<- class resolved from BBB
1101371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r9, #offObject_clazz]  @ r0<- obj->clazz
1101471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_CHECK_CAST_resolved        @ pick up where we left off
1101571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1101671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INSTANCE_OF */
1101771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1101871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1101971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Trivial test failed, need to perform full check.  This is common.
1102071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds obj->clazz
1102171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1 holds class resolved from BBBB
1102271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds A
1102371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1102471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_fullcheck:
1102571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmInstanceofNonTrivial     @ r0<- boolean result
1102671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ fall through to OP_INSTANCE_OF_store
1102771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1102871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1102971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * r0 holds boolean result
1103071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * r9 holds A
1103171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1103271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_store:
1103371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1103471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r9)                    @ vA<- r0
1103571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1103671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1103771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1103871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1103971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Trivial test succeeded, save and bail.
1104071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds A
1104171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1104271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_trivial:
1104371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, #1                      @ indicate success
1104471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ could b OP_INSTANCE_OF_store, but copying is faster and cheaper
1104571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1104671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r9)                    @ vA<- r0
1104771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1104871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1104971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1105071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1105171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Resolution required.  This is the least-likely path.
1105271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1105371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r3 holds BBBB
1105471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds A
1105571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1105671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_resolve:
1105771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw
110589f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r0, [rSELF, #offThread_method]    @ r0<- self->method
1105971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r3                      @ r1<- BBBB
1106071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #1                      @ r2<- true
1106171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r0, #offMethod_clazz]  @ r0<- method->clazz
1106271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveClass             @ r0<- resolved ClassObject ptr
1106371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ got null?
1106471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yes, handle exception
1106571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r0                      @ r1<- class resolved from BBB
1106671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r3, rINST, lsr #12          @ r3<- B
1106771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r0, r3)                    @ r0<- vB (object)
1106871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r0, #offObject_clazz]  @ r0<- obj->clazz
1106971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_INSTANCE_OF_resolved        @ pick up where we left off
1107071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1107171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_NEW_INSTANCE */
1107271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1107371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 32                          @ minimize cache lines
1107471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_finish: @ r0=new object
1107571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r3, rINST, lsr #8           @ r3<- AA
1107671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ failed?
1107771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yes, handle the exception
1107871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1107971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1108071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r3)                    @ vAA<- r0
1108171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1108271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1108371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1108471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Class initialization required.
1108571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1108671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds class object
1108771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1108871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_needinit:
1108971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r9, r0                      @ save r0
1109071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmInitClass                @ initialize class
1109171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ check boolean result
1109271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, r9                      @ restore r0
1109371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_NEW_INSTANCE_initialized     @ success, continue
1109471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ failed, deal with init exception
1109571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1109671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1109771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Resolution required.  This is the least-likely path.
1109871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1109971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1 holds BBBB
1110071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1110171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_resolve:
111029f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_method] @ r3<- self->method
1110371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #0                      @ r2<- false
1110471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, #offMethod_clazz]  @ r0<- method->clazz
1110571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveClass             @ r0<- resolved ClassObject ptr
1110671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ got null?
1110771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_NEW_INSTANCE_resolved        @ no, continue
1110871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ yes, handle exception
1110971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1111071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LstrInstantiationErrorPtr:
1111171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .word   .LstrInstantiationError
1111271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1111371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_NEW_ARRAY */
1111471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1111571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1111671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1111771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Resolve class.  (This is an uncommon case.)
1111871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1111971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1 holds array length
1112071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r2 holds class ref CCCC
1112171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1112271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_ARRAY_resolve:
111239f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_method] @ r3<- self->method
1112471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r9, r1                      @ r9<- length (save)
1112571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r2                      @ r1<- CCCC
1112671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #0                      @ r2<- false
1112771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, #offMethod_clazz]  @ r0<- method->clazz
1112871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveClass             @ r0<- call(clazz, ref)
1112971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ got null?
1113071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r9                      @ r1<- length (restore)
1113171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yes, handle exception
1113271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ fall through to OP_NEW_ARRAY_finish
1113371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1113471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1113571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Finish allocation.
1113671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1113771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds class
1113871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1 holds array length
1113971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1114071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_ARRAY_finish:
1114171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #ALLOC_DONT_TRACK       @ don't track in local refs table
1114271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmAllocArrayByClass        @ r0<- call(clazz, length, flags)
1114371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ failed?
1114471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, rINST, lsr #8           @ r2<- A+
1114571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yes, handle the exception
1114671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1114771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r2, r2, #15                 @ r2<- A
1114871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1114971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r2)                    @ vA<- r0
1115071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1115171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1115271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_FILLED_NEW_ARRAY */
1115371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1115471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1115571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * On entry:
1115671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds array class
1115771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r10 holds AA or BA
1115871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1115971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_continue:
1116071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offClassObject_descriptor] @ r3<- arrayClass->descriptor
1116171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #ALLOC_DONT_TRACK       @ r2<- alloc flags
1116271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldrb    rINST, [r3, #1]             @ rINST<- descriptor[1]
1116371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if     0
1116471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r10                     @ r1<- AA (length)
1116571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .else
1116671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r10, lsr #4             @ r1<- B (length)
1116771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1116871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     rINST, #'I'                 @ array of ints?
1116971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpne   rINST, #'L'                 @ array of objects?
1117071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpne   rINST, #'['                 @ array of arrays?
1117171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r9, r1                      @ save length in r9
1117271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_FILLED_NEW_ARRAY_notimpl         @ no, not handled yet
1117371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmAllocArrayByClass        @ r0<- call(arClass, length, flags)
1117471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ null return?
1117571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ alloc failed, handle exception
1117671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1117771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- FEDC or CCCC
111789f601a917c8878204482c37aec7005054b6776fabuzbee    str     r0, [rSELF, #offThread_retval]      @ retval.l <- new array
111799f601a917c8878204482c37aec7005054b6776fabuzbee    str     rINST, [rSELF, #offThread_retval+4] @ retval.h <- type
1118071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r0, r0, #offArrayObject_contents @ r0<- newArray->contents
1118171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    subs    r9, r9, #1                  @ length--, check for neg
1118271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(3)               @ advance to next instr, load rINST
1118371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bmi     2f                          @ was zero, bail
1118471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1118571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ copy values from registers into the array
1118671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ r0=array, r1=CCCC/FEDC, r9=length (from AA or B), r10=AA/BA
1118771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if     0
1118871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r2, rFP, r1, lsl #2         @ r2<- &fp[CCCC]
1118971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1:  ldr     r3, [r2], #4                @ r3<- *r2++
1119071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    subs    r9, r9, #1                  @ count--
1119171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str     r3, [r0], #4                @ *contents++ = vX
1119271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bpl     1b
1119371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ continue at 2
1119471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .else
1119571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #4                      @ length was initially 5?
1119671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r2, r10, #15                @ r2<- A
1119771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     1f                          @ <= 4 args, branch
1119871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r3, r2)                    @ r3<- vA
1119971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    sub     r9, r9, #1                  @ count--
1120071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str     r3, [r0, #16]               @ contents[4] = vA
1120171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1:  and     r2, r1, #15                 @ r2<- F/E/D/C
1120271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r3, r2)                    @ r3<- vF/vE/vD/vC
1120371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r1, lsr #4              @ r1<- next reg in low 4
1120471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    subs    r9, r9, #1                  @ count--
1120571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str     r3, [r0], #4                @ *contents++ = vX
1120671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bpl     1b
1120771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ continue at 2
1120871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1120971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1121071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao2:
112119f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r0, [rSELF, #offThread_retval]     @ r0<- object
112129f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r1, [rSELF, #offThread_retval+4]   @ r1<- type
112139f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_cardTable]  @ r2<- card table base
1121471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                      @ ip<- opcode from rINST
1121571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r1, #'I'                         @ Is int array?
1121671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    strneb  r2, [r2, r0, lsr #GC_CARD_SHIFT] @ Mark card based on object head
1121771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                          @ execute it
1121871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1121971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1122071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Throw an exception indicating that we have not implemented this
1122171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * mode of filled-new-array.
1122271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1122371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_notimpl:
1122471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, .L_strInternalError
1122571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, .L_strFilledNewArrayNotImpl
1122671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmThrowException
1122771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown
1122871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1122971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if     (!0)                 @ define in one or the other, not both
1123071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_strFilledNewArrayNotImpl:
1123171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .word   .LstrFilledNewArrayNotImpl
1123271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_strInternalError:
1123371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .word   .LstrInternalError
1123471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1123571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1123671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_FILLED_NEW_ARRAY_RANGE */
1123771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1123871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1123971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * On entry:
1124071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds array class
1124171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r10 holds AA or BA
1124271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1124371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_RANGE_continue:
1124471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offClassObject_descriptor] @ r3<- arrayClass->descriptor
1124571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #ALLOC_DONT_TRACK       @ r2<- alloc flags
1124671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldrb    rINST, [r3, #1]             @ rINST<- descriptor[1]
1124771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if     1
11248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r10                     @ r1<- AA (length)
11249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .else
1125071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r10, lsr #4             @ r1<- B (length)
1125171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1125271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     rINST, #'I'                 @ array of ints?
1125371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpne   rINST, #'L'                 @ array of objects?
1125471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpne   rINST, #'['                 @ array of arrays?
1125571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r9, r1                      @ save length in r9
1125671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_FILLED_NEW_ARRAY_RANGE_notimpl         @ no, not handled yet
1125771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmAllocArrayByClass        @ r0<- call(arClass, length, flags)
1125871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ null return?
1125971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ alloc failed, handle exception
1126071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1126171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- FEDC or CCCC
112629f601a917c8878204482c37aec7005054b6776fabuzbee    str     r0, [rSELF, #offThread_retval]      @ retval.l <- new array
112639f601a917c8878204482c37aec7005054b6776fabuzbee    str     rINST, [rSELF, #offThread_retval+4] @ retval.h <- type
1126471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r0, r0, #offArrayObject_contents @ r0<- newArray->contents
1126571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    subs    r9, r9, #1                  @ length--, check for neg
1126671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(3)               @ advance to next instr, load rINST
1126771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bmi     2f                          @ was zero, bail
1126871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1126971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ copy values from registers into the array
1127071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ r0=array, r1=CCCC/FEDC, r9=length (from AA or B), r10=AA/BA
1127171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if     1
1127271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r2, rFP, r1, lsl #2         @ r2<- &fp[CCCC]
1127371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1:  ldr     r3, [r2], #4                @ r3<- *r2++
1127471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    subs    r9, r9, #1                  @ count--
1127571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str     r3, [r0], #4                @ *contents++ = vX
1127671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bpl     1b
1127771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ continue at 2
1127871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .else
1127971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #4                      @ length was initially 5?
1128071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r2, r10, #15                @ r2<- A
1128171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     1f                          @ <= 4 args, branch
1128271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r3, r2)                    @ r3<- vA
1128371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    sub     r9, r9, #1                  @ count--
1128471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str     r3, [r0, #16]               @ contents[4] = vA
1128571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1:  and     r2, r1, #15                 @ r2<- F/E/D/C
1128671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r3, r2)                    @ r3<- vF/vE/vD/vC
1128771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r1, lsr #4              @ r1<- next reg in low 4
1128871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    subs    r9, r9, #1                  @ count--
1128971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str     r3, [r0], #4                @ *contents++ = vX
1129071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bpl     1b
1129171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ continue at 2
1129271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1129371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1129471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao2:
112959f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r0, [rSELF, #offThread_retval]     @ r0<- object
112969f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r1, [rSELF, #offThread_retval+4]   @ r1<- type
112979f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_cardTable]  @ r2<- card table base
1129871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                      @ ip<- opcode from rINST
1129971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r1, #'I'                         @ Is int array?
1130071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    strneb  r2, [r2, r0, lsr #GC_CARD_SHIFT] @ Mark card based on object head
1130171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                          @ execute it
1130271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1130371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1130471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Throw an exception indicating that we have not implemented this
1130571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * mode of filled-new-array.
1130671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1130771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_RANGE_notimpl:
1130871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, .L_strInternalError
1130971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, .L_strFilledNewArrayNotImpl
1131071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmThrowException
1131171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown
1131271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1131371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if     (!1)                 @ define in one or the other, not both
1131471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_strFilledNewArrayNotImpl:
1131571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .word   .LstrFilledNewArrayNotImpl
1131671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_strInternalError:
1131771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .word   .LstrInternalError
1131871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1131971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1132071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CMPL_FLOAT */
1132171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1132271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ Test for NaN with a second comparison.  EABI forbids testing bit
1132371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ patterns, and we can't represent 0x7fc00000 in immediate form, so
1132471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ make the library call.
1132571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMPL_FLOAT_gt_or_nan:
1132671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r9                      @ reverse order
1132771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, r10
1132871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      __aeabi_cfcmple             @ r0<- Z set if eq, C clear if <
1132971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bleq    common_abort
1133071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movcc   r1, #1                      @ (greater than) r1<- 1
1133171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bcc     .LOP_CMPL_FLOAT_finish
1133271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mvn     r1, #0                            @ r1<- 1 or -1 for NaN
1133371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_CMPL_FLOAT_finish
1133471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1133571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1133671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao#if 0       /* "clasic" form */
1133771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r0<- CCBB
1133871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r2, r0, #255                @ r2<- BB
1133971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r3, r0, lsr #8              @ r3<- CC
1134071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r9, r2)                    @ r9<- vBB
1134171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r10, r3)                   @ r10<- vCC
1134271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, r9                      @ r0<- vBB
1134371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r10                     @ r1<- vCC
1134471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      __aeabi_fcmpeq              @ r0<- (vBB == vCC)
1134571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ equal?
1134671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movne   r1, #0                      @ yes, result is 0
1134771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     OP_CMPL_FLOAT_finish
1134871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, r9                      @ r0<- vBB
1134971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r10                     @ r1<- vCC
1135071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      __aeabi_fcmplt              @ r0<- (vBB < vCC)
1135171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ less than?
1135271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       OP_CMPL_FLOAT_continue
1135371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao@%break
1135471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1135571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhaoOP_CMPL_FLOAT_continue:
1135671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mvnne   r1, #0                      @ yes, result is -1
1135771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     OP_CMPL_FLOAT_finish
1135871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, r9                      @ r0<- vBB
1135971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r10                     @ r1<- vCC
1136071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      __aeabi_fcmpgt              @ r0<- (vBB > vCC)
1136171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ greater than?
1136271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     OP_CMPL_FLOAT_nan               @ no, must be NaN
1136371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, #1                      @ yes, result is 1
1136471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ fall through to _finish
1136571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1136671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhaoOP_CMPL_FLOAT_finish:
1136771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r3, rINST, lsr #8           @ r3<- AA
1136871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1136971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r1, r3)                    @ vAA<- r1
1137071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1137171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1137271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1137371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1137471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * This is expected to be uncommon, so we double-branch (once to here,
1137571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * again back to _finish).
1137671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1137771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhaoOP_CMPL_FLOAT_nan:
1137871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mvn     r1, #0                            @ r1<- 1 or -1 for NaN
1137971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       OP_CMPL_FLOAT_finish
1138071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1138171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao#endif
1138271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1138371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CMPG_FLOAT */
1138471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1138571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ Test for NaN with a second comparison.  EABI forbids testing bit
1138671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ patterns, and we can't represent 0x7fc00000 in immediate form, so
1138771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ make the library call.
1138871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMPG_FLOAT_gt_or_nan:
1138971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r9                      @ reverse order
1139071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, r10
1139171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      __aeabi_cfcmple             @ r0<- Z set if eq, C clear if <
1139271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bleq    common_abort
1139371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movcc   r1, #1                      @ (greater than) r1<- 1
1139471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bcc     .LOP_CMPG_FLOAT_finish
1139571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, #1                            @ r1<- 1 or -1 for NaN
1139671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_CMPG_FLOAT_finish
1139771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1139871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1139971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao#if 0       /* "clasic" form */
1140071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r0, 1)                        @ r0<- CCBB
1140171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r2, r0, #255                @ r2<- BB
1140271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r3, r0, lsr #8              @ r3<- CC
1140371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r9, r2)                    @ r9<- vBB
1140471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r10, r3)                   @ r10<- vCC
1140571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, r9                      @ r0<- vBB
1140671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r10                     @ r1<- vCC
1140771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      __aeabi_fcmpeq              @ r0<- (vBB == vCC)
1140871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ equal?
1140971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movne   r1, #0                      @ yes, result is 0
1141071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     OP_CMPG_FLOAT_finish
1141171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, r9                      @ r0<- vBB
1141271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r10                     @ r1<- vCC
1141371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      __aeabi_fcmplt              @ r0<- (vBB < vCC)
1141471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ less than?
1141571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       OP_CMPG_FLOAT_continue
1141671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao@%break
1141771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1141871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhaoOP_CMPG_FLOAT_continue:
1141971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mvnne   r1, #0                      @ yes, result is -1
1142071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     OP_CMPG_FLOAT_finish
1142171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, r9                      @ r0<- vBB
1142271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r10                     @ r1<- vCC
1142371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      __aeabi_fcmpgt              @ r0<- (vBB > vCC)
1142471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ greater than?
1142571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     OP_CMPG_FLOAT_nan               @ no, must be NaN
1142671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, #1                      @ yes, result is 1
1142771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ fall through to _finish
1142871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1142971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhaoOP_CMPG_FLOAT_finish:
1143071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r3, rINST, lsr #8           @ r3<- AA
1143171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1143271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r1, r3)                    @ vAA<- r1
1143371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1143471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1143571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1143671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1143771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * This is expected to be uncommon, so we double-branch (once to here,
1143871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * again back to _finish).
1143971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1144071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhaoOP_CMPG_FLOAT_nan:
1144171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, #1                            @ r1<- 1 or -1 for NaN
1144271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       OP_CMPG_FLOAT_finish
1144371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1144471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao#endif
1144571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1144671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CMPL_DOUBLE */
1144771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1144871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ Test for NaN with a second comparison.  EABI forbids testing bit
1144971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ patterns, and we can't represent 0x7fc00000 in immediate form, so
1145071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ make the library call.
1145171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMPL_DOUBLE_gt_or_nan:
1145271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldmia   r10, {r0-r1}                @ reverse order
1145371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldmia   r9, {r2-r3}
1145471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      __aeabi_cdcmple             @ r0<- Z set if eq, C clear if <
1145571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bleq    common_abort
1145671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movcc   r1, #1                      @ (greater than) r1<- 1
1145771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bcc     .LOP_CMPL_DOUBLE_finish
1145871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mvn     r1, #0                            @ r1<- 1 or -1 for NaN
1145971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_CMPL_DOUBLE_finish
1146071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1146171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CMPG_DOUBLE */
1146271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1146371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ Test for NaN with a second comparison.  EABI forbids testing bit
1146471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ patterns, and we can't represent 0x7fc00000 in immediate form, so
1146571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ make the library call.
1146671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMPG_DOUBLE_gt_or_nan:
1146771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldmia   r10, {r0-r1}                @ reverse order
1146871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldmia   r9, {r2-r3}
1146971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      __aeabi_cdcmple             @ r0<- Z set if eq, C clear if <
1147071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bleq    common_abort
1147171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movcc   r1, #1                      @ (greater than) r1<- 1
1147271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bcc     .LOP_CMPG_DOUBLE_finish
1147371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, #1                            @ r1<- 1 or -1 for NaN
1147471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_CMPG_DOUBLE_finish
1147571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1147671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CMP_LONG */
1147771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1147871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMP_LONG_less:
1147971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mvn     r1, #0                      @ r1<- -1
1148071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ Want to cond code the next mov so we can avoid branch, but don't see it;
1148171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ instead, we just replicate the tail end.
1148271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1148371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r1, r9)                    @ vAA<- r1
1148471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1148571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1148671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1148771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMP_LONG_greater:
1148871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, #1                      @ r1<- 1
1148971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ fall through to _finish
1149071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1149171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMP_LONG_finish:
1149271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1149371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r1, r9)                    @ vAA<- r1
1149471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1149571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1149671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1149771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_AGET_WIDE */
1149871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1149971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_AGET_WIDE_finish:
1150071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1150171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldrd    r2, [r0, #offArrayObject_contents]  @ r2/r3<- vBB[vCC]
1150271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r9, rFP, r9, lsl #2         @ r9<- &fp[AA]
1150371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1150471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    stmia   r9, {r2-r3}                 @ vAA/vAA+1<- r2/r3
1150571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1150671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1150771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_APUT_WIDE */
1150871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1150971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_APUT_WIDE_finish:
1151071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1151171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldmia   r9, {r2-r3}                 @ r2/r3<- vAA/vAA+1
1151271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1151371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    strd    r2, [r0, #offArrayObject_contents]  @ r2/r3<- vBB[vCC]
1151471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1151571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1151671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_APUT_OBJECT */
1151771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1151871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * On entry:
1151971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  rINST = vBB (arrayObj)
1152071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 = vAA (obj)
1152171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r10 = offset into array (vBB + vCC * width)
1152271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1152371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_APUT_OBJECT_finish:
1152471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ storing null reference?
1152571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_APUT_OBJECT_skip_check      @ yes, skip type checks
1152671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r9, #offObject_clazz]  @ r0<- obj->clazz
1152771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, [rINST, #offObject_clazz]  @ r1<- arrayObj->clazz
1152871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmCanPutArrayElement       @ test object type vs. array type
1152971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ okay?
1153071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_APUT_OBJECT_throw           @ no
1153171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, rINST                   @ r1<- arrayObj
1153271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
115339f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_cardTable]     @ get biased CT base
1153471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r10, #offArrayObject_contents   @ r0<- pointer to slot
1153571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1153671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str     r9, [r10]                   @ vBB[vCC]<- vAA
1153771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    strb    r2, [r2, r1, lsr #GC_CARD_SHIFT] @ mark card using object head
1153871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1153971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_APUT_OBJECT_skip_check:
1154071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1154171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1154271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str     r9, [r10, #offArrayObject_contents] @ vBB[vCC]<- vAA
1154371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1154471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_APUT_OBJECT_throw:
1154571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ The types don't match.  We need to throw an ArrayStoreException.
1154671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r9, #offObject_clazz]
1154771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, [rINST, #offObject_clazz]
1154871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()
1154971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmThrowArrayStoreException
1155071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown
1155171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1155271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET */
1155371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1155471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1155571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1155671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1155771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1155871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1155971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_finish:
1156071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak0
1156171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1156271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1156371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1156471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr   r0, [r9, r3]                @ r0<- obj.field (8/16/32 bits)
1156571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ acquiring load
1156671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, rINST, lsr #8           @ r2<- A+
1156771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1156871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r2, r2, #15                 @ r2<- A
1156971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1157071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r2)                    @ fp[A]<- r0
1157171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1157271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1157371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_WIDE */
1157471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1157571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1157671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1157771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1157871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1157971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1158071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_WIDE_finish:
1158171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1158271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1158371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1158471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if     0
1158571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r0, r9, r3                  @ r0<- address of field
1158671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmQuasiAtomicRead64        @ r0/r1<- contents of field
1158771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .else
1158871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldrd    r0, [r9, r3]                @ r0/r1<- obj.field (64-bit align ok)
11589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
1159071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, rINST, lsr #8           @ r2<- A+
1159171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1159271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r2, r2, #15                 @ r2<- A
1159371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r3, rFP, r2, lsl #2         @ r3<- &fp[A]
1159471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1159571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    stmia   r3, {r0-r1}                 @ fp[A]<- r0/r1
1159671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1159771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1159871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_OBJECT */
1159971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1160071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1160171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1160271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1160371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1160471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1160571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_OBJECT_finish:
1160671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak0
1160771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1160871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1160971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1161071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr   r0, [r9, r3]                @ r0<- obj.field (8/16/32 bits)
1161171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ acquiring load
1161271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, rINST, lsr #8           @ r2<- A+
1161371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1161471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r2, r2, #15                 @ r2<- A
1161571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1161671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r2)                    @ fp[A]<- r0
1161771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1161871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1161971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_BOOLEAN */
1162071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1162171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1162271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1162371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1162471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1162571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1162671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BOOLEAN_finish:
1162771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak1
1162871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1162971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1163071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1163171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr   r0, [r9, r3]                @ r0<- obj.field (8/16/32 bits)
1163271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ acquiring load
1163371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, rINST, lsr #8           @ r2<- A+
1163471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1163571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r2, r2, #15                 @ r2<- A
1163671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1163771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r2)                    @ fp[A]<- r0
1163871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1163971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1164071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_BYTE */
1164171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1164271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1164371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1164471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1164571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1164671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1164771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BYTE_finish:
1164871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak2
1164971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1165071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1165171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1165271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr   r0, [r9, r3]                @ r0<- obj.field (8/16/32 bits)
1165371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ acquiring load
1165471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, rINST, lsr #8           @ r2<- A+
1165571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1165671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r2, r2, #15                 @ r2<- A
1165771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1165871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r2)                    @ fp[A]<- r0
1165971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1166071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1166171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_CHAR */
1166271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1166371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1166471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1166571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1166671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1166771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1166871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_CHAR_finish:
1166971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak3
1167071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1167171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1167271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1167371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr   r0, [r9, r3]                @ r0<- obj.field (8/16/32 bits)
1167471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ acquiring load
1167571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, rINST, lsr #8           @ r2<- A+
1167671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1167771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r2, r2, #15                 @ r2<- A
1167871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1167971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r2)                    @ fp[A]<- r0
1168071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1168171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1168271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_SHORT */
1168371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1168471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1168571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1168671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1168771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1168871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1168971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_SHORT_finish:
1169071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak4
1169171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1169271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1169371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1169471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr   r0, [r9, r3]                @ r0<- obj.field (8/16/32 bits)
1169571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ acquiring load
1169671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, rINST, lsr #8           @ r2<- A+
1169771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1169871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r2, r2, #15                 @ r2<- A
1169971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1170071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r2)                    @ fp[A]<- r0
1170171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1170271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1170371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT */
11704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1170571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1170671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1170771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1170871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1170971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1171071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_finish:
1171171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak0
1171271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, rINST, lsr #8           @ r1<- A+
1171371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1171471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r1, r1, #15                 @ r1<- A
1171571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1171671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r0, r1)                    @ r0<- fp[A]
1171771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1171871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1171971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1172071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ releasing store
1172171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str  r0, [r9, r3]                @ obj.field (8/16/32 bits)<- r0
1172271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
11723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1172471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_WIDE */
1172571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1172671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1172771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1172871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1172971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1173071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1173171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_WIDE_finish:
1173271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, rINST, lsr #8           @ r2<- A+
1173371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1173471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r2, r2, #15                 @ r2<- A
1173571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1173671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r2, rFP, r2, lsl #2         @ r3<- &fp[A]
1173771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1173871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1173971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldmia   r2, {r0-r1}                 @ r0/r1<- fp[A]
1174071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(r10)                @ extract opcode from rINST
1174171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if     0
1174271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r2, r9, r3                  @ r2<- target address
1174371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmQuasiAtomicSwap64        @ stores r0/r1 into addr r2
11744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .else
1174571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    strd    r0, [r9, r3]                @ obj.field (64 bits, aligned)<- r0/r1
11746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
1174771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(r10)                    @ jump to next instruction
11748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1174971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_OBJECT */
1175071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1175171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1175271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1175371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1175471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1175571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1175671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_OBJECT_finish:
1175771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak0
1175871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, rINST, lsr #8           @ r1<- A+
1175971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1176071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r1, r1, #15                 @ r1<- A
1176171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1176271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r0, r1)                    @ r0<- fp[A]
117639f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_cardTable]  @ r2<- card table base
1176471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1176571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1176671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1176771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ releasing store
1176871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str     r0, [r9, r3]                @ obj.field (32 bits)<- r0
1176971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ stored a null reference?
1177071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    strneb  r2, [r2, r9, lsr #GC_CARD_SHIFT]  @ mark card if not
1177171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1177271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1177371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_BOOLEAN */
1177471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1177571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1177671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1177771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1177871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1177971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1178071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BOOLEAN_finish:
1178171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak1
1178271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, rINST, lsr #8           @ r1<- A+
1178371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1178471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r1, r1, #15                 @ r1<- A
1178571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1178671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r0, r1)                    @ r0<- fp[A]
1178771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1178871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1178971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1179071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ releasing store
1179171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str  r0, [r9, r3]                @ obj.field (8/16/32 bits)<- r0
1179271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1179371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1179471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_BYTE */
1179571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1179671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1179771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1179871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1179971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1180071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1180171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BYTE_finish:
1180271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak2
1180371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, rINST, lsr #8           @ r1<- A+
1180471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1180571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r1, r1, #15                 @ r1<- A
1180671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1180771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r0, r1)                    @ r0<- fp[A]
1180871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1180971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1181071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1181171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ releasing store
1181271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str  r0, [r9, r3]                @ obj.field (8/16/32 bits)<- r0
1181371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1181471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1181571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_CHAR */
1181671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1181771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1181871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1181971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1182071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1182171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1182271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_CHAR_finish:
1182371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak3
1182471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, rINST, lsr #8           @ r1<- A+
1182571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1182671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r1, r1, #15                 @ r1<- A
1182771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1182871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r0, r1)                    @ r0<- fp[A]
1182971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1183071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1183171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1183271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ releasing store
1183371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str  r0, [r9, r3]                @ obj.field (8/16/32 bits)<- r0
1183471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1183571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1183671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_SHORT */
1183771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1183871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1183971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1184071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1184171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1184271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1184371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_SHORT_finish:
1184471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak4
1184571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, rINST, lsr #8           @ r1<- A+
1184671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1184771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r1, r1, #15                 @ r1<- A
1184871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1184971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r0, r1)                    @ r0<- fp[A]
1185071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1185171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1185271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1185371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ releasing store
1185471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str  r0, [r9, r3]                @ obj.field (8/16/32 bits)<- r0
1185571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1185671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1185771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET */
1185871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1185971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1186071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1186171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: BBBB field ref
1186271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1186371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_resolve:
118649f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1186571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1186671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1186771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1186871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1186971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SGET_finish          @ yes, finish
1187071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
1187171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1187271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_WIDE */
1187371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1187471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1187571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1187671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: BBBB field ref
1187771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1187871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Returns StaticField pointer in r0.
1187971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1188071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_WIDE_resolve:
118819f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1188271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1188371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1188471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1188571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1188671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SGET_WIDE_finish          @ yes, finish
1188771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
1188871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1188971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_OBJECT */
1189071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1189171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1189271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1189371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: BBBB field ref
1189471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1189571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_OBJECT_resolve:
118969f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1189771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1189871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1189971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1190071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1190171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SGET_OBJECT_finish          @ yes, finish
1190271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
1190371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1190471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_BOOLEAN */
1190571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1190671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1190771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1190871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: BBBB field ref
1190971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1191071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_BOOLEAN_resolve:
119119f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1191271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1191371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1191471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1191571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1191671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SGET_BOOLEAN_finish          @ yes, finish
1191771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
1191871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1191971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_BYTE */
1192071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1192171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1192271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1192371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: BBBB field ref
1192471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1192571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_BYTE_resolve:
119269f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1192771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1192871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1192971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1193071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1193171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SGET_BYTE_finish          @ yes, finish
1193271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
1193371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1193471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_CHAR */
11935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
11936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1193771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1193871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: BBBB field ref
11939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1194071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_CHAR_resolve:
119419f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1194271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1194371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1194471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1194571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1194671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SGET_CHAR_finish          @ yes, finish
1194771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
11948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1194971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_SHORT */
11950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1195171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1195271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1195371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: BBBB field ref
1195471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1195571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_SHORT_resolve:
119569f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1195771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1195871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1195971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1196071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1196171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SGET_SHORT_finish          @ yes, finish
1196271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
11963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1196471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT */
11965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1196671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1196771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1196871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: BBBB field ref
1196971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1197071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_resolve:
119719f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1197271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1197371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1197471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1197571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1197671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SPUT_finish          @ yes, finish
1197771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
11978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1197971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_WIDE */
11980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1198171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1198271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1198371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: BBBB field ref
1198471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9: &fp[AA]
1198571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1198671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Returns StaticField pointer in r2.
1198771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1198871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_WIDE_resolve:
119899f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1199071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1199171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1199271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1199371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1199471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, r0                      @ copy to r2
1199571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SPUT_WIDE_finish          @ yes, finish
1199671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
11997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1199871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_OBJECT */
1199971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_OBJECT_finish:   @ field ptr in r0
1200071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, rINST, lsr #8           @ r2<- AA
12001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1200271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r1, r2)                    @ r1<- fp[AA]
120039f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_cardTable]  @ r2<- card table base
1200471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r9, [r0, #offField_clazz]   @ r9<- field->clazz
12005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1200671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ releasing store
1200771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str     r1, [r0, #offStaticField_value]  @ field<- vAA
1200871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r1, #0                      @ stored a null object?
1200971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    strneb  r2, [r2, r9, lsr #GC_CARD_SHIFT]  @ mark card based on obj head
12010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
12011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1201271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_BOOLEAN */
1201371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
12014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1201571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1201671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: BBBB field ref
12017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1201871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_BOOLEAN_resolve:
120199f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1202071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1202171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1202271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1202371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1202471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SPUT_BOOLEAN_finish          @ yes, finish
1202571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
12026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1202771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_BYTE */
12028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1202971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1203071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1203171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: BBBB field ref
1203271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1203371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_BYTE_resolve:
120349f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1203571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1203671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1203771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1203871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1203971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SPUT_BYTE_finish          @ yes, finish
1204071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
12041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1204271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_CHAR */
12043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1204571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1204671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: BBBB field ref
12047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1204871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_CHAR_resolve:
120499f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1205071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1205171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1205271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1205371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1205471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SPUT_CHAR_finish          @ yes, finish
1205571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
12056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1205771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_SHORT */
12058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1205971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1206071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1206171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: BBBB field ref
1206271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1206371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_SHORT_resolve:
120649f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1206571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1206671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1206771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1206871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1206971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SPUT_SHORT_finish          @ yes, finish
1207071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
12071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1207271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_VIRTUAL */
12073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1207471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1207571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * At this point:
1207671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 = resolved base method
1207771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r10 = C or CCCC (index of first arg, which is the "this" ptr)
1207871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1207971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_VIRTUAL_continue:
1208071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r1, r10)                   @ r1<- "this" ptr
1208171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldrh    r2, [r0, #offMethod_methodIndex]    @ r2<- baseMethod->methodIndex
1208271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r1, #0                      @ is "this" null?
1208371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ null "this", throw exception
1208471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r1, #offObject_clazz]  @ r1<- thisPtr->clazz
1208571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r3, #offClassObject_vtable]    @ r3<- thisPtr->clazz->vtable
1208671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, r2, lsl #2]        @ r3<- vtable[methodIndex]
1208771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_invokeMethodNoRange @ continue on
12088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1208971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_SUPER */
12090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1209171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1209271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * At this point:
1209371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 = resolved base method
1209471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 = method->clazz
1209571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1209671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_continue:
1209771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, [r9, #offClassObject_super]     @ r1<- method->clazz->super
1209871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldrh    r2, [r0, #offMethod_methodIndex]    @ r2<- baseMethod->methodIndex
1209971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r1, #offClassObject_vtableCount]   @ r3<- super->vtableCount
1210071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ must export for invoke
1210171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r2, r3                      @ compare (methodIndex, vtableCount)
1210271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bcs     .LOP_INVOKE_SUPER_nsm             @ method not present in superclass
1210371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, [r1, #offClassObject_vtable]    @ r1<- ...clazz->super->vtable
1210471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r1, r2, lsl #2]        @ r3<- vtable[methodIndex]
1210571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_invokeMethodNoRange @ continue on
12106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1210771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_resolve:
1210871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, r9                      @ r0<- method->clazz
1210971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #METHOD_VIRTUAL         @ resolver method type
1211071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveMethod            @ r0<- call(clazz, ref, flags)
1211171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ got null?
1211271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_INVOKE_SUPER_continue        @ no, continue
1211371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ yes, handle exception
12114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1211571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1211671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Throw a NoSuchMethodError with the method name as the message.
1211771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 = resolved base method
1211871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1211971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_nsm:
1212071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, [r0, #offMethod_name]   @ r1<- method name
1212171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_errNoSuchMethod
12122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1212371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_DIRECT */
12124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1212571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1212671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * On entry:
1212771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1 = reference (BBBB or CCCC)
1212871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r10 = "this" register
1212971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1213071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_DIRECT_resolve:
121319f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_method] @ r3<- self->method
1213271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, #offMethod_clazz]  @ r0<- method->clazz
1213371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #METHOD_DIRECT          @ resolver method type
1213471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveMethod            @ r0<- call(clazz, ref, flags)
1213571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ got null?
1213671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r2, r10)                   @ r2<- "this" ptr (reload)
1213771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_INVOKE_DIRECT_finish          @ no, continue
1213871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ yes, handle exception
12139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1214071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_VIRTUAL_RANGE */
12141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1214271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1214371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * At this point:
1214471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 = resolved base method
1214571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r10 = C or CCCC (index of first arg, which is the "this" ptr)
1214671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1214771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_VIRTUAL_RANGE_continue:
1214871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r1, r10)                   @ r1<- "this" ptr
1214971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldrh    r2, [r0, #offMethod_methodIndex]    @ r2<- baseMethod->methodIndex
1215071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r1, #0                      @ is "this" null?
1215171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ null "this", throw exception
1215271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r1, #offObject_clazz]  @ r1<- thisPtr->clazz
1215371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r3, #offClassObject_vtable]    @ r3<- thisPtr->clazz->vtable
1215471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, r2, lsl #2]        @ r3<- vtable[methodIndex]
1215571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_invokeMethodRange @ continue on
12156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1215771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_SUPER_RANGE */
12158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1216071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * At this point:
1216171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 = resolved base method
1216271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 = method->clazz
12163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1216471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_RANGE_continue:
1216571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, [r9, #offClassObject_super]     @ r1<- method->clazz->super
1216671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldrh    r2, [r0, #offMethod_methodIndex]    @ r2<- baseMethod->methodIndex
1216771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r1, #offClassObject_vtableCount]   @ r3<- super->vtableCount
1216871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ must export for invoke
1216971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r2, r3                      @ compare (methodIndex, vtableCount)
1217071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bcs     .LOP_INVOKE_SUPER_RANGE_nsm             @ method not present in superclass
1217171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, [r1, #offClassObject_vtable]    @ r1<- ...clazz->super->vtable
1217271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r1, r2, lsl #2]        @ r3<- vtable[methodIndex]
1217371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_invokeMethodRange @ continue on
12174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1217571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_RANGE_resolve:
1217671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, r9                      @ r0<- method->clazz
1217771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #METHOD_VIRTUAL         @ resolver method type
1217871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveMethod            @ r0<- call(clazz, ref, flags)
1217971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ got null?
1218071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_INVOKE_SUPER_RANGE_continue        @ no, continue
1218171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ yes, handle exception
12182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1218471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Throw a NoSuchMethodError with the method name as the message.
1218571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 = resolved base method
12186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1218771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_RANGE_nsm:
1218871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, [r0, #offMethod_name]   @ r1<- method name
1218971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_errNoSuchMethod
12190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1219171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_DIRECT_RANGE */
12192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1219471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * On entry:
1219571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1 = reference (BBBB or CCCC)
1219671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r10 = "this" register
12197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1219871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_DIRECT_RANGE_resolve:
121999f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_method] @ r3<- self->method
1220071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, #offMethod_clazz]  @ r0<- method->clazz
1220171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #METHOD_DIRECT          @ resolver method type
1220271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveMethod            @ r0<- call(clazz, ref, flags)
1220371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ got null?
1220471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r2, r10)                   @ r2<- "this" ptr (reload)
1220571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_INVOKE_DIRECT_RANGE_finish          @ no, continue
1220671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ yes, handle exception
1220771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1220871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_FLOAT_TO_LONG */
1220971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/*
1221071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Convert the float in r0 to a long in r0/r1.
1221171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *
1221271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * We have to clip values to long min/max per the specification.  The
1221371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * expected common case is a "reasonable" value that converts directly
1221471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * to modest integer.  The EABI convert function isn't doing this for us.
1221571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */
1221671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhaof2l_doconv:
1221771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    stmfd   sp!, {r4, lr}
1221871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, #0x5f000000             @ (float)maxlong
1221971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r4, r0
1222071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      __aeabi_fcmpge              @ is arg >= maxlong?
1222171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ nonzero == yes
1222271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mvnne   r0, #0                      @ return maxlong (7fffffff)
1222371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mvnne   r1, #0x80000000
1222471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldmnefd sp!, {r4, pc}
1222571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1222671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, r4                      @ recover arg
1222771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, #0xdf000000             @ (float)minlong
1222871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      __aeabi_fcmple              @ is arg <= minlong?
1222971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ nonzero == yes
1223071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movne   r0, #0                      @ return minlong (80000000)
1223171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movne   r1, #0x80000000
1223271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldmnefd sp!, {r4, pc}
1223371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1223471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, r4                      @ recover arg
1223571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r4
1223671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      __aeabi_fcmpeq              @ is arg == self?
1223771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ zero == no
1223871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    moveq   r1, #0                      @ return zero for NaN
1223971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldmeqfd sp!, {r4, pc}
12240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1224171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, r4                      @ recover arg
1224271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      __aeabi_f2lz                @ convert float to long
1224371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldmfd   sp!, {r4, pc}
12244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1224571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_DOUBLE_TO_LONG */
1224671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/*
1224771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Convert the double in r0/r1 to a long in r0/r1.
1224871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *
1224971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * We have to clip values to long min/max per the specification.  The
1225071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * expected common case is a "reasonable" value that converts directly
1225171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * to modest integer.  The EABI convert function isn't doing this for us.
1225271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */
1225371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhaod2l_doconv:
1225471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    stmfd   sp!, {r4, r5, lr}           @ save regs
1225571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r3, #0x43000000             @ maxlong, as a double (high word)
1225671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r3, #0x00e00000             @  0x43e00000
1225771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #0                      @ maxlong, as a double (low word)
1225871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    sub     sp, sp, #4                  @ align for EABI
1225971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r4, r0                      @ save a copy of r0
1226071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r5, r1                      @  and r1
1226171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      __aeabi_dcmpge              @ is arg >= maxlong?
1226271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ nonzero == yes
1226371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mvnne   r0, #0                      @ return maxlong (7fffffffffffffff)
1226471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mvnne   r1, #0x80000000
1226571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     1f
12266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1226771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, r4                      @ recover arg
1226871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r5
1226971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r3, #0xc3000000             @ minlong, as a double (high word)
1227071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r3, #0x00e00000             @  0xc3e00000
1227171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #0                      @ minlong, as a double (low word)
1227271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      __aeabi_dcmple              @ is arg <= minlong?
1227371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ nonzero == yes
1227471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movne   r0, #0                      @ return minlong (8000000000000000)
1227571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    movne   r1, #0x80000000
1227671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     1f
12277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1227871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, r4                      @ recover arg
1227971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r5
1228071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, r4                      @ compare against self
1228171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r3, r5
1228271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      __aeabi_dcmpeq              @ is arg == self?
1228371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ zero == no
1228471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    moveq   r1, #0                      @ return zero for NaN
1228571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     1f
12286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1228771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, r4                      @ recover arg
1228871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r5
1228971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      __aeabi_d2lz                @ convert double to long
12290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1229171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1:
1229271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     sp, sp, #4
1229371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldmfd   sp!, {r4, r5, pc}
12294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1229571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_MUL_LONG */
12296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1229771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_MUL_LONG_finish:
12298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1229971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    stmia   r0, {r9-r10}                @ vAA/vAA+1<- r9/r10
12300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
12301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1230271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SHL_LONG */
12303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1230471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SHL_LONG_finish:
1230571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, r0, asl r2              @  r0<- r0 << r2
12306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1230771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    stmia   r9, {r0-r1}                 @ vAA/vAA+1<- r0/r1
12308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
12309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1231071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SHR_LONG */
12311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1231271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SHR_LONG_finish:
1231371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r1, asr r2              @  r1<- r1 >> r2
12314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1231571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    stmia   r9, {r0-r1}                 @ vAA/vAA+1<- r0/r1
12316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
12317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1231871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_USHR_LONG */
12319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1232071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_USHR_LONG_finish:
1232171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r1, lsr r2              @  r1<- r1 >>> r2
12322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1232371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    stmia   r9, {r0-r1}                 @ vAA/vAA+1<- r0/r1
12324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
12325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1232671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SHL_LONG_2ADDR */
12327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1232871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SHL_LONG_2ADDR_finish:
12329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1233071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    stmia   r9, {r0-r1}                 @ vAA/vAA+1<- r0/r1
1233171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1233271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1233371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SHR_LONG_2ADDR */
1233471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1233571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SHR_LONG_2ADDR_finish:
12336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1233771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    stmia   r9, {r0-r1}                 @ vAA/vAA+1<- r0/r1
12338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
12339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1234071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_USHR_LONG_2ADDR */
1234171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1234271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_USHR_LONG_2ADDR_finish:
1234371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1234471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    stmia   r9, {r0-r1}                 @ vAA/vAA+1<- r0/r1
1234571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1234671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1234771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_VOLATILE */
12348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
12350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Currently:
12351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  r0 holds resolved field
12352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  r9 holds object
12353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1235471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_VOLATILE_finish:
1235571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak0
12356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r9, #0                      @ check object for null
1235771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
12358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ object was null
1235971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr   r0, [r9, r3]                @ r0<- obj.field (8/16/32 bits)
1236071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SMP_DMB                            @ acquiring load
1236171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, rINST, lsr #8           @ r2<- A+
12362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1236371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r2, r2, #15                 @ r2<- A
12364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1236571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r2)                    @ fp[A]<- r0
12366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
12367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1236871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_VOLATILE */
12369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
12371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Currently:
12372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  r0 holds resolved field
12373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  r9 holds object
12374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1237571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_VOLATILE_finish:
1237671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak0
12377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, rINST, lsr #8           @ r1<- A+
12378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
12379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    and     r1, r1, #15                 @ r1<- A
12380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r9, #0                      @ check object for null
12381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r0, r1)                    @ r0<- fp[A]
12382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_errNullObject        @ object was null
12383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
12384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1238571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SMP_DMB                            @ releasing store
12386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    str  r0, [r9, r3]                @ obj.field (8/16/32 bits)<- r0
12387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
12388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1238971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_VOLATILE */
12390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
12392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Continuation if the field has not yet been resolved.
12393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  r1: BBBB field ref
12394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1239571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_VOLATILE_resolve:
123969f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
12397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ resolve() could throw, so export now
12398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
12399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
12400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ success?
1240171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SGET_VOLATILE_finish          @ yes, finish
12402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown      @ no, handle exception
12403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1240471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_VOLATILE */
12405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
12407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Continuation if the field has not yet been resolved.
12408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  r1: BBBB field ref
12409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1241071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_VOLATILE_resolve:
124119f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
12412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ resolve() could throw, so export now
12413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
12414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
12415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ success?
1241671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SPUT_VOLATILE_finish          @ yes, finish
12417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown      @ no, handle exception
12418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1241971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_OBJECT_VOLATILE */
12420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1242271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1242371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1242471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
12425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1242671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_OBJECT_VOLATILE_finish:
1242771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak0
1242871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1242971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1243071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1243171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr   r0, [r9, r3]                @ r0<- obj.field (8/16/32 bits)
1243271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SMP_DMB                            @ acquiring load
1243371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, rINST, lsr #8           @ r2<- A+
1243471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1243571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r2, r2, #15                 @ r2<- A
1243671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1243771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r2)                    @ fp[A]<- r0
1243871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
12439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1244071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_WIDE_VOLATILE */
12441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1244371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1244471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1244571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
12446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1244771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_WIDE_VOLATILE_finish:
1244871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1244971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1245071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1245171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if     1
1245271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r0, r9, r3                  @ r0<- address of field
1245371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmQuasiAtomicRead64        @ r0/r1<- contents of field
1245471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .else
1245571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldrd    r0, [r9, r3]                @ r0/r1<- obj.field (64-bit align ok)
1245671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1245771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, rINST, lsr #8           @ r2<- A+
1245871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1245971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r2, r2, #15                 @ r2<- A
1246071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r3, rFP, r2, lsl #2         @ r3<- &fp[A]
1246171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1246271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    stmia   r3, {r0-r1}                 @ fp[A]<- r0/r1
1246371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
12464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1246571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_WIDE_VOLATILE */
12466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1246871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1246971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1247071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
12471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1247271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_WIDE_VOLATILE_finish:
1247371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, rINST, lsr #8           @ r2<- A+
1247471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1247571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r2, r2, #15                 @ r2<- A
1247671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1247771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r2, rFP, r2, lsl #2         @ r3<- &fp[A]
1247871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1247971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1248071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldmia   r2, {r0-r1}                 @ r0/r1<- fp[A]
1248171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(r10)                @ extract opcode from rINST
1248271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .if     1
1248371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r2, r9, r3                  @ r2<- target address
1248471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmQuasiAtomicSwap64        @ stores r0/r1 into addr r2
1248571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .else
1248671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    strd    r0, [r9, r3]                @ obj.field (64 bits, aligned)<- r0/r1
1248771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .endif
1248871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(r10)                    @ jump to next instruction
12489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1249071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_WIDE_VOLATILE */
12491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
12493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Continuation if the field has not yet been resolved.
12494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  r1: BBBB field ref
1249571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1249671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Returns StaticField pointer in r0.
12497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1249871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_WIDE_VOLATILE_resolve:
124999f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
12500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ resolve() could throw, so export now
12501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
12502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
12503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ success?
1250471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SGET_WIDE_VOLATILE_finish          @ yes, finish
12505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown      @ no, handle exception
12506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1250771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_WIDE_VOLATILE */
12508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
12510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Continuation if the field has not yet been resolved.
12511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  r1: BBBB field ref
1251271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9: &fp[AA]
1251371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1251471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Returns StaticField pointer in r2.
12515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1251671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_WIDE_VOLATILE_resolve:
125179f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
12518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ resolve() could throw, so export now
12519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
12520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
12521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ success?
1252271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, r0                      @ copy to r2
1252371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SPUT_WIDE_VOLATILE_finish          @ yes, finish
12524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown      @ no, handle exception
12525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1252671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_EXECUTE_INLINE */
12527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1252971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Extract args, call function.
1253071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 = #of args (0-4)
1253171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r10 = call index
1253271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  lr = return addr, above  [DO NOT bl out of here w/o preserving LR]
1253371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1253471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Other ideas:
1253571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * - Use a jump table from the main piece to jump directly into the
1253671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   AND/LDR pairs.  Costs a data load, saves a branch.
1253771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * - Have five separate pieces that do the loading, so we can work the
1253871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *   interleave a little better.  Increases code size.
12539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1254071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_EXECUTE_INLINE_continue:
1254171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    rsb     r0, r0, #4                  @ r0<- 4-r0
1254271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r9, 2)                        @ r9<- FEDC
1254371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     pc, pc, r0, lsl #3          @ computed goto, 2 instrs each
1254471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort                @ (skipped due to ARM prefetch)
1254571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao4:  and     ip, r9, #0xf000             @ isolate F
1254671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [rFP, ip, lsr #10]      @ r3<- vF (shift right 12, left 2)
1254771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao3:  and     ip, r9, #0x0f00             @ isolate E
1254871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r2, [rFP, ip, lsr #6]       @ r2<- vE
1254971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao2:  and     ip, r9, #0x00f0             @ isolate D
1255071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, [rFP, ip, lsr #2]       @ r1<- vD
1255171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1:  and     ip, r9, #0x000f             @ isolate C
1255271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [rFP, ip, lsl #2]       @ r0<- vC
1255371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao0:
1255471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r9, .LOP_EXECUTE_INLINE_table       @ table of InlineOperation
1255571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     pc, [r9, r10, lsl #4]       @ sizeof=16, "func" is first entry
1255671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ (not reached)
1255771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1255871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_EXECUTE_INLINE_table:
1255971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .word   gDvmInlineOpsTable
1256071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1256171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_EXECUTE_INLINE_RANGE */
1256271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1256371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1256471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Extract args, call function.
1256571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 = #of args (0-4)
1256671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r10 = call index
1256771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  lr = return addr, above  [DO NOT bl out of here w/o preserving LR]
1256871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1256971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_EXECUTE_INLINE_RANGE_continue:
1257071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    rsb     r0, r0, #4                  @ r0<- 4-r0
1257171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r9, 2)                        @ r9<- CCCC
1257271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     pc, pc, r0, lsl #3          @ computed goto, 2 instrs each
1257371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_abort                @ (skipped due to ARM prefetch)
1257471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao4:  add     ip, r9, #3                  @ base+3
1257571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r3, ip)                    @ r3<- vBase[3]
1257671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao3:  add     ip, r9, #2                  @ base+2
1257771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r2, ip)                    @ r2<- vBase[2]
1257871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao2:  add     ip, r9, #1                  @ base+1
1257971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r1, ip)                    @ r1<- vBase[1]
1258071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1:  add     ip, r9, #0                  @ (nop)
1258171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r0, ip)                    @ r0<- vBase[0]
1258271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao0:
1258371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r9, .LOP_EXECUTE_INLINE_RANGE_table       @ table of InlineOperation
1258471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     pc, [r9, r10, lsl #4]       @ sizeof=16, "func" is first entry
1258571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ (not reached)
1258671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1258771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_EXECUTE_INLINE_RANGE_table:
1258871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .word   gDvmInlineOpsTable
1258971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1259071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_OBJECT_VOLATILE */
1259171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1259271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1259371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1259471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1259571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1259671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1259771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_OBJECT_VOLATILE_finish:
1259871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak0
1259971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, rINST, lsr #8           @ r1<- A+
1260071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1260171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    and     r1, r1, #15                 @ r1<- A
1260271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1260371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r0, r1)                    @ r0<- fp[A]
126049f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_cardTable]  @ r2<- card table base
1260571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1260671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
1260771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1260871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SMP_DMB                            @ releasing store
1260971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str     r0, [r9, r3]                @ obj.field (32 bits)<- r0
1261071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ stored a null reference?
1261171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    strneb  r2, [r2, r9, lsr #GC_CARD_SHIFT]  @ mark card if not
1261271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
12613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1261471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_OBJECT_VOLATILE */
12615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
12617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Continuation if the field has not yet been resolved.
12618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  r1: BBBB field ref
12619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1262071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_OBJECT_VOLATILE_resolve:
126219f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
12622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ resolve() could throw, so export now
12623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
12624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
12625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ success?
1262671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SGET_OBJECT_VOLATILE_finish          @ yes, finish
12627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown      @ no, handle exception
12628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1262971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_OBJECT_VOLATILE */
1263071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_OBJECT_VOLATILE_finish:   @ field ptr in r0
12631919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    mov     r2, rINST, lsr #8           @ r2<- AA
12632919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    FETCH_ADVANCE_INST(2)               @ advance rPC, load rINST
12633919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    GET_VREG(r1, r2)                    @ r1<- fp[AA]
126349f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_cardTable]  @ r2<- card table base
12635b78c76f88ea42e7a3b295c210ca9ee86e7290043buzbee    ldr     r9, [r0, #offField_clazz]   @ r9<- field->clazz
12636919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1263771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SMP_DMB                            @ releasing store
12638b78c76f88ea42e7a3b295c210ca9ee86e7290043buzbee    str     r1, [r0, #offStaticField_value]  @ field<- vAA
12639919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    cmp     r1, #0                      @ stored a null object?
12640d82097f6b409c5cd48568e54eb701604c3cceb18buzbee    strneb  r2, [r2, r9, lsr #GC_CARD_SHIFT]  @ mark card based on obj head
12641919eb063ce4542d3698e10e20aba9a2dfbdd0f82buzbee    GOTO_OPCODE(ip)                     @ jump to next instruction
12642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1264371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CONST_CLASS_JUMBO */
12644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1264671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the Class has not yet been resolved.
1264771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: AAAAAAAA (Class ref)
1264871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9: target register
12649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1265071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CONST_CLASS_JUMBO_resolve:
1265171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()
126529f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r0, [rSELF, #offThread_method] @ r0<- self->method
1265371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #1                      @ r2<- true
1265471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r0, #offMethod_clazz]  @ r0<- method->clazz
1265571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveClass             @ r0<- Class reference
1265671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ failed?
1265771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yup, handle the exception
1265871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(4)               @ advance rPC, load rINST
1265971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1266071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r9)                    @ vBBBB<- r0
1266171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
12662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1266371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CHECK_CAST_JUMBO */
12664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1266671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Trivial test failed, need to perform full check.  This is common.
1266771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds obj->clazz
1266871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1 holds desired class resolved from AAAAAAAA
1266971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
12670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1267171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CHECK_CAST_JUMBO_fullcheck:
1267271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r10, r1                     @ avoid ClassObject getting clobbered
1267371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmInstanceofNonTrivial     @ r0<- boolean result
1267471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ failed?
1267571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_CHECK_CAST_JUMBO_okay            @ no, success
12676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1267771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ A cast has failed.  We need to throw a ClassCastException.
1267871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ about to throw
1267971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r9, #offObject_clazz]  @ r0<- obj->clazz (actual class)
1268071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r10                     @ r1<- desired class
1268171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmThrowClassCastException
1268271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown
12683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1268571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Advance PC and get the next opcode.
12686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1268771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CHECK_CAST_JUMBO_okay:
1268871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(4)               @ advance rPC, load rINST
1268971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1269071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
12691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1269271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1269371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Resolution required.  This is the least-likely path.
1269471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1269571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r2 holds AAAAAAAA
1269671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1269771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1269871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CHECK_CAST_JUMBO_resolve:
1269971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw
127009f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_method] @ r3<- self->method
1270171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r2                      @ r1<- AAAAAAAA
1270271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #0                      @ r2<- false
1270371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, #offMethod_clazz]  @ r0<- method->clazz
1270471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveClass             @ r0<- resolved ClassObject ptr
1270571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ got null?
1270671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yes, handle exception
1270771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r0                      @ r1<- class resolved from AAAAAAAA
1270871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r9, #offObject_clazz]  @ r0<- obj->clazz
1270971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_CHECK_CAST_JUMBO_resolved        @ pick up where we left off
1271071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1271171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INSTANCE_OF_JUMBO */
12712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1271471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Class resolved, determine type of check necessary.  This is common.
1271571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds obj->clazz
1271671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1 holds class resolved from AAAAAAAA
1271771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds BBBB
12718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1271971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_JUMBO_resolved:
1272071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, r1                      @ same class (trivial success)?
1272171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LOP_INSTANCE_OF_JUMBO_trivial         @ yes, trivial finish
1272271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ fall through to OP_INSTANCE_OF_JUMBO_fullcheck
12723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1272471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1272571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Trivial test failed, need to perform full check.  This is common.
1272671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds obj->clazz
1272771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1 holds class resolved from AAAAAAAA
1272871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds BBBB
1272971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1273071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_JUMBO_fullcheck:
1273171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmInstanceofNonTrivial     @ r0<- boolean result
1273271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ fall through to OP_INSTANCE_OF_JUMBO_store
12733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1273571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * r0 holds boolean result
1273671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * r9 holds BBBB
12737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1273871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_JUMBO_store:
1273971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(5)               @ advance rPC, load rINST
1274071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r9)                    @ vBBBB<- r0
1274171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1274271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
12743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1274471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1274571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Trivial test succeeded, save and bail.
1274671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds BBBB
1274771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1274871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_JUMBO_trivial:
1274971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, #1                      @ indicate success
1275071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ could b OP_INSTANCE_OF_JUMBO_store, but copying is faster and cheaper
1275171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(5)               @ advance rPC, load rINST
1275271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r9)                    @ vBBBB<- r0
1275371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1275471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
12755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1275771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Resolution required.  This is the least-likely path.
1275871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1275971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r3 holds AAAAAAAA
1276071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds BBBB
12761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
12762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1276371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_JUMBO_resolve:
1276471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw
127659f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r0, [rSELF, #offThread_method]    @ r0<- self->method
1276671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r3                      @ r1<- AAAAAAAA
1276771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #1                      @ r2<- true
1276871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r0, #offMethod_clazz]  @ r0<- method->clazz
1276971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveClass             @ r0<- resolved ClassObject ptr
12770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ got null?
1277171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yes, handle exception
1277271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r3, 4)                        @ r3<- vCCCC
1277371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r0                      @ r1<- class resolved from AAAAAAAA
1277471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r0, r3)                    @ r0<- vCCCC (object)
1277571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r0, #offObject_clazz]  @ r0<- obj->clazz
1277671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LOP_INSTANCE_OF_JUMBO_resolved        @ pick up where we left off
1277771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1277871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_NEW_INSTANCE_JUMBO */
1277971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1278071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    .balign 32                          @ minimize cache lines
1278171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_JUMBO_finish: @ r0=new object
1278271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r3, 3)                        @ r3<- BBBB
1278371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ failed?
1278471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yes, handle the exception
1278571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(4)               @ advance rPC, load rINST
1278671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1278771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r3)                    @ vBBBB<- r0
1278871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1278971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1279071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1279171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Class initialization required.
1279271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1279371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds class object
1279471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1279571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_JUMBO_needinit:
1279671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r9, r0                      @ save r0
1279771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmInitClass                @ initialize class
1279871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ check boolean result
1279971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, r9                      @ restore r0
1280071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_NEW_INSTANCE_JUMBO_initialized     @ success, continue
1280171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ failed, deal with init exception
1280271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1280371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1280471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Resolution required.  This is the least-likely path.
1280571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1280671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1 holds AAAAAAAA
1280771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1280871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_JUMBO_resolve:
128099f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_method] @ r3<- self->method
1281071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #0                      @ r2<- false
1281171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, #offMethod_clazz]  @ r0<- method->clazz
1281271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveClass             @ r0<- resolved ClassObject ptr
1281371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ got null?
1281471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_NEW_INSTANCE_JUMBO_resolved        @ no, continue
12815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown      @ yes, handle exception
12816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1281771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_NEW_ARRAY_JUMBO */
1281871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1281971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1282071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1282171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Resolve class.  (This is an uncommon case.)
1282271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1282371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1 holds array length
1282471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r2 holds class ref AAAAAAAA
1282571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1282671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_ARRAY_JUMBO_resolve:
128279f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_method] @ r3<- self->method
1282871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r9, r1                      @ r9<- length (save)
1282971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r2                      @ r1<- AAAAAAAA
1283071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #0                      @ r2<- false
1283171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, #offMethod_clazz]  @ r0<- method->clazz
1283271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveClass             @ r0<- call(clazz, ref)
1283371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ got null?
1283471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r1, r9                      @ r1<- length (restore)
1283571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yes, handle exception
1283671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ fall through to OP_NEW_ARRAY_JUMBO_finish
1283771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1283871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1283971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Finish allocation.
1284071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1284171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds class
1284271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1 holds array length
1284371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1284471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_ARRAY_JUMBO_finish:
1284571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #ALLOC_DONT_TRACK       @ don't track in local refs table
1284671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmAllocArrayByClass        @ r0<- call(clazz, length, flags)
1284771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ failed?
1284871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r2<- vBBBB
1284971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yes, handle the exception
1285071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(5)               @ advance rPC, load rINST
1285171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1285271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r2)                    @ vBBBB<- r0
1285371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
1285471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1285571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_FILLED_NEW_ARRAY_JUMBO */
1285671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1285771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1285871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * On entry:
1285971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds array class
1286071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1286171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_JUMBO_continue:
1286271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offClassObject_descriptor] @ r3<- arrayClass->descriptor
1286371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #ALLOC_DONT_TRACK       @ r2<- alloc flags
1286471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldrb    rINST, [r3, #1]             @ rINST<- descriptor[1]
1286571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 3)                        @ r1<- BBBB (length)
1286671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     rINST, #'I'                 @ array of ints?
1286771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpne   rINST, #'L'                 @ array of objects?
1286871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmpne   rINST, #'['                 @ array of arrays?
1286971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r9, r1                      @ save length in r9
1287071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_FILLED_NEW_ARRAY_JUMBO_notimpl         @ no, not handled yet
1287171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmAllocArrayByClass        @ r0<- call(arClass, length, flags)
1287271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ null return?
1287371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ alloc failed, handle exception
1287471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1287571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 4)                        @ r1<- CCCC
128769f601a917c8878204482c37aec7005054b6776fabuzbee    str     r0, [rSELF, #offThread_retval]      @ retval.l <- new array
128779f601a917c8878204482c37aec7005054b6776fabuzbee    str     rINST, [rSELF, #offThread_retval+4] @ retval.h <- type
1287871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r0, r0, #offArrayObject_contents @ r0<- newArray->contents
1287971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    subs    r9, r9, #1                  @ length--, check for neg
1288071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(5)               @ advance to next instr, load rINST
1288171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bmi     2f                          @ was zero, bail
1288271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1288371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ copy values from registers into the array
1288471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ r0=array, r1=CCCC, r9=BBBB (length)
1288571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r2, rFP, r1, lsl #2         @ r2<- &fp[CCCC]
1288671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1:  ldr     r3, [r2], #4                @ r3<- *r2++
1288771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    subs    r9, r9, #1                  @ count--
1288871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str     r3, [r0], #4                @ *contents++ = vX
1288971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bpl     1b
1289071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
128919f601a917c8878204482c37aec7005054b6776fabuzbee2:  ldr     r0, [rSELF, #offThread_retval]     @ r0<- object
128929f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r1, [rSELF, #offThread_retval+4]   @ r1<- type
128939f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_cardTable]  @ r2<- card table base
1289471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                      @ ip<- opcode from rINST
1289571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r1, #'I'                         @ Is int array?
1289671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    strneb  r2, [r2, r0, lsr #GC_CARD_SHIFT] @ Mark card based on object head
1289771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                          @ execute it
1289871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
12899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1290071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Throw an exception indicating that we have not implemented this
1290171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * mode of filled-new-array.
12902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1290371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_JUMBO_notimpl:
1290471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, .L_strInternalError
1290571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, .L_strFilledNewArrayNotImpl
1290671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmThrowException
1290771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown
12908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1290971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_JUMBO */
12910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1291271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1291371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1291471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
12915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1291671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_JUMBO_resolved:
1291771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ resolution unsuccessful?
1291871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yes, throw exception
1291971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ fall through to OP_IGET_JUMBO_finish
12920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1292271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1292371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1292471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
12925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1292671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_JUMBO_finish:
1292771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak0
1292871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1292971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1293071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1293171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr   r0, [r9, r3]                @ r0<- obj.field (8/16/32 bits)
1293271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ acquiring load
1293371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r2<- BBBB
1293471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(5)               @ advance rPC, load rINST
1293571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r2)                    @ fp[BBBB]<- r0
1293671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1293771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
12938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1293971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_WIDE_JUMBO */
12940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1294271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1294371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1294471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
12945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1294671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_WIDE_JUMBO_resolved:
1294771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ resolution unsuccessful?
1294871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yes, throw exception
1294971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ fall through to OP_IGET_WIDE_JUMBO_finish
12950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1295271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1295371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1295471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
12955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1295671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_WIDE_JUMBO_finish:
1295771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1295871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1295971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1296071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldrd    r0, [r9, r3]                @ r0/r1<- obj.field (64-bit align ok)
1296171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r2<- BBBB
1296271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(5)               @ advance rPC, load rINST
1296371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r3, rFP, r2, lsl #2         @ r3<- &fp[BBBB]
1296471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1296571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    stmia   r3, {r0-r1}                 @ fp[BBBB]<- r0/r1
1296671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
12967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1296871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_OBJECT_JUMBO */
12969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1297171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1297271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1297371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
12974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1297571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_OBJECT_JUMBO_resolved:
1297671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ resolution unsuccessful?
1297771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yes, throw exception
1297871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ fall through to OP_IGET_OBJECT_JUMBO_finish
12979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1298071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1298171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1298271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1298371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1298471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1298571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_OBJECT_JUMBO_finish:
1298671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak0
1298771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1298871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1298971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1299071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr   r0, [r9, r3]                @ r0<- obj.field (8/16/32 bits)
1299171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ acquiring load
1299271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r2<- BBBB
1299371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(5)               @ advance rPC, load rINST
1299471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r2)                    @ fp[BBBB]<- r0
1299571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1299671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
12997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1299871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_BOOLEAN_JUMBO */
12999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1300071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1300171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1300271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1300371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1300471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1300571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BOOLEAN_JUMBO_resolved:
1300671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ resolution unsuccessful?
1300771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yes, throw exception
1300871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ fall through to OP_IGET_BOOLEAN_JUMBO_finish
13009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1301071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1301171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1301271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1301371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1301471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1301571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BOOLEAN_JUMBO_finish:
1301671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak1
1301771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1301871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1301971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1302071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr   r0, [r9, r3]                @ r0<- obj.field (8/16/32 bits)
1302171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ acquiring load
1302271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r2<- BBBB
1302371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(5)               @ advance rPC, load rINST
1302471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r2)                    @ fp[BBBB]<- r0
1302571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1302671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
13027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1302871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_BYTE_JUMBO */
13029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1303071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1303171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1303271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1303371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1303471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1303571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BYTE_JUMBO_resolved:
1303671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ resolution unsuccessful?
1303771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yes, throw exception
1303871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ fall through to OP_IGET_BYTE_JUMBO_finish
13039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1304071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1304171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1304271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1304371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1304471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1304571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BYTE_JUMBO_finish:
1304671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak2
1304771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1304871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1304971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1305071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr   r0, [r9, r3]                @ r0<- obj.field (8/16/32 bits)
1305171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ acquiring load
1305271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r2<- BBBB
1305371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(5)               @ advance rPC, load rINST
1305471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r2)                    @ fp[BBBB]<- r0
1305571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1305671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(ip)                     @ jump to next instruction
13057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1305871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_CHAR_JUMBO */
13059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1306071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1306171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1306271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1306371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1306471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1306571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_CHAR_JUMBO_resolved:
1306671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ resolution unsuccessful?
1306771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yes, throw exception
1306871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ fall through to OP_IGET_CHAR_JUMBO_finish
13069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1307071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1307171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1307271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1307371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1307471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1307571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_CHAR_JUMBO_finish:
1307671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak3
1307771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1307871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1307971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1308071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr   r0, [r9, r3]                @ r0<- obj.field (8/16/32 bits)
1308171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ acquiring load
1308271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r2<- BBBB
1308371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(5)               @ advance rPC, load rINST
1308471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r2)                    @ fp[BBBB]<- r0
13085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
13086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
13087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1308871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_SHORT_JUMBO */
13089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1309071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1309171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1309271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1309371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1309471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1309571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_SHORT_JUMBO_resolved:
1309671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ resolution unsuccessful?
1309771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_exceptionThrown      @ yes, throw exception
1309871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ fall through to OP_IGET_SHORT_JUMBO_finish
1309971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1310071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1310171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1310271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1310371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1310471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1310571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_SHORT_JUMBO_finish:
1310671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak4
1310771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1310871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1310971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1311071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr   r0, [r9, r3]                @ r0<- obj.field (8/16/32 bits)
1311171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ acquiring load
1311271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r2<- BBBB
1311371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(5)               @ advance rPC, load rINST
1311471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SET_VREG(r0, r2)                    @ fp[BBBB]<- r0
13115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
13116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
13117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1311871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_JUMBO */
13119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1312071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1312171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1312271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1312371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1312471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1312571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_JUMBO_resolved:
1312671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     cmp     r0, #0                     @ resolution unsuccessful?
1312771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     beq     common_exceptionThrown     @ yes, throw exception
1312871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     @ fall through to OP_IPUT_JUMBO_finish
1312971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1313071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1313171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1313271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1313371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1313471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1313571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_JUMBO_finish:
1313671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak0
1313771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1313871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 3)                        @ r1<- BBBB
1313971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1314071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r0, r1)                    @ r0<- fp[BBBB]
1314171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1314271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(5)               @ advance rPC, load rINST
13143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1314471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ releasing store
1314571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str  r0, [r9, r3]                @ obj.field (8/16/32 bits)<- r0
13146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
13147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1314871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_WIDE_JUMBO */
13149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1315071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1315171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1315271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1315371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1315471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1315571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_WIDE_JUMBO_resolved:
1315671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     cmp     r0, #0                     @ resolution unsuccessful?
1315771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     beq     common_exceptionThrown     @ yes, throw exception
1315871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     @ fall through to OP_IPUT_WIDE_JUMBO_finish
13159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1316071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1316171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1316271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1316371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1316471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1316571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_WIDE_JUMBO_finish:
1316671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1316771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r1<- BBBB
1316871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1316971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     r2, rFP, r2, lsl #2         @ r3<- &fp[BBBB]
1317071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1317171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(5)               @ advance rPC, load rINST
1317271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldmia   r2, {r0-r1}                 @ r0/r1<- fp[BBBB]
1317371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_INST_OPCODE(r10)                @ extract opcode from rINST
1317471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    strd    r0, [r9, r3]                @ obj.field (64 bits, aligned)<- r0/r1
1317571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GOTO_OPCODE(r10)                    @ jump to next instruction
13176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1317771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_OBJECT_JUMBO */
1317871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1317971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1318071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1318171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1318271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1318371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1318471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_OBJECT_JUMBO_resolved:
1318571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     cmp     r0, #0                     @ resolution unsuccessful?
1318671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     beq     common_exceptionThrown     @ yes, throw exception
1318771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     @ fall through to OP_IPUT_OBJECT_JUMBO_finish
1318871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1318971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1319071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1319171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1319271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1319371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1319471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_OBJECT_JUMBO_finish:
1319571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak0
1319671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1319771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 3)                        @ r1<- BBBB
1319871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1319971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r0, r1)                    @ r0<- fp[BBBB]
132009f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_cardTable]  @ r2<- card table base
1320171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1320271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(5)               @ advance rPC, load rINST
13203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1320471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ releasing store
1320571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str     r0, [r9, r3]                @ obj.field (32 bits)<- r0
1320671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ stored a null reference?
1320771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    strneb  r2, [r2, r9, lsr #GC_CARD_SHIFT]  @ mark card if not
13208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
13209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1321071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_BOOLEAN_JUMBO */
13211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1321271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1321371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1321471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1321571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1321671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1321771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BOOLEAN_JUMBO_resolved:
1321871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     cmp     r0, #0                     @ resolution unsuccessful?
1321971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     beq     common_exceptionThrown     @ yes, throw exception
1322071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     @ fall through to OP_IPUT_BOOLEAN_JUMBO_finish
1322171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1322271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1322371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1322471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1322571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1322671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1322771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BOOLEAN_JUMBO_finish:
1322871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak1
1322971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1323071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 3)                        @ r1<- BBBB
1323171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1323271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r0, r1)                    @ r0<- fp[BBBB]
1323371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1323471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(5)               @ advance rPC, load rINST
13235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1323671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ releasing store
1323771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str  r0, [r9, r3]                @ obj.field (8/16/32 bits)<- r0
13238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
13239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1324071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_BYTE_JUMBO */
13241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1324271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1324371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1324471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1324571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1324671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1324771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BYTE_JUMBO_resolved:
1324871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     cmp     r0, #0                     @ resolution unsuccessful?
1324971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     beq     common_exceptionThrown     @ yes, throw exception
1325071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     @ fall through to OP_IPUT_BYTE_JUMBO_finish
1325171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1325271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1325371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1325471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1325571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1325671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1325771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BYTE_JUMBO_finish:
1325871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak2
1325971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1326071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 3)                        @ r1<- BBBB
1326171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1326271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r0, r1)                    @ r0<- fp[BBBB]
1326371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ object was null
1326471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(5)               @ advance rPC, load rINST
13265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1326671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ releasing store
1326771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str  r0, [r9, r3]                @ obj.field (8/16/32 bits)<- r0
13268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
13269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1327071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_CHAR_JUMBO */
13271c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden
13272c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /*
13273c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     * Currently:
13274c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     *  r0 holds resolved field
13275c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     *  r9 holds object
13276c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     */
1327771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_CHAR_JUMBO_resolved:
1327871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     cmp     r0, #0                     @ resolution unsuccessful?
1327971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     beq     common_exceptionThrown     @ yes, throw exception
1328071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     @ fall through to OP_IPUT_CHAR_JUMBO_finish
1328171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1328271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1328371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1328471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1328571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1328671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1328771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_CHAR_JUMBO_finish:
1328871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak3
13289c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1329071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 3)                        @ r1<- BBBB
1329171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r9, #0                      @ check object for null
1329271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r0, r1)                    @ r0<- fp[BBBB]
13293c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    beq     common_errNullObject        @ object was null
1329471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(5)               @ advance rPC, load rINST
13295c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1329671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ releasing store
1329771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str  r0, [r9, r3]                @ obj.field (8/16/32 bits)<- r0
13298c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    GOTO_OPCODE(ip)                     @ jump to next instruction
13299c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden
1330071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_SHORT_JUMBO */
13301c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden
13302c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /*
13303c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     * Currently:
13304c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     *  r0 holds resolved field
13305c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     *  r9 holds object
13306c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     */
1330771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_SHORT_JUMBO_resolved:
1330871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     cmp     r0, #0                     @ resolution unsuccessful?
1330971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     beq     common_exceptionThrown     @ yes, throw exception
1331071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     @ fall through to OP_IPUT_SHORT_JUMBO_finish
1331171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1331271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1331371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Currently:
1331471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 holds resolved field
1331571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 holds object
1331671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1331771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_SHORT_JUMBO_finish:
1331871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @bl      common_squeak4
13319c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r3, [r0, #offInstField_byteOffset]  @ r3<- byte offset of field
1332071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 3)                        @ r1<- BBBB
13321c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    cmp     r9, #0                      @ check object for null
1332271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r0, r1)                    @ r0<- fp[BBBB]
13323c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    beq     common_errNullObject        @ object was null
1332471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(5)               @ advance rPC, load rINST
13325c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1332671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ releasing store
13327c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    str  r0, [r9, r3]                @ obj.field (8/16/32 bits)<- r0
13328c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    GOTO_OPCODE(ip)                     @ jump to next instruction
13329c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden
1333071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_JUMBO */
1333171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1333271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1333371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1333471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: AAAAAAAA field ref
1333571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1333671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_JUMBO_resolve:
133379f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1333871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1333971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1334071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1334171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1334271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SGET_JUMBO_finish          @ yes, finish
1334371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
1334471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1334571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_WIDE_JUMBO */
1334671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1334771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1334871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1334971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: BBBB field ref
1335071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1335171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Returns StaticField pointer in r0.
1335271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1335371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_WIDE_JUMBO_resolve:
133549f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1335571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1335671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1335771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1335871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1335971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SGET_WIDE_JUMBO_finish          @ yes, finish
1336071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
1336171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1336271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_OBJECT_JUMBO */
1336371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1336471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1336571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1336671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: AAAAAAAA field ref
1336771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1336871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_OBJECT_JUMBO_resolve:
133699f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1337071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1337171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1337271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1337371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1337471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SGET_OBJECT_JUMBO_finish          @ yes, finish
1337571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
1337671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1337771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_BOOLEAN_JUMBO */
1337871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1337971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1338071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1338171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: AAAAAAAA field ref
1338271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1338371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_BOOLEAN_JUMBO_resolve:
133849f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1338571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1338671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1338771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1338871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1338971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SGET_BOOLEAN_JUMBO_finish          @ yes, finish
1339071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
1339171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1339271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_BYTE_JUMBO */
1339371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1339471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1339571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1339671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: AAAAAAAA field ref
1339771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1339871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_BYTE_JUMBO_resolve:
133999f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1340071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1340171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1340271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1340371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1340471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SGET_BYTE_JUMBO_finish          @ yes, finish
1340571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
1340671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1340771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_CHAR_JUMBO */
1340871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1340971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1341071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1341171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: AAAAAAAA field ref
1341271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1341371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_CHAR_JUMBO_resolve:
134149f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1341571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1341671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1341771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1341871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1341971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SGET_CHAR_JUMBO_finish          @ yes, finish
1342071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
1342171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1342271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_SHORT_JUMBO */
1342371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1342471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    /*
1342571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1342671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: AAAAAAAA field ref
1342771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     */
1342871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_SHORT_JUMBO_resolve:
134299f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1343071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1343171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1343271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1343371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1343471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SGET_SHORT_JUMBO_finish          @ yes, finish
1343571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
1343671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1343771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_JUMBO */
13438c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden
13439c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /*
13440c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     * Continuation if the field has not yet been resolved.
1344171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: AAAAAAAA field ref
13442c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     */
1344371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_JUMBO_resolve:
134449f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
13445c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    EXPORT_PC()                         @ resolve() could throw, so export now
13446c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
13447c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
13448c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    cmp     r0, #0                      @ success?
1344971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SPUT_JUMBO_finish          @ yes, finish
13450c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    b       common_exceptionThrown      @ no, handle exception
13451c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden
1345271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_WIDE_JUMBO */
13453c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden
13454c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /*
13455c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     * Continuation if the field has not yet been resolved.
13456c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     *  r1: BBBB field ref
1345771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9: &fp[AA]
1345871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *
1345971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Returns StaticField pointer in r2.
13460c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     */
1346171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_WIDE_JUMBO_resolve:
134629f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
13463c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    EXPORT_PC()                         @ resolve() could throw, so export now
13464c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
13465c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
13466c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    cmp     r0, #0                      @ success?
1346771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, r0                      @ copy to r2
1346871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SPUT_WIDE_JUMBO_finish          @ yes, finish
13469c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    b       common_exceptionThrown      @ no, handle exception
13470c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden
1347171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_OBJECT_JUMBO */
13472c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden
1347371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_OBJECT_JUMBO_finish:   @ field ptr in r0
1347471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 3)                        @ r2<- BBBB
1347571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH_ADVANCE_INST(4)               @ advance rPC, load rINST
1347671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r1, r2)                    @ r1<- fp[BBBB]
134779f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_cardTable]  @ r2<- card table base
1347871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r9, [r0, #offField_clazz]   @ r9<- field->clazz
13479c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
1348071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ no-op                             @ releasing store
1348171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    str     r1, [r0, #offStaticField_value]  @ field<- vBBBB
1348271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r1, #0                      @ stored a null object?
1348371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    strneb  r2, [r2, r9, lsr #GC_CARD_SHIFT]  @ mark card based on obj head
13484c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    GOTO_OPCODE(ip)                     @ jump to next instruction
13485c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden
1348671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_BOOLEAN_JUMBO */
134875387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden
134885387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    /*
1348971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1349071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: AAAAAAAA field ref
134915387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden     */
1349271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_BOOLEAN_JUMBO_resolve:
134939f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1349471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1349571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1349671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1349771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1349871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SPUT_BOOLEAN_JUMBO_finish          @ yes, finish
1349971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
135005387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden
1350171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_BYTE_JUMBO */
135025387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden
135035387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    /*
1350471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Continuation if the field has not yet been resolved.
1350571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: AAAAAAAA field ref
135065387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden     */
1350771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_BYTE_JUMBO_resolve:
135089f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
1350971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ resolve() could throw, so export now
1351071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
1351171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
1351271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ success?
1351371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SPUT_BYTE_JUMBO_finish          @ yes, finish
1351471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ no, handle exception
135155387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden
1351671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_CHAR_JUMBO */
135175387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden
135185387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    /*
135195387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden     * Continuation if the field has not yet been resolved.
1352071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: AAAAAAAA field ref
135215387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden     */
1352271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_CHAR_JUMBO_resolve:
135239f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
135245387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    EXPORT_PC()                         @ resolve() could throw, so export now
135255387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
135265387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
135275387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    cmp     r0, #0                      @ success?
1352871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SPUT_CHAR_JUMBO_finish          @ yes, finish
135295387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    b       common_exceptionThrown      @ no, handle exception
135305387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden
1353171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_SHORT_JUMBO */
135325387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden
135335387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    /*
135345387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden     * Continuation if the field has not yet been resolved.
1353571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1: AAAAAAAA field ref
135365387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden     */
1353771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_SHORT_JUMBO_resolve:
135389f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r2, [rSELF, #offThread_method]    @ r2<- current method
135395387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    EXPORT_PC()                         @ resolve() could throw, so export now
135405387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    ldr     r0, [r2, #offMethod_clazz]  @ r0<- method->clazz
135415387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    bl      dvmResolveStaticField       @ r0<- resolved StaticField ptr
135425387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    cmp     r0, #0                      @ success?
1354371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_SPUT_SHORT_JUMBO_finish          @ yes, finish
135445387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden    b       common_exceptionThrown      @ no, handle exception
135455387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden
1354671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_VIRTUAL_JUMBO */
13547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1354971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * At this point:
1355071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 = resolved base method
13551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1355271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_VIRTUAL_JUMBO_continue:
1355371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r10, 4)                       @ r10<- CCCC
1355471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r1, r10)                   @ r1<- "this" ptr
1355571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldrh    r2, [r0, #offMethod_methodIndex]    @ r2<- baseMethod->methodIndex
1355671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r1, #0                      @ is "this" null?
1355771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     common_errNullObject        @ null "this", throw exception
1355871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r1, #offObject_clazz]  @ r1<- thisPtr->clazz
1355971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r3, #offClassObject_vtable]    @ r3<- thisPtr->clazz->vtable
1356071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, r2, lsl #2]        @ r3<- vtable[methodIndex]
1356171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_invokeMethodJumbo    @ continue on
13562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1356371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_SUPER_JUMBO */
13564b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden
13565b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden    /*
1356671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * At this point:
1356771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 = resolved base method
1356871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r9 = method->clazz
13569b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden     */
1357071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_JUMBO_continue:
1357171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, [r9, #offClassObject_super]     @ r1<- method->clazz->super
1357271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldrh    r2, [r0, #offMethod_methodIndex]    @ r2<- baseMethod->methodIndex
1357371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r3, [r1, #offClassObject_vtableCount]   @ r3<- super->vtableCount
1357471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    EXPORT_PC()                         @ must export for invoke
1357571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r2, r3                      @ compare (methodIndex, vtableCount)
1357671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bcs     .LOP_INVOKE_SUPER_JUMBO_nsm             @ method not present in superclass
1357771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, [r1, #offClassObject_vtable]    @ r1<- ...clazz->super->vtable
1357871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r1, r2, lsl #2]        @ r3<- vtable[methodIndex]
1357971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      common_invokeMethodJumbo    @ continue on
13580b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden
1358171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_JUMBO_resolve:
1358271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r0, r9                      @ r0<- method->clazz
1358371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #METHOD_VIRTUAL         @ resolver method type
1358471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveMethod            @ r0<- call(clazz, ref, flags)
1358571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ got null?
1358671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_INVOKE_SUPER_JUMBO_continue        @ no, continue
1358771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ yes, handle exception
13588c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden
13589c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /*
1359071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * Throw a NoSuchMethodError with the method name as the message.
1359171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r0 = resolved base method
13592c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     */
1359371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_JUMBO_nsm:
1359471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r1, [r0, #offMethod_name]   @ r1<- method name
1359571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_errNoSuchMethod
13596c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden
1359771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_DIRECT_JUMBO */
13598c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden
13599c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden    /*
1360071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     * On entry:
1360171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r1 = reference (CCCC)
1360271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao     *  r10 = "this" register
13603c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden     */
1360471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_DIRECT_JUMBO_resolve:
136059f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_method] @ r3<- self->method
1360671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldr     r0, [r3, #offMethod_clazz]  @ r0<- method->clazz
1360771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    mov     r2, #METHOD_DIRECT          @ resolver method type
1360871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bl      dvmResolveMethod            @ r0<- call(clazz, ref, flags)
1360971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r0, #0                      @ got null?
1361071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    GET_VREG(r2, r10)                   @ r2<- "this" ptr (reload)
1361171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    bne     .LOP_INVOKE_DIRECT_JUMBO_finish          @ no, continue
1361271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       common_exceptionThrown      @ yes, handle exception
13613c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden
13614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .size   dvmAsmSisterStart, .-dvmAsmSisterStart
13615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .global dvmAsmSisterEnd
13616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmSisterEnd:
13617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/footer.S */
13619ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng
13620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
13621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ===========================================================================
13622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Common subroutines and data
13623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ===========================================================================
13624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
13625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13626ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng
13627ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng
13628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .text
13629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .align  2
13630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13631ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
1363297319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao#if defined(WITH_SELF_VERIFICATION)
1363397319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    .global dvmJitToInterpPunt
1363497319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff HaodvmJitToInterpPunt:
1363597319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    mov    r2,#kSVSPunt                 @ r2<- interpreter entry point
13636d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng    mov    r3, #0
136379f601a917c8878204482c37aec7005054b6776fabuzbee    str    r3, [rSELF, #offThread_inJitCodeCache] @ Back to the interp land
13638d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng    b      jitSVShadowRunEnd            @ doesn't return
1363997319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao
1364097319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    .global dvmJitToInterpSingleStep
1364197319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff HaodvmJitToInterpSingleStep:
136429f601a917c8878204482c37aec7005054b6776fabuzbee    str    lr,[rSELF,#offThread_jitResumeNPC]
136439f601a917c8878204482c37aec7005054b6776fabuzbee    str    r1,[rSELF,#offThread_jitResumeDPC]
1364497319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    mov    r2,#kSVSSingleStep           @ r2<- interpreter entry point
13645d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng    b      jitSVShadowRunEnd            @ doesn't return
1364697319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao
136477a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    .global dvmJitToInterpNoChainNoProfile
136487a2697d327936e20ef5484f7819e2e4bf91c891fBen ChengdvmJitToInterpNoChainNoProfile:
136497a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    mov    r0,rPC                       @ pass our target PC
136507a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    mov    r2,#kSVSNoProfile            @ r2<- interpreter entry point
136517a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    mov    r3, #0                       @ 0 means !inJitCodeCache
136529f601a917c8878204482c37aec7005054b6776fabuzbee    str    r3, [rSELF, #offThread_inJitCodeCache] @ back to the interp land
136537a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    b      jitSVShadowRunEnd            @ doesn't return
136547a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng
1365540094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng    .global dvmJitToInterpTraceSelectNoChain
1365640094c16d9727cc1e047a7d4bddffe04dd566211Ben ChengdvmJitToInterpTraceSelectNoChain:
1365740094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng    mov    r0,rPC                       @ pass our target PC
136587a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    mov    r2,#kSVSTraceSelect          @ r2<- interpreter entry point
136597a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    mov    r3, #0                       @ 0 means !inJitCodeCache
136609f601a917c8878204482c37aec7005054b6776fabuzbee    str    r3, [rSELF, #offThread_inJitCodeCache] @ Back to the interp land
13661d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng    b      jitSVShadowRunEnd            @ doesn't return
1366240094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng
1366340094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng    .global dvmJitToInterpTraceSelect
1366440094c16d9727cc1e047a7d4bddffe04dd566211Ben ChengdvmJitToInterpTraceSelect:
136659a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee    ldr    r0,[lr, #-1]                 @ pass our target PC
1366697319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    mov    r2,#kSVSTraceSelect          @ r2<- interpreter entry point
136677a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    mov    r3, #0                       @ 0 means !inJitCodeCache
136689f601a917c8878204482c37aec7005054b6776fabuzbee    str    r3, [rSELF, #offThread_inJitCodeCache] @ Back to the interp land
13669d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng    b      jitSVShadowRunEnd            @ doesn't return
1367097319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao
1367140094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng    .global dvmJitToInterpBackwardBranch
1367240094c16d9727cc1e047a7d4bddffe04dd566211Ben ChengdvmJitToInterpBackwardBranch:
136739a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee    ldr    r0,[lr, #-1]                 @ pass our target PC
1367497319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    mov    r2,#kSVSBackwardBranch       @ r2<- interpreter entry point
136757a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    mov    r3, #0                       @ 0 means !inJitCodeCache
136769f601a917c8878204482c37aec7005054b6776fabuzbee    str    r3, [rSELF, #offThread_inJitCodeCache] @ Back to the interp land
13677d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng    b      jitSVShadowRunEnd            @ doesn't return
1367897319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao
1367997319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    .global dvmJitToInterpNormal
1368097319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff HaodvmJitToInterpNormal:
136819a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee    ldr    r0,[lr, #-1]                 @ pass our target PC
1368297319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    mov    r2,#kSVSNormal               @ r2<- interpreter entry point
136837a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    mov    r3, #0                       @ 0 means !inJitCodeCache
136849f601a917c8878204482c37aec7005054b6776fabuzbee    str    r3, [rSELF, #offThread_inJitCodeCache] @ Back to the interp land
13685d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng    b      jitSVShadowRunEnd            @ doesn't return
1368697319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao
1368797319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    .global dvmJitToInterpNoChain
1368897319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff HaodvmJitToInterpNoChain:
1368997319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    mov    r0,rPC                       @ pass our target PC
1369097319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    mov    r2,#kSVSNoChain              @ r2<- interpreter entry point
136917a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    mov    r3, #0                       @ 0 means !inJitCodeCache
136929f601a917c8878204482c37aec7005054b6776fabuzbee    str    r3, [rSELF, #offThread_inJitCodeCache] @ Back to the interp land
13693d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng    b      jitSVShadowRunEnd            @ doesn't return
1369497319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao#else
13695ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/*
13696ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Return from the translation cache to the interpreter when the compiler is
13697ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * having issues translating/executing a Dalvik instruction. We have to skip
13698ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * the code cache lookup otherwise it is possible to indefinitely bouce
13699ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * between the interpreter and the code cache if the instruction that fails
13700ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * to be compiled happens to be at a trace start.
13701ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng */
13702ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    .global dvmJitToInterpPunt
13703ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben ChengdvmJitToInterpPunt:
13704ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    mov    rPC, r0
13705978738d2cbf9d08fa78c65762eaac3351ab76b9aBen Cheng#if defined(WITH_JIT_TUNING)
13706ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    mov    r0,lr
13707ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bl     dvmBumpPunt;
13708ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
13709ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    EXPORT_PC()
137107a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng    mov    r0, #0
137119f601a917c8878204482c37aec7005054b6776fabuzbee    str    r0, [rSELF, #offThread_inJitCodeCache] @ Back to the interp land
13712ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    adrl   rIBASE, dvmAsmInstructionStart
13713ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_INST()
13714ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_INST_OPCODE(ip)
13715ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GOTO_OPCODE(ip)
13716ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng
13717ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/*
13718ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Return to the interpreter to handle a single instruction.
13719ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * On entry:
13720ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng *    r0 <= PC
13721ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng *    r1 <= PC of resume instruction
13722ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng *    lr <= resume point in translation
13723ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng */
13724ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    .global dvmJitToInterpSingleStep
13725ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben ChengdvmJitToInterpSingleStep:
137269f601a917c8878204482c37aec7005054b6776fabuzbee    str    lr,[rSELF,#offThread_jitResumeNPC]
137279f601a917c8878204482c37aec7005054b6776fabuzbee    str    r1,[rSELF,#offThread_jitResumeDPC]
13728ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    mov    r1,#kInterpEntryInstr
13729ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    @ enum is 4 byte in aapcs-EABI
137309f601a917c8878204482c37aec7005054b6776fabuzbee    str    r1, [rSELF, #offThread_entryPoint]
13731ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    mov    rPC,r0
13732ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    EXPORT_PC()
137337a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng
13734ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    adrl   rIBASE, dvmAsmInstructionStart
13735ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    mov    r2,#kJitSingleStep     @ Ask for single step and then revert
137369f601a917c8878204482c37aec7005054b6776fabuzbee    str    r2,[rSELF,#offThread_jitState]
13737ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    mov    r1,#1                  @ set changeInterp to bail to debug interp
13738ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    b      common_gotoBail
13739ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng
1374040094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng/*
1374140094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng * Return from the translation cache and immediately request
1374240094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng * a translation for the exit target.  Commonly used for callees.
1374340094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng */
1374440094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng    .global dvmJitToInterpTraceSelectNoChain
1374540094c16d9727cc1e047a7d4bddffe04dd566211Ben ChengdvmJitToInterpTraceSelectNoChain:
13746978738d2cbf9d08fa78c65762eaac3351ab76b9aBen Cheng#if defined(WITH_JIT_TUNING)
1374740094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng    bl     dvmBumpNoChain
1374840094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng#endif
1374940094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng    mov    r0,rPC
13750cfdeca37fcaa27c37bad5077223e4d1e87f1182eBen Cheng    bl     dvmJitGetTraceAddr       @ Is there a translation?
137519f601a917c8878204482c37aec7005054b6776fabuzbee    str    r0, [rSELF, #offThread_inJitCodeCache] @ set the inJitCodeCache flag
1375240094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng    mov    r1, rPC                  @ arg1 of translation may need this
1375340094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng    mov    lr, #0                   @  in case target is HANDLER_INTERPRET
137547a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    cmp    r0,#0                    @ !0 means translation exists
1375540094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng    bxne   r0                       @ continue native execution if so
137567a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    b      2f                       @ branch over to use the interpreter
13757ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng
13758ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/*
13759ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Return from the translation cache and immediately request
13760ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * a translation for the exit target.  Commonly used following
13761ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * invokes.
13762ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng */
1376340094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng    .global dvmJitToInterpTraceSelect
1376440094c16d9727cc1e047a7d4bddffe04dd566211Ben ChengdvmJitToInterpTraceSelect:
137659a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee    ldr    rPC,[lr, #-1]           @ get our target PC
137669a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee    add    rINST,lr,#-5            @ save start of chain branch
13767bd0472480c6e876198fe19c4ffa22350c0ce57daBill Buzbee    add    rINST, #-4              @  .. which is 9 bytes back
13768ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    mov    r0,rPC
13769cfdeca37fcaa27c37bad5077223e4d1e87f1182eBen Cheng    bl     dvmJitGetTraceAddr      @ Is there a translation?
137709f601a917c8878204482c37aec7005054b6776fabuzbee    str    r0, [rSELF, #offThread_inJitCodeCache] @ set the inJitCodeCache flag
13771ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp    r0,#0
13772ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    beq    2f
13773ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    mov    r1,rINST
13774ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bl     dvmJitChain              @ r0<- dvmJitChain(codeAddr,chainAddr)
137759a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee    mov    r1, rPC                  @ arg1 of translation may need this
137769a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee    mov    lr, #0                   @ in case target is HANDLER_INTERPRET
1377746cd5b63c29d3284a9ff3e0d0711fb136f409313Bill Buzbee    cmp    r0,#0                    @ successful chain?
1377846cd5b63c29d3284a9ff3e0d0711fb136f409313Bill Buzbee    bxne   r0                       @ continue native execution
1377946cd5b63c29d3284a9ff3e0d0711fb136f409313Bill Buzbee    b      toInterpreter            @ didn't chain - resume with interpreter
13780ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng
13781ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/* No translation, so request one if profiling isn't disabled*/
13782ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng2:
137831da12167d913efde56ec3b40491524b051679f2cAndy McFadden    adrl   rIBASE, dvmAsmInstructionStart
13784ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
13785ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_INST()
13786ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp    r0, #0
1378740094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng    movne  r2,#kJitTSelectRequestHot   @ ask for trace selection
13788ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bne    common_selectTrace
13789ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_INST_OPCODE(ip)
13790ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GOTO_OPCODE(ip)
13791ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng
13792ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/*
13793ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Return from the translation cache to the interpreter.
13794ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * The return was done with a BLX from thumb mode, and
13795ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * the following 32-bit word contains the target rPC value.
13796ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Note that lr (r14) will have its low-order bit set to denote
13797ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * its thumb-mode origin.
13798ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng *
13799ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * We'll need to stash our lr origin away, recover the new
13800ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * target and then check to see if there is a translation available
13801ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * for our new target.  If so, we do a translation chain and
13802ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * go back to native execution.  Otherwise, it's back to the
13803ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * interpreter (after treating this entry as a potential
13804ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * trace start).
13805ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng */
13806ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    .global dvmJitToInterpNormal
13807ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben ChengdvmJitToInterpNormal:
138089a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee    ldr    rPC,[lr, #-1]           @ get our target PC
138099a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee    add    rINST,lr,#-5            @ save start of chain branch
13810bd0472480c6e876198fe19c4ffa22350c0ce57daBill Buzbee    add    rINST,#-4               @ .. which is 9 bytes back
13811978738d2cbf9d08fa78c65762eaac3351ab76b9aBen Cheng#if defined(WITH_JIT_TUNING)
13812ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bl     dvmBumpNormal
13813ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
13814ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    mov    r0,rPC
13815cfdeca37fcaa27c37bad5077223e4d1e87f1182eBen Cheng    bl     dvmJitGetTraceAddr      @ Is there a translation?
138169f601a917c8878204482c37aec7005054b6776fabuzbee    str    r0, [rSELF, #offThread_inJitCodeCache] @ set the inJitCodeCache flag
13817ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp    r0,#0
1381846cd5b63c29d3284a9ff3e0d0711fb136f409313Bill Buzbee    beq    toInterpreter            @ go if not, otherwise do chain
13819ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    mov    r1,rINST
13820ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bl     dvmJitChain              @ r0<- dvmJitChain(codeAddr,chainAddr)
138219a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee    mov    r1, rPC                  @ arg1 of translation may need this
138229a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee    mov    lr, #0                   @  in case target is HANDLER_INTERPRET
1382346cd5b63c29d3284a9ff3e0d0711fb136f409313Bill Buzbee    cmp    r0,#0                    @ successful chain?
1382446cd5b63c29d3284a9ff3e0d0711fb136f409313Bill Buzbee    bxne   r0                       @ continue native execution
1382546cd5b63c29d3284a9ff3e0d0711fb136f409313Bill Buzbee    b      toInterpreter            @ didn't chain - resume with interpreter
13826ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng
13827ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/*
13828ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Return from the translation cache to the interpreter to do method invocation.
13829ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Check if translation exists for the callee, but don't chain to it.
13830ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng */
138317a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    .global dvmJitToInterpNoChainNoProfile
138327a2697d327936e20ef5484f7819e2e4bf91c891fBen ChengdvmJitToInterpNoChainNoProfile:
138337a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng#if defined(WITH_JIT_TUNING)
138347a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    bl     dvmBumpNoChain
138357a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng#endif
138367a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    mov    r0,rPC
13837cfdeca37fcaa27c37bad5077223e4d1e87f1182eBen Cheng    bl     dvmJitGetTraceAddr       @ Is there a translation?
138389f601a917c8878204482c37aec7005054b6776fabuzbee    str    r0, [rSELF, #offThread_inJitCodeCache] @ set the inJitCodeCache flag
138397a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    mov    r1, rPC                  @ arg1 of translation may need this
138407a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    mov    lr, #0                   @  in case target is HANDLER_INTERPRET
138417a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    cmp    r0,#0
138427a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    bxne   r0                       @ continue native execution if so
138437a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    EXPORT_PC()
138447a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    adrl   rIBASE, dvmAsmInstructionStart
138457a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    FETCH_INST()
138467a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
138477a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng    GOTO_OPCODE(ip)                     @ jump to next instruction
138487a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng
138497a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng/*
138507a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng * Return from the translation cache to the interpreter to do method invocation.
138517a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng * Check if translation exists for the callee, but don't chain to it.
138527a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng */
13853ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    .global dvmJitToInterpNoChain
13854ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben ChengdvmJitToInterpNoChain:
13855978738d2cbf9d08fa78c65762eaac3351ab76b9aBen Cheng#if defined(WITH_JIT_TUNING)
13856ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bl     dvmBumpNoChain
13857ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
13858ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    mov    r0,rPC
13859cfdeca37fcaa27c37bad5077223e4d1e87f1182eBen Cheng    bl     dvmJitGetTraceAddr       @ Is there a translation?
138609f601a917c8878204482c37aec7005054b6776fabuzbee    str    r0, [rSELF, #offThread_inJitCodeCache] @ set the inJitCodeCache flag
138619a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee    mov    r1, rPC                  @ arg1 of translation may need this
138629a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee    mov    lr, #0                   @  in case target is HANDLER_INTERPRET
13863ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp    r0,#0
13864ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bxne   r0                       @ continue native execution if so
1386597319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao#endif
13866ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng
13867ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/*
13868ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * No translation, restore interpreter regs and start interpreting.
138699f601a917c8878204482c37aec7005054b6776fabuzbee * rSELF & rFP were preserved in the translated code, and rPC has
13870ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * already been restored by the time we get here.  We'll need to set
13871ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * up rIBASE & rINST, and load the address of the JitTable into r0.
13872ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng */
1387346cd5b63c29d3284a9ff3e0d0711fb136f409313Bill BuzbeetoInterpreter:
13874ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    EXPORT_PC()
13875ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    adrl   rIBASE, dvmAsmInstructionStart
13876ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_INST()
13877ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
13878ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    @ NOTE: intended fallthrough
138797a2697d327936e20ef5484f7819e2e4bf91c891fBen Cheng
13880ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/*
13881ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Common code to update potential trace start counter, and initiate
13882ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * a trace-build if appropriate.  On entry, rPC should point to the
13883ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * next instruction to execute, and rINST should be already loaded with
13884ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * the next opcode word, and r0 holds a pointer to the jit profile
13885ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * table (pJitProfTable).
13886ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng */
13887ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Chengcommon_testUpdateProfile:
13888ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp     r0,#0
13889ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_INST_OPCODE(ip)
13890ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GOTO_OPCODE_IFEQ(ip)       @ if not profiling, fallthrough otherwise */
13891ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng
13892ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Chengcommon_updateProfile:
13893ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    eor     r3,rPC,rPC,lsr #12 @ cheap, but fast hash function
138947b133ef7c84e68c3c4042176d830ea5b52e84139Ben Cheng    lsl     r3,r3,#(32 - JIT_PROF_SIZE_LOG_2)          @ shift out excess bits
138957b133ef7c84e68c3c4042176d830ea5b52e84139Ben Cheng    ldrb    r1,[r0,r3,lsr #(32 - JIT_PROF_SIZE_LOG_2)] @ get counter
13896ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_INST_OPCODE(ip)
13897ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    subs    r1,r1,#1           @ decrement counter
138987b133ef7c84e68c3c4042176d830ea5b52e84139Ben Cheng    strb    r1,[r0,r3,lsr #(32 - JIT_PROF_SIZE_LOG_2)] @ and store it
13899ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GOTO_OPCODE_IFNE(ip)       @ if not threshold, fallthrough otherwise */
13900ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng
13901ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/*
13902ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Here, we switch to the debug interpreter to request
13903ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * trace selection.  First, though, check to see if there
13904ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * is already a native translation in place (and, if so,
13905ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * jump to it now).
13906ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng */
139079f601a917c8878204482c37aec7005054b6776fabuzbee
13908d726991ba52466cde88e37aba4de2395b62477faBill Buzbee    GET_JIT_THRESHOLD(r1)
139097b133ef7c84e68c3c4042176d830ea5b52e84139Ben Cheng    strb    r1,[r0,r3,lsr #(32 - JIT_PROF_SIZE_LOG_2)] @ reset counter
13910ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    EXPORT_PC()
13911ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    mov     r0,rPC
13912cfdeca37fcaa27c37bad5077223e4d1e87f1182eBen Cheng    bl      dvmJitGetTraceAddr          @ r0<- dvmJitGetTraceAddr(rPC)
139139f601a917c8878204482c37aec7005054b6776fabuzbee    str     r0, [rSELF, #offThread_inJitCodeCache] @ set the inJitCodeCache flag
139147a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng    mov     r1, rPC                     @ arg1 of translation may need this
139157a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng    mov     lr, #0                      @  in case target is HANDLER_INTERPRET
13916ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp     r0,#0
1391797319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao#if !defined(WITH_SELF_VERIFICATION)
13918ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bxne    r0                          @ jump to the translation
1391940094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng    mov     r2,#kJitTSelectRequest      @ ask for trace selection
1392040094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng    @ fall-through to common_selectTrace
1392197319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao#else
1392240094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng    moveq   r2,#kJitTSelectRequest      @ ask for trace selection
139239a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee    beq     common_selectTrace
139249a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee    /*
139259a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee     * At this point, we have a target translation.  However, if
139269a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee     * that translation is actually the interpret-only pseudo-translation
139279a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee     * we want to treat it the same as no translation.
139289a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee     */
13929d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng    mov     r10, r0                     @ save target
139309a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee    bl      dvmCompilerGetInterpretTemplate
13931d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng    cmp     r0, r10                     @ special case?
13932d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng    bne     jitSVShadowRunStart         @ set up self verification shadow space
139331a7b9d7703297358d6b2276dff02eaff6586a6fdBen Cheng    @ Need to clear the inJitCodeCache flag
139341a7b9d7703297358d6b2276dff02eaff6586a6fdBen Cheng    mov    r3, #0                       @ 0 means not in the JIT code cache
139359f601a917c8878204482c37aec7005054b6776fabuzbee    str    r3, [rSELF, #offThread_inJitCodeCache] @ back to the interp land
139369a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee    GET_INST_OPCODE(ip)
139379a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee    GOTO_OPCODE(ip)
139389a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee    /* no return */
1393997319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao#endif
139409a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee
1394140094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng/*
1394240094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng * On entry:
1394340094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng *  r2 is jit state, e.g. kJitTSelectRequest or kJitTSelectRequestHot
1394440094c16d9727cc1e047a7d4bddffe04dd566211Ben Cheng */
13945ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Chengcommon_selectTrace:
139469f601a917c8878204482c37aec7005054b6776fabuzbee
139479f601a917c8878204482c37aec7005054b6776fabuzbee    str     r2,[rSELF,#offThread_jitState]
139489c147b84ff7fe2c39228742b06a9ef180d39b48fBen Cheng    mov     r2,#kInterpEntryInstr       @ normal entry reason
139499f601a917c8878204482c37aec7005054b6776fabuzbee    str     r2,[rSELF,#offThread_entryPoint]
13950ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    mov     r1,#1                       @ set changeInterp
13951ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    b       common_gotoBail
13952ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng
1395397319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao#if defined(WITH_SELF_VERIFICATION)
1395497319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao/*
1395597319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao * Save PC and registers to shadow memory for self verification mode
1395697319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao * before jumping to native translation.
13957d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng * On entry:
139589f601a917c8878204482c37aec7005054b6776fabuzbee *    rPC, rFP, rSELF: the values that they should contain
13959d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng *    r10: the address of the target translation.
1396097319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao */
13961d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben ChengjitSVShadowRunStart:
1396297319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    mov     r0,rPC                      @ r0<- program counter
1396397319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    mov     r1,rFP                      @ r1<- frame pointer
139649f601a917c8878204482c37aec7005054b6776fabuzbee    mov     r2,rSELF                    @ r2<- self (Thread) pointer
139659a8c75adb2abf551d06dbf757bff558c1feded08Bill Buzbee    mov     r3,r10                      @ r3<- target translation
1396697319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    bl      dvmSelfVerificationSaveState @ save registers to shadow space
13967ccd6c0102d1f898aaea1c94761167fdd083b5275Ben Cheng    ldr     rFP,[r0,#offShadowSpace_shadowFP] @ rFP<- fp in shadow space
13968ccd6c0102d1f898aaea1c94761167fdd083b5275Ben Cheng    bx      r10                         @ jump to the translation
1396997319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao
1397097319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao/*
139719f601a917c8878204482c37aec7005054b6776fabuzbee * Restore PC, registers, and interpreter state to original values
1397297319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao * before jumping back to the interpreter.
1397397319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao */
13974d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben ChengjitSVShadowRunEnd:
1397597319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    mov    r1,rFP                        @ pass ending fp
139769f601a917c8878204482c37aec7005054b6776fabuzbee    mov    r3,rSELF                      @ pass self ptr for convenience
1397797319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    bl     dvmSelfVerificationRestoreState @ restore pc and fp values
139789f601a917c8878204482c37aec7005054b6776fabuzbee    ldr    rPC,[rSELF,#offThread_pc]     @ restore PC
139799f601a917c8878204482c37aec7005054b6776fabuzbee    ldr    rFP,[rSELF,#offThread_fp]     @ restore FP
13980ccd6c0102d1f898aaea1c94761167fdd083b5275Ben Cheng    ldr    r1,[r0,#offShadowSpace_svState] @ get self verification state
1398197319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    cmp    r1,#0                         @ check for punt condition
1398297319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    beq    1f
1398397319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    mov    r2,#kJitSelfVerification      @ ask for self verification
139849f601a917c8878204482c37aec7005054b6776fabuzbee    str    r2,[rSELF,#offThread_jitState]
1398530f1f463b132c7b6daf2de825c5fa44ce356ca13Ben Cheng    mov    r2,#kInterpEntryInstr         @ normal entry reason
139869f601a917c8878204482c37aec7005054b6776fabuzbee    str    r2,[rSELF,#offThread_entryPoint]
1398797319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    mov    r1,#1                         @ set changeInterp
1398897319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    b      common_gotoBail
1398997319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao
1399097319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao1:                                       @ exit to interpreter without check
1399197319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    EXPORT_PC()
1399297319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    adrl   rIBASE, dvmAsmInstructionStart
1399397319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    FETCH_INST()
1399497319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    GET_INST_OPCODE(ip)
1399597319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao    GOTO_OPCODE(ip)
1399697319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao#endif
1399797319a8a234e9fe1cf90ca39aa6eca37d729afd5Jeff Hao
13998ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
13999ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng
14000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code when a backward branch is taken.
14002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
14003c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden * TODO: we could avoid a branch by just setting r0 and falling through
14004c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden * into the common_periodicChecks code, and having a test on r0 at the
14005c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden * end determine if we should return to the caller or update & branch to
14006c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden * the next instr.
14007c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden *
14008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry:
14009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  r9 is PC adjustment *in bytes*
14010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_backwardBranch:
14012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, #kInterpEntryInstr
14013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      common_periodicChecks
14014ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
14015ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
14016ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
14017ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp     r0,#0
14018ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bne     common_updateProfile
14019ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_INST_OPCODE(ip)
14020ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GOTO_OPCODE(ip)
14021ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
14022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST_RB(r9)           @ update rPC, load rINST
14023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
14024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
14025ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
14026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Need to see if the thread needs to be suspended or debugger/profiler
14030c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden * activity has begun.  If so, we suspend the thread or side-exit to
14031c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden * the debug interpreter as appropriate.
14032c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden *
14033c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden * The common case is no activity on any of these, so we want to figure
14034c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden * that out quickly.  If something is up, we can then sort out what.
14035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
14036c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden * We want to be fast if the VM was built without debugger or profiler
14037c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden * support, but we also need to recognize that the system is usually
14038c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden * shipped with both of these enabled.
14039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
14040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TODO: reduce this so we're just checking a single location.
14041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
14042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry:
14043c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden *  r0 is reentry type, e.g. kInterpEntryInstr (for debugger/profiling)
14044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  r9 is trampoline PC adjustment *in bytes*
14045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_periodicChecks:
140479f601a917c8878204482c37aec7005054b6776fabuzbee/* TUNING - make this a direct load when interpBreak moved to Thread */
140489f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r1, [rSELF, #offThread_pInterpBreak] @ r3<- &interpBreak
140499f601a917c8878204482c37aec7005054b6776fabuzbee    /* speculatively thread-specific suspend count */
140509f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     ip, [rSELF, #offThread_suspendCount]
14051cb3081f675109049e63380170b60871e8275f9a8buzbee    ldr     r1, [r1]                                @ r1<- interpBreak
14052cb3081f675109049e63380170b60871e8275f9a8buzbee    cmp     r1, #0                                  @ anything unusual?
14053cb3081f675109049e63380170b60871e8275f9a8buzbee    bxeq    lr                                      @ return if not
14054c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden    /*
14055c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden     * One or more interesting events have happened.  Figure out what.
14056c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden     *
14057c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden     * r0 still holds the reentry type.
14058c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden     */
14059c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden    cmp     ip, #0                      @ want suspend?
14060cb3081f675109049e63380170b60871e8275f9a8buzbee    beq     3f                          @ no, must be something else
14061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14062c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden    stmfd   sp!, {r0, lr}               @ preserve r0 and lr
14063964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee#if defined(WITH_JIT)
14064964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee    /*
14065964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee     * Refresh the Jit's cached copy of profile table pointer.  This pointer
14066964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee     * doubles as the Jit's on/off switch.
14067964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee     */
140689f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_ppJitProfTable] @ r3<-&gDvmJit.pJitProfTable
140699f601a917c8878204482c37aec7005054b6776fabuzbee    mov     r0, rSELF                  @ r0<- self
14070d5adae17d71e86a1a5f3ae7825054e3249fb7879Ben Cheng    ldr     r3, [r3] @ r3 <- pJitProfTable
1407199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    EXPORT_PC()                         @ need for precise GC
140729f601a917c8878204482c37aec7005054b6776fabuzbee    str     r3, [rSELF, #offThread_pJitProfTable] @ refresh Jit's on/off switch
14073964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee#else
140749f601a917c8878204482c37aec7005054b6776fabuzbee    mov     r0, rSELF                   @ r0<- self
14075964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee    EXPORT_PC()                         @ need for precise GC
14076964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee#endif
14077c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden    bl      dvmCheckSuspendPending      @ do full check, suspend if necessary
14078c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden    ldmfd   sp!, {r0, lr}               @ restore r0 and lr
14079c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden
14080c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden    /*
14081cb3081f675109049e63380170b60871e8275f9a8buzbee     * Reload the interpBreak flags - they may have changed while we
14082cb3081f675109049e63380170b60871e8275f9a8buzbee     * were suspended.
14083c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden     */
140849f601a917c8878204482c37aec7005054b6776fabuzbee/* TUNING - direct load when InterpBreak moved to Thread */
140859f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r1, [rSELF, #offThread_pInterpBreak]   @ r1<- &interpBreak
14086cb3081f675109049e63380170b60871e8275f9a8buzbee    ldr     r1, [r1]                    @ r1<- interpBreak
14087cb3081f675109049e63380170b60871e8275f9a8buzbee3:
14088cb3081f675109049e63380170b60871e8275f9a8buzbee    /*
14089cb3081f675109049e63380170b60871e8275f9a8buzbee     * TODO: this code is too fragile.  Need a general mechanism
14090cb3081f675109049e63380170b60871e8275f9a8buzbee     * to identify what actions to take by submode.  Some profiling modes
14091cb3081f675109049e63380170b60871e8275f9a8buzbee     * (instruction count) need to single-step, while method tracing
14092cb3081f675109049e63380170b60871e8275f9a8buzbee     * may not.  Debugging with breakpoints can run unfettered, but
14093cb3081f675109049e63380170b60871e8275f9a8buzbee     * source-level single-stepping requires Dalvik singlestepping.
14094cb3081f675109049e63380170b60871e8275f9a8buzbee     * GC may require a one-shot action and then full-speed resumption.
14095cb3081f675109049e63380170b60871e8275f9a8buzbee     */
14096cb3081f675109049e63380170b60871e8275f9a8buzbee    ands    r1, #(kSubModeDebuggerActive | kSubModeEmulatorTrace | kSubModeInstCounting)
14097cb3081f675109049e63380170b60871e8275f9a8buzbee    bxeq    lr                          @ nothing to do, return
140985cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng
140999f601a917c8878204482c37aec7005054b6776fabuzbee    @ debugger/profiler enabled, bail out; self->entryPoint was set above
141009f601a917c8878204482c37aec7005054b6776fabuzbee    str     r0, [rSELF, #offThread_entryPoint]  @ store r0, need for debug/prof
14101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     rPC, rPC, r9                @ update rPC
14102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, #1                      @ "want switch" = true
14103c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden    b       common_gotoBail             @ side exit
14104c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden
14105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The equivalent of "goto bail", this calls through the "bail handler".
14108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
141099f601a917c8878204482c37aec7005054b6776fabuzbee * State registers will be saved to the "thread" area before bailing.
14110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
14111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry:
14112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  r1 is "bool changeInterp", indicating if we want to switch to the
14113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     other interpreter or just bail all the way out
14114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_gotoBail:
141169f601a917c8878204482c37aec7005054b6776fabuzbee    SAVE_PC_FP_TO_SELF()                @ export state to "thread"
141179f601a917c8878204482c37aec7005054b6776fabuzbee    mov     r0, rSELF                   @ r0<- self ptr
141189f601a917c8878204482c37aec7005054b6776fabuzbee    b       dvmMterpStdBail             @ call(self, changeInterp)
14119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @add     r1, r1, #1                  @ using (boolean+1)
141219f601a917c8878204482c37aec7005054b6776fabuzbee    @add     r0, rSELF, #offThread_jmpBuf @ r0<- &self->jmpBuf
14122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @bl      _longjmp                    @ does not return
14123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @bl      common_abort
14124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
1412771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Common code for jumbo method invocation.
1412871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * NOTE: this adjusts rPC to account for the difference in instruction width.
1412971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * As a result, the savedPc in the stack frame will not be wholly accurate. So
1413071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * long as that is only used for source file line number calculations, we're
1413171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * okay.
1413271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *
1413371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * On entry:
1413471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao *  r0 is "Method* methodToCall", the method we're trying to call
1413571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */
1413671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhaocommon_invokeMethodJumbo:
1413771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LinvokeNewJumbo:
1413871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ prepare to copy args to "outs" area of current frame
1413971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    add     rPC, rPC, #4                @ adjust pc to make return consistent
1414071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r2, 1)                        @ r2<- BBBB (arg count)
1414171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    SAVEAREA_FROM_FP(r10, rFP)          @ r10<- stack save area
1414271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    cmp     r2, #0                      @ no args?
1414371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    beq     .LinvokeArgsDone            @ if no args, skip the rest
1414471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    FETCH(r1, 2)                        @ r1<- CCCC
1414571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    b       .LinvokeRangeArgs           @ handle args like invoke range
1414671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao
1414771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/*
14148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code for method invocation with range.
14149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
14150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry:
14151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  r0 is "Method* methodToCall", the method we're trying to call
14152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_invokeMethodRange:
14154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LinvokeNewRange:
14155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ prepare to copy args to "outs" area of current frame
14156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r2, rINST, lsr #8           @ r2<- AA (arg count) -- test for zero
14157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SAVEAREA_FROM_FP(r10, rFP)          @ r10<- stack save area
14158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     .LinvokeArgsDone            @ if no args, skip the rest
14159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 2)                        @ r1<- CCCC
14160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1416171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LinvokeRangeArgs:
14162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ r0=methodToCall, r1=CCCC, r2=count, r10=outs
14163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ (very few methods have > 10 args; could unroll for common cases)
14164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     r3, rFP, r1, lsl #2         @ r3<- &fp[CCCC]
14165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sub     r10, r10, r2, lsl #2        @ r10<- "outs" area, for call args
14166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:  ldr     r1, [r3], #4                @ val = *fp++
14167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    subs    r2, r2, #1                  @ count--
14168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    str     r1, [r10], #4               @ *outs++ = val
14169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     1b                          @ ...while count != 0
14170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       .LinvokeArgsDone
14171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code for method invocation without range.
14174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
14175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry:
14176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  r0 is "Method* methodToCall", the method we're trying to call
14177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_invokeMethodNoRange:
14179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LinvokeNewNoRange:
14180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ prepare to copy args to "outs" area of current frame
14181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movs    r2, rINST, lsr #12          @ r2<- B (arg count) -- test for zero
14182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SAVEAREA_FROM_FP(r10, rFP)          @ r10<- stack save area
14183642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    FETCH(r1, 2)                        @ r1<- GFED (load here to hide latency)
14184642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    beq     .LinvokeArgsDone
14185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1418671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    @ r0=methodToCall, r1=GFED, r2=count, r10=outs
14187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LinvokeNonRange:
14188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    rsb     r2, r2, #5                  @ r2<- 5-r2
14189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     pc, pc, r2, lsl #4          @ computed goto, 4 instrs each
14190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      common_abort                @ (skipped due to ARM prefetch)
14191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project5:  and     ip, rINST, #0x0f00          @ isolate A
14192642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    ldr     r2, [rFP, ip, lsr #6]       @ r2<- vA (shift right 8, left 2)
14193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0                      @ nop
14194642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    str     r2, [r10, #-4]!             @ *--outs = vA
14195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project4:  and     ip, r1, #0xf000             @ isolate G
14196642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    ldr     r2, [rFP, ip, lsr #10]      @ r2<- vG (shift right 12, left 2)
14197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0                      @ nop
14198642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    str     r2, [r10, #-4]!             @ *--outs = vG
14199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3:  and     ip, r1, #0x0f00             @ isolate F
14200642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    ldr     r2, [rFP, ip, lsr #6]       @ r2<- vF
14201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0                      @ nop
14202642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    str     r2, [r10, #-4]!             @ *--outs = vF
14203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2:  and     ip, r1, #0x00f0             @ isolate E
14204642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    ldr     r2, [rFP, ip, lsr #2]       @ r2<- vE
14205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0                      @ nop
14206642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    str     r2, [r10, #-4]!             @ *--outs = vE
14207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:  and     ip, r1, #0x000f             @ isolate D
14208642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    ldr     r2, [rFP, ip, lsl #2]       @ r2<- vD
14209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r0                      @ nop
14210642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    str     r2, [r10, #-4]!             @ *--outs = vD
14211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project0:  @ fall through to .LinvokeArgsDone
14212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1421371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LinvokeArgsDone: @ r0=methodToCall
1421471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldrh    r9, [r0, #offMethod_registersSize]  @ r9<- methodToCall->regsSize
1421571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao    ldrh    r3, [r0, #offMethod_outsSize]  @ r3<- methodToCall->outsSize
14216642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    ldr     r2, [r0, #offMethod_insns]  @ r2<- method->insns
14217642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    ldr     rINST, [r0, #offMethod_clazz]  @ rINST<- method->clazz
14218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ find space for the new stack frame, check for overflow
14219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SAVEAREA_FROM_FP(r1, rFP)           @ r1<- stack save area
14220642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    sub     r1, r1, r9, lsl #2          @ r1<- newFp (old savearea - regsSize)
14221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SAVEAREA_FROM_FP(r10, r1)           @ r10<- newSaveArea
14222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@    bl      common_dumpRegs
142239f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r9, [rSELF, #offThread_interpStackEnd]    @ r9<- interpStackEnd
14224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sub     r3, r10, r3, lsl #2         @ r3<- bottom (newsave - outsSize)
14225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r3, r9                      @ bottom < interpStackEnd?
142269f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     lr, [rSELF, #offThread_pInterpBreak]
14227642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    ldr     r3, [r0, #offMethod_accessFlags] @ r3<- methodToCall->accessFlags
142287a44e4ee0782d24b4c6090be1f0a3c66f971f2c1Andy McFadden    blo     .LstackOverflow             @ yes, this frame will overflow stack
14229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ set up newSaveArea
1423118fba346582c08d81aa96d9508c0e935bad5f36fbuzbee    ldr     lr, [lr]                    @ lr<- active submodes
14232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#ifdef EASY_GDB
14233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SAVEAREA_FROM_FP(ip, rFP)           @ ip<- stack save area
14234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    str     ip, [r10, #offStackSaveArea_prevSave]
14235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif
14236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    str     rFP, [r10, #offStackSaveArea_prevFrame]
14237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    str     rPC, [r10, #offStackSaveArea_savedPc]
14238ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
14239ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    mov     r9, #0
14240ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    str     r9, [r10, #offStackSaveArea_returnAddr]
14241ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
1424218fba346582c08d81aa96d9508c0e935bad5f36fbuzbee    ands    lr, #kSubModeMethodTrace    @ method tracing?
1424318fba346582c08d81aa96d9508c0e935bad5f36fbuzbee    beq     1f                          @ skip if not
142445cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng    stmfd   sp!, {r0-r3}                @ preserve r0-r3
142455cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng    mov     r1, r6
142469f601a917c8878204482c37aec7005054b6776fabuzbee    @ r0=methodToCall, r1=rSELF
142475cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng    bl      dvmFastMethodTraceEnter
142485cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng    ldmfd   sp!, {r0-r3}                @ restore r0-r3
1424918fba346582c08d81aa96d9508c0e935bad5f36fbuzbee1:
14250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    str     r0, [r10, #offStackSaveArea_method]
14251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    tst     r3, #ACC_NATIVE
14252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     .LinvokeNative
14253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
14255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmfd   sp!, {r0-r3}
14256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      common_printNewline
14257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rFP
14258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, #0
14259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmDumpFp
14260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmfd   sp!, {r0-r3}
14261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmfd   sp!, {r0-r3}
14262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r1
14263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r10
14264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmDumpFp
14265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      common_printNewline
14266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmfd   sp!, {r0-r3}
14267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    */
14268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14269642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    ldrh    r9, [r2]                        @ r9 <- load INST from new PC
14270642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    ldr     r3, [rINST, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
14271642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    mov     rPC, r2                         @ publish new rPC
14272642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng
142739f601a917c8878204482c37aec7005054b6776fabuzbee    @ Update state values for the new method
142749f601a917c8878204482c37aec7005054b6776fabuzbee    @ r0=methodToCall, r1=newFp, r3=newMethodClass, r9=newINST
142759f601a917c8878204482c37aec7005054b6776fabuzbee    str     r0, [rSELF, #offThread_method]    @ self->method = methodToCall
142769f601a917c8878204482c37aec7005054b6776fabuzbee    str     r3, [rSELF, #offThread_methodClassDex] @ self->methodClassDex = ...
14277ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
14278ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_JIT_PROF_TABLE(r0)
14279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     rFP, r1                         @ fp = newFp
14280642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    GET_PREFETCHED_OPCODE(ip, r9)           @ extract prefetched opcode from r9
14281642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    mov     rINST, r9                       @ publish new rINST
142829f601a917c8878204482c37aec7005054b6776fabuzbee    str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
14283ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    cmp     r0,#0
14284ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    bne     common_updateProfile
14285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                         @ jump to next instruction
14286ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
14287ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    mov     rFP, r1                         @ fp = newFp
14288ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_PREFETCHED_OPCODE(ip, r9)           @ extract prefetched opcode from r9
14289ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    mov     rINST, r9                       @ publish new rINST
142909f601a917c8878204482c37aec7005054b6776fabuzbee    str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
14291ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GOTO_OPCODE(ip)                         @ jump to next instruction
14292ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
14293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LinvokeNative:
14295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ Prep for the native call
14296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ r0=methodToCall, r1=newFp, r10=newSaveArea
142979f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     lr, [rSELF, #offThread_pInterpBreak]
142989f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r9, [rSELF, #offThread_jniLocal_topCookie]@r9<-thread->localRef->...
142999f601a917c8878204482c37aec7005054b6776fabuzbee    str     r1, [rSELF, #offThread_curFrame]   @ self->curFrame = newFp
14300d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden    str     r9, [r10, #offStackSaveArea_localRefCookie] @newFp->localRefCookie=top
1430118fba346582c08d81aa96d9508c0e935bad5f36fbuzbee    ldr     lr, [lr]                    @ lr<- active submodes
14302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, r0                      @ r2<- methodToCall
14304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r1                      @ r0<- newFp (points to args)
143059f601a917c8878204482c37aec7005054b6776fabuzbee    add     r1, rSELF, #offThread_retval  @ r1<- &retval
143069f601a917c8878204482c37aec7005054b6776fabuzbee    mov     r3, rSELF                   @ arg3<- self
14307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#ifdef ASSIST_DEBUGGER
14309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* insert fake function header to help gdb find the stack frame */
14310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       .Lskip
14311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .type   dalvik_mterp, %function
14312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectdalvik_mterp:
14313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .fnstart
14314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    MTERP_ENTRY1
14315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    MTERP_ENTRY2
14316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.Lskip:
14317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif
14318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1431918fba346582c08d81aa96d9508c0e935bad5f36fbuzbee    ands    lr, #kSubModeMethodTrace    @ method tracing?
1432018fba346582c08d81aa96d9508c0e935bad5f36fbuzbee    beq     110f                        @ hop if not
143219f601a917c8878204482c37aec7005054b6776fabuzbee    @ r2=JNIMethod, r6=rSELF
143225cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng    stmfd   sp!, {r2,r6}
143235cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng
14324d88756df5b4dbc6fd450afd0019a5f64ebe4432dElliott Hughes    mov     lr, pc                      @ set return addr
14325d88756df5b4dbc6fd450afd0019a5f64ebe4432dElliott Hughes    ldr     pc, [r2, #offMethod_nativeFunc] @ pc<- methodToCall->nativeFunc
14326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
143279f601a917c8878204482c37aec7005054b6776fabuzbee    @ r0=JNIMethod, r1=rSELF
143285cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng    ldmfd   sp!, {r0-r1}
143295cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng    bl      dvmFastNativeMethodTraceExit
1433018fba346582c08d81aa96d9508c0e935bad5f36fbuzbee    b       220f
1433118fba346582c08d81aa96d9508c0e935bad5f36fbuzbee110:
1433218fba346582c08d81aa96d9508c0e935bad5f36fbuzbee    mov     lr, pc                      @ set return addr
1433318fba346582c08d81aa96d9508c0e935bad5f36fbuzbee    ldr     pc, [r2, #offMethod_nativeFunc] @ pc<- methodToCall->nativeFunc
1433418fba346582c08d81aa96d9508c0e935bad5f36fbuzbee220:
14335964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee#if defined(WITH_JIT)
143369f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r3, [rSELF, #offThread_ppJitProfTable] @ Refresh Jit's on/off status
14337964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee#endif
14338964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee
143399f601a917c8878204482c37aec7005054b6776fabuzbee    @ native return; r10=newSaveArea
14340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ equivalent to dvmPopJniLocals
14341d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden    ldr     r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved top
143429f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r1, [rSELF, #offThread_exception] @ check for exception
14343964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee#if defined(WITH_JIT)
14344964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee    ldr     r3, [r3]                    @ r3 <- gDvmJit.pProfTable
14345964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee#endif
143469f601a917c8878204482c37aec7005054b6776fabuzbee    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
14347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ null?
143489f601a917c8878204482c37aec7005054b6776fabuzbee    str     r0, [rSELF, #offThread_jniLocal_topCookie] @ new top <- old top
14349964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee#if defined(WITH_JIT)
143509f601a917c8878204482c37aec7005054b6776fabuzbee    str     r3, [rSELF, #offThread_pJitProfTable] @ refresh cached on/off switch
14351964a7b06a9134947b5985c7f712d18d57ed665d2Bill Buzbee#endif
14352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bne     common_exceptionThrown      @ no, handle exception
14353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(3)               @ advance rPC, load rINST
14355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
14356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
14357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
143586ed1a0f396a1857c31b486d3e93ee2dbeb49a6cdAndy McFadden.LstackOverflow:    @ r0=methodToCall
143596ed1a0f396a1857c31b486d3e93ee2dbeb49a6cdAndy McFadden    mov     r1, r0                      @ r1<- methodToCall
143609f601a917c8878204482c37aec7005054b6776fabuzbee    mov     r0, rSELF                   @ r0<- self
14361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmHandleStackOverflow
14362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
14363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#ifdef ASSIST_DEBUGGER
14364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .fnend
14365b387fe1b970a216c09d2abc98c893ff1fff3e512Andy McFadden    .size   dalvik_mterp, .-dalvik_mterp
14366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif
14367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
14370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Common code for method invocation, calling through "glue code".
14371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
14372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * TODO: now that we have range and non-range invoke handlers, this
14373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *       needs to be split into two.  Maybe just create entry points
14374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *       that set r9 and jump here?
14375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
14376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * On entry:
14377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  r0 is "Method* methodToCall", the method we're trying to call
14378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *  r9 is "bool methodCallRange", indicating if this is a /range variant
14379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
14380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     .if    0
14381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LinvokeOld:
14382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sub     sp, sp, #8                  @ space for args + pad
14383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(ip, 2)                        @ ip<- FEDC or CCCC
14384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, r0                      @ A2<- methodToCall
143859f601a917c8878204482c37aec7005054b6776fabuzbee    mov     r0, rSELF                   @ A0<- self
143869f601a917c8878204482c37aec7005054b6776fabuzbee    SAVE_PC_FP_TO_SELF()                @ export state to "self"
14387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r9                      @ A1<- methodCallRange
14388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, rINST, lsr #8           @ A3<- AA
14389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    str     ip, [sp, #0]                @ A4<- ip
14390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmMterp_invokeMethod       @ call the C invokeMethod
14391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     sp, sp, #8                  @ remove arg area
14392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_resumeAfterGlueCall  @ continue to next instruction
14393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
14394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code for handling a return instruction.
14399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
14400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This does not return.
14401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_returnFromMethod:
14403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LreturnNew:
14404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, #kInterpEntryReturn
14405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, #0
14406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      common_periodicChecks
14407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
144089f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     lr, [rSELF, #offThread_pInterpBreak]
1440918fba346582c08d81aa96d9508c0e935bad5f36fbuzbee    SAVEAREA_FROM_FP(r0, rFP)
1441018fba346582c08d81aa96d9508c0e935bad5f36fbuzbee    ldr     lr, [lr]                    @ lr<- active submodes
1441118fba346582c08d81aa96d9508c0e935bad5f36fbuzbee    ldr     r9, [r0, #offStackSaveArea_savedPc] @ r9 = saveArea->savedPc
1441218fba346582c08d81aa96d9508c0e935bad5f36fbuzbee    ands    lr, #kSubModeMethodTrace    @ method tracing?
1441318fba346582c08d81aa96d9508c0e935bad5f36fbuzbee    beq     333f
144145cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng    stmfd   sp!, {r0-r3}                @ preserve r0-r3
144155cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng    mov     r0, r6
144169f601a917c8878204482c37aec7005054b6776fabuzbee    @ r0=rSELF
144175cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng    bl      dvmFastJavaMethodTraceExit
144185cc61d70ec727aa22f58463bf7940cc717cf3eb1Ben Cheng    ldmfd   sp!, {r0-r3}                @ restore r0-r3
1441918fba346582c08d81aa96d9508c0e935bad5f36fbuzbee333:
14420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     rFP, [r0, #offStackSaveArea_prevFrame] @ fp = saveArea->prevFrame
14421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [rFP, #(offStackSaveArea_method - sizeofStackSaveArea)]
14422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                        @ r2<- method we're returning to
14423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r2, #0                      @ is this a break frame?
144248c9ac9ab0ab6fd75b73cb0d99005da3aa90c167cBen Cheng#if defined(WORKAROUND_CORTEX_A9_745320)
144258c9ac9ab0ab6fd75b73cb0d99005da3aa90c167cBen Cheng    /* Don't use conditional loads if the HW defect exists */
144268c9ac9ab0ab6fd75b73cb0d99005da3aa90c167cBen Cheng    beq     101f
144278c9ac9ab0ab6fd75b73cb0d99005da3aa90c167cBen Cheng    ldr     r10, [r2, #offMethod_clazz] @ r10<- method->clazz
144288c9ac9ab0ab6fd75b73cb0d99005da3aa90c167cBen Cheng101:
144298c9ac9ab0ab6fd75b73cb0d99005da3aa90c167cBen Cheng#else
14430642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    ldrne   r10, [r2, #offMethod_clazz] @ r10<- method->clazz
144318c9ac9ab0ab6fd75b73cb0d99005da3aa90c167cBen Cheng#endif
14432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, #0                      @ "want switch" = false
14433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     common_gotoBail             @ break frame, bail out completely
14434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14435642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    PREFETCH_ADVANCE_INST(rINST, r9, 3) @ advance r9, update new rINST
144369f601a917c8878204482c37aec7005054b6776fabuzbee    str     r2, [rSELF, #offThread_method]@ self->method = newSave->method
14437642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    ldr     r1, [r10, #offClassObject_pDvmDex]   @ r1<- method->clazz->pDvmDex
144389f601a917c8878204482c37aec7005054b6776fabuzbee    str     rFP, [rSELF, #offThread_curFrame]  @ self->curFrame = fp
14439ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
144407a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng    ldr     r10, [r0, #offStackSaveArea_returnAddr] @ r10 = saveArea->returnAddr
14441ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    mov     rPC, r9                     @ publish new rPC
144429f601a917c8878204482c37aec7005054b6776fabuzbee    str     r1, [rSELF, #offThread_methodClassDex]
144439f601a917c8878204482c37aec7005054b6776fabuzbee    str     r10, [rSELF, #offThread_inJitCodeCache]  @ may return to JIT'ed land
144447a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng    cmp     r10, #0                      @ caller is compiled code
144457a0bcd0de6c4da6499a088a18d1750e51204c2a6Ben Cheng    blxne   r10
14446ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
14447ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GOTO_OPCODE(ip)                     @ jump to next instruction
14448ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
14449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
14450642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng    mov     rPC, r9                     @ publish new rPC
144519f601a917c8878204482c37aec7005054b6776fabuzbee    str     r1, [rSELF, #offThread_methodClassDex]
14452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
14453ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif
14454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
14456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Return handling, calls through "glue code".
14457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
14458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     .if    0
14459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LreturnOld:
144609f601a917c8878204482c37aec7005054b6776fabuzbee    SAVE_PC_FP_TO_SELF()                @ export state
144619f601a917c8878204482c37aec7005054b6776fabuzbee    mov     r0, rSELF                   @ arg to function
14462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmMterp_returnFromMethod
14463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_resumeAfterGlueCall
14464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
14465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Somebody has thrown an exception.  Handle it.
14469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
14470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If the exception processing code returns to us (instead of falling
14471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out of the interpreter), continue with whatever the next instruction
14472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * now happens to be.
14473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
14474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This does not return.
14475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14476ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng     .global dvmMterpCommonExceptionThrown
14477ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben ChengdvmMterpCommonExceptionThrown:
14478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_exceptionThrown:
14479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LexceptionNew:
14480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, #kInterpEntryThrow
14481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r9, #0
14482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      common_periodicChecks
14483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
144849f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r9, [rSELF, #offThread_exception] @ r9<- self->exception
144859f601a917c8878204482c37aec7005054b6776fabuzbee    mov     r1, rSELF                   @ r1<- self
14486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r9                      @ r0<- exception
14487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmAddTrackedAlloc          @ don't let the exception be GCed
14488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, #0                      @ r3<- NULL
144899f601a917c8878204482c37aec7005054b6776fabuzbee    str     r3, [rSELF, #offThread_exception] @ self->exception = NULL
14490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* set up args and a local for "&fp" */
14492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* (str sp, [sp, #-4]!  would be perfect here, but is discouraged) */
14493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    str     rFP, [sp, #-4]!             @ *--sp = fp
14494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     ip, sp                      @ ip<- &fp
14495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, #0                      @ r3<- false
14496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    str     ip, [sp, #-4]!              @ *--sp = &fp
144979f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r1, [rSELF, #offThread_method] @ r1<- self->method
144989f601a917c8878204482c37aec7005054b6776fabuzbee    mov     r0, rSELF                   @ r0<- self
14499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r1, [r1, #offMethod_insns]  @ r1<- method->insns
14500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, r9                      @ r2<- exception
14501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sub     r1, rPC, r1                 @ r1<- pc - method->insns
14502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r1, asr #1              @ r1<- offset in code units
14503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* call, r0 gets catchRelPc (a code-unit offset) */
14505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmFindCatchBlock           @ call(self, relPc, exc, scan?, &fp)
14506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* fix earlier stack overflow if necessary; may trash rFP */
145089f601a917c8878204482c37aec7005054b6776fabuzbee    ldrb    r1, [rSELF, #offThread_stackOverflowed]
14509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ did we overflow earlier?
14510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    beq     1f                          @ no, skip ahead
14511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     rFP, r0                     @ save relPc result in rFP
145129f601a917c8878204482c37aec7005054b6776fabuzbee    mov     r0, rSELF                   @ r0<- self
145134fbba1f95b3e27bdc5f5572bb0420b5f928aa54eAndy McFadden    mov     r1, r9                      @ r1<- exception
14514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmCleanupStackOverflow     @ call(self)
14515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, rFP                     @ restore result
14516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1:
14517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* update frame pointer and check result from dvmFindCatchBlock */
14519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     rFP, [sp, #4]               @ retrieve the updated rFP
14520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ is catchRelPc < 0?
14521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     sp, sp, #8                  @ restore stack
14522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bmi     .LnotCaughtLocally
14523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* adjust locals to match self->curFrame and updated PC */
14525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SAVEAREA_FROM_FP(r1, rFP)           @ r1<- new save area
14526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r1, [r1, #offStackSaveArea_method] @ r1<- new method
145279f601a917c8878204482c37aec7005054b6776fabuzbee    str     r1, [rSELF, #offThread_method]  @ self->method = new method
14528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r1, #offMethod_clazz]      @ r2<- method->clazz
14529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r1, #offMethod_insns]      @ r3<- method->insns
14530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, [r2, #offClassObject_pDvmDex] @ r2<- method->clazz->pDvmDex
14531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    add     rPC, r3, r0, asl #1             @ rPC<- method->insns + catchRelPc
145329f601a917c8878204482c37aec7005054b6776fabuzbee    str     r2, [rSELF, #offThread_methodClassDex] @ self->pDvmDex = meth...
14533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* release the tracked alloc on the exception */
14535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r9                      @ r0<- exception
145369f601a917c8878204482c37aec7005054b6776fabuzbee    mov     r1, rSELF                   @ r1<- self
14537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmReleaseTrackedAlloc      @ release the exception
14538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* restore the exception if the handler wants it */
14540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_INST()                        @ load rINST from rPC
14541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
14542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     ip, #OP_MOVE_EXCEPTION      @ is it "move-exception"?
145439f601a917c8878204482c37aec7005054b6776fabuzbee    streq   r9, [rSELF, #offThread_exception] @ yes, restore the exception
14544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
14545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
145469f601a917c8878204482c37aec7005054b6776fabuzbee.LnotCaughtLocally: @ r9=exception
14547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* fix stack overflow if necessary */
145489f601a917c8878204482c37aec7005054b6776fabuzbee    ldrb    r1, [rSELF, #offThread_stackOverflowed]
14549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ did we overflow earlier?
145509f601a917c8878204482c37aec7005054b6776fabuzbee    movne   r0, rSELF                   @ if yes: r0<- self
145514fbba1f95b3e27bdc5f5572bb0420b5f928aa54eAndy McFadden    movne   r1, r9                      @ if yes: r1<- exception
14552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    blne    dvmCleanupStackOverflow     @ if yes: call(self)
14553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ may want to show "not caught locally" debug messages here
14555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if DVM_SHOW_EXCEPTION >= 2
14556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* call __android_log_print(prio, tag, format, ...) */
14557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* "Exception %s from %s:%d not caught locally" */
14558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ dvmLineNumFromPC(method, pc - method->insns)
145599f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r0, [rSELF, #offThread_method]
14560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r1, [r0, #offMethod_insns]
14561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sub     r1, rPC, r1
14562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    asr     r1, r1, #1
14563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmLineNumFromPC
14564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    str     r0, [sp, #-4]!
14565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ dvmGetMethodSourceFile(method)
145669f601a917c8878204482c37aec7005054b6776fabuzbee    ldr     r0, [rSELF, #offThread_method]
14567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmGetMethodSourceFile
14568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    str     r0, [sp, #-4]!
14569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @ exception->clazz->descriptor
14570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r9, #offObject_clazz]
14571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r3, [r3, #offClassObject_descriptor]
14572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @
14573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r2, strExceptionNotCaughtLocally
14574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r1, strLogTag
14575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, #3                      @ LOG_DEBUG
14576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      __android_log_print
14577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif
145789f601a917c8878204482c37aec7005054b6776fabuzbee    str     r9, [rSELF, #offThread_exception] @ restore exception
14579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r0, r9                      @ r0<- exception
145809f601a917c8878204482c37aec7005054b6776fabuzbee    mov     r1, rSELF                   @ r1<- self
14581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmReleaseTrackedAlloc      @ release the exception
14582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, #0                      @ "want switch" = false
14583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_gotoBail             @ bail out
14584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
14587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Exception handling, calls through "glue code".
14588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
14589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if     0
14590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LexceptionOld:
145919f601a917c8878204482c37aec7005054b6776fabuzbee    SAVE_PC_FP_TO_SELF()                @ export state
145929f601a917c8878204482c37aec7005054b6776fabuzbee    mov     r0, rSELF                   @ arg to function
14593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmMterp_exceptionThrown
14594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_resumeAfterGlueCall
14595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
14596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * After returning from a "glued" function, pull out the updated
14600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * values and start executing at the next instruction.
14601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_resumeAfterGlueCall:
146039f601a917c8878204482c37aec7005054b6776fabuzbee    LOAD_PC_FP_FROM_SELF()              @ pull rPC and rFP out of thread
14604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_INST()                        @ load rINST from rPC
14605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
14606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
14607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14609d88756df5b4dbc6fd450afd0019a5f64ebe4432dElliott Hughes * Invalid array index. Note that our calling convention is strange; we use r1
14610d88756df5b4dbc6fd450afd0019a5f64ebe4432dElliott Hughes * and r3 because those just happen to be the registers all our callers are
14611d88756df5b4dbc6fd450afd0019a5f64ebe4432dElliott Hughes * using. We shuffle them here before calling the C function.
14612d88756df5b4dbc6fd450afd0019a5f64ebe4432dElliott Hughes * r1: index
14613d88756df5b4dbc6fd450afd0019a5f64ebe4432dElliott Hughes * r3: size
14614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errArrayIndex:
14616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()
14617e877cc41c1a5d4f577c5f6fc6bacbe388dfd1d59Elliott Hughes    mov     r0, r1
14618e877cc41c1a5d4f577c5f6fc6bacbe388dfd1d59Elliott Hughes    mov     r1, r3
1461974501e600dcb5634aa26aee0a3f57f2b45b213f2Dan Bornstein    bl      dvmThrowArrayIndexOutOfBoundsException
14620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
14621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Integer divide or mod by zero.
14624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errDivideByZero:
14626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()
14627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, strArithmeticException
14628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r1, strDivideByZero
14629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmThrowException
14630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
14631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Attempt to allocate an array with a negative size.
146348cb0d098d79af61546e275f633325794f4587602buzbee * On entry: length in r1
14635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNegativeArraySize:
14637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()
146388cb0d098d79af61546e275f633325794f4587602buzbee    mov     r0, r1                                @ arg0 <- len
146398cb0d098d79af61546e275f633325794f4587602buzbee    bl      dvmThrowNegativeArraySizeException    @ (len)
14640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
14641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Invocation of a non-existent method.
14644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNoSuchMethod:
14646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()
14647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, strNoSuchMethodError
14648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, #0
14649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmThrowException
14650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
14651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We encountered a null object when we weren't expecting one.  We
14654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * export the PC, throw a NullPointerException, and goto the exception
14655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * processing code.
14656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNullObject:
14658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()
14659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, strNullPointerException
14660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, #0
14661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmThrowException
14662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    b       common_exceptionThrown
14663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For debugging, cause an immediate fault.  The source address will
14666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be in lr (use a bl instruction to jump here).
14667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_abort:
14669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     pc, .LdeadFood
14670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LdeadFood:
14671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .word   0xdeadf00d
14672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Spit out a "we were here", preserving all registers.  (The attempt
14675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to save ip won't work, but we need to save an even number of
14676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * registers for EABI 64-bit stack alignment.)
14677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .macro  SQUEAK num
14679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_squeak\num:
14680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmfd   sp!, {r0, r1, r2, r3, ip, lr}
14681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, strSqueak
14682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, #\num
14683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      printf
14684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmfd   sp!, {r0, r1, r2, r3, ip, lr}
14685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bx      lr
14686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endm
14687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SQUEAK  0
14689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SQUEAK  1
14690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SQUEAK  2
14691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SQUEAK  3
14692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SQUEAK  4
14693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SQUEAK  5
14694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Spit out the number in r0, preserving registers.
14697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_printNum:
14699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmfd   sp!, {r0, r1, r2, r3, ip, lr}
14700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r0
14701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, strSqueak
14702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      printf
14703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmfd   sp!, {r0, r1, r2, r3, ip, lr}
14704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bx      lr
14705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Print a newline, preserving registers.
14708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_printNewline:
14710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmfd   sp!, {r0, r1, r2, r3, ip, lr}
14711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, strNewline
14712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      printf
14713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmfd   sp!, {r0, r1, r2, r3, ip, lr}
14714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bx      lr
14715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
14717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Print the 32-bit quantity in r0 as a hex value, preserving registers.
14718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
14719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_printHex:
14720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmfd   sp!, {r0, r1, r2, r3, ip, lr}
14721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r1, r0
14722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, strPrintHex
14723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      printf
14724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmfd   sp!, {r0, r1, r2, r3, ip, lr}
14725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bx      lr
14726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Print the 64-bit quantity in r0-r1, preserving registers.
14729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_printLong:
14731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmfd   sp!, {r0, r1, r2, r3, ip, lr}
14732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r3, r1
14733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, r0
14734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldr     r0, strPrintLong
14735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      printf
14736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmfd   sp!, {r0, r1, r2, r3, ip, lr}
14737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bx      lr
14738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Print full method info.  Pass the Method* in r0.  Preserves regs.
14741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_printMethod:
14743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmfd   sp!, {r0, r1, r2, r3, ip, lr}
14744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmMterpPrintMethod
14745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmfd   sp!, {r0, r1, r2, r3, ip, lr}
14746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bx      lr
14747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Call a C helper function that dumps regs and possibly some
14750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * additional info.  Requires the C function to be compiled in.
14751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .if     0
14753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_dumpRegs:
14754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    stmfd   sp!, {r0, r1, r2, r3, ip, lr}
14755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmMterpDumpArmRegs
14756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ldmfd   sp!, {r0, r1, r2, r3, ip, lr}
14757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bx      lr
14758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .endif
14759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14760d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden#if 0
14761d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden/*
14762d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden * Experiment on VFP mode.
14763d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden *
14764d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden * uint32_t setFPSCR(uint32_t val, uint32_t mask)
14765d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden *
14766d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden * Updates the bits specified by "mask", setting them to the values in "val".
14767d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden */
14768d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFaddensetFPSCR:
14769d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden    and     r0, r0, r1                  @ make sure no stray bits are set
14770d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden    fmrx    r2, fpscr                   @ get VFP reg
14771d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden    mvn     r1, r1                      @ bit-invert mask
14772d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden    and     r2, r2, r1                  @ clear masked bits
14773d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden    orr     r2, r2, r0                  @ set specified bits
14774d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden    fmxr    fpscr, r2                   @ set VFP reg
14775d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden    mov     r0, r2                      @ return new value
14776d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden    bx      lr
14777d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden
14778d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden    .align  2
14779d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden    .global dvmConfigureFP
14780d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden    .type   dvmConfigureFP, %function
14781d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFaddendvmConfigureFP:
14782d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden    stmfd   sp!, {ip, lr}
14783d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden    /* 0x03000000 sets DN/FZ */
14784d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden    /* 0x00009f00 clears the six exception enable flags */
14785d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden    bl      common_squeak0
14786d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden    mov     r0, #0x03000000             @ r0<- 0x03000000
14787d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden    add     r1, r0, #0x9f00             @ r1<- 0x03009f00
14788d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden    bl      setFPSCR
14789d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden    ldmfd   sp!, {ip, pc}
14790d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden#endif
14791d8125c62642bd71df7485a85f787a1c6e2124c48Andy McFadden
14792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * String references, must be close to the code that uses them.
14795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .align  2
14797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrArithmeticException:
14798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .word   .LstrArithmeticException
14799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrDivideByZero:
14800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .word   .LstrDivideByZero
14801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrNoSuchMethodError:
14802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .word   .LstrNoSuchMethodError
14803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrNullPointerException:
14804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .word   .LstrNullPointerException
14805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrLogTag:
14807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .word   .LstrLogTag
14808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrExceptionNotCaughtLocally:
14809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .word   .LstrExceptionNotCaughtLocally
14810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrNewline:
14812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .word   .LstrNewline
14813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrSqueak:
14814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .word   .LstrSqueak
14815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrPrintHex:
14816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .word   .LstrPrintHex
14817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrPrintLong:
14818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .word   .LstrPrintLong
14819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
14821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Zero-terminated ASCII string data.
14822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
14823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On ARM we have two choices: do like gcc does, and LDR from a .word
14824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * with the address, or use an ADR pseudo-op to get the address
14825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * directly.  ADR saves 4 bytes and an indirection, but it's using a
14826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * PC-relative addressing mode and hence has a limited range, which
14827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * makes it not work well with mergeable string sections.
14828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
14829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .section .rodata.str1.4,"aMS",%progbits,1
14830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrBadEntryPoint:
14832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "Bad entry point %d\n"
14833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrArithmeticException:
14834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "Ljava/lang/ArithmeticException;"
14835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrDivideByZero:
14836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "divide by zero"
14837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrFilledNewArrayNotImpl:
14838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "filled-new-array only implemented for objects and 'int'"
14839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrInternalError:
14840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "Ljava/lang/InternalError;"
14841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrInstantiationError:
14842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "Ljava/lang/InstantiationError;"
14843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNoSuchMethodError:
14844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "Ljava/lang/NoSuchMethodError;"
14845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNullPointerException:
14846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "Ljava/lang/NullPointerException;"
14847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrLogTag:
14849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "mterp"
14850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrExceptionNotCaughtLocally:
14851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "Exception %s from %s:%d not caught locally\n"
14852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNewline:
14854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "\n"
14855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrSqueak:
14856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "<%d>"
14857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrPrintHex:
14858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "<0x%x>"
14859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrPrintLong:
14860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    .asciz  "<%lld>"
14861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14862