1# Copyright (C) 2009 The Android Open Source Project
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15# Specifies the size of the assembly region in bytes
16handler-style computed-goto
17handler-size 64
18
19# source for the instruction table stub
20asm-stub x86-atom/stub.S
21
22# file header, macros and definitions
23import c/header.cpp
24import x86-atom/header.S
25
26# common defs for the C helper; include this before the instruction handlers
27import cstubs/stubdefs.cpp
28import c/opcommon.cpp
29
30# start of opcode list; command gives default directory location of instruction files
31op-start x86-atom
32
33#op OP_ADD_DOUBLE_2ADDR c
34#op OP_ADD_DOUBLE c
35#op OP_ADD_FLOAT_2ADDR c
36#op OP_ADD_FLOAT c
37#op OP_ADD_INT_2ADDR c
38#op OP_ADD_INT_LIT16 c
39#op OP_ADD_INT_LIT8 c
40#op OP_ADD_INT c
41#op OP_ADD_LONG_2ADDR c
42#op OP_ADD_LONG c
43#op OP_AGET_BOOLEAN c
44#op OP_AGET_BYTE c
45#op OP_AGET_CHAR c
46#op OP_AGET_OBJECT c
47#op OP_AGET c
48#op OP_AGET_SHORT c
49#op OP_AGET_WIDE c
50#op OP_AND_INT_2ADDR c
51#op OP_AND_INT_LIT16 c
52#op OP_AND_INT_LIT8 c
53#op OP_AND_INT c
54#op OP_AND_LONG_2ADDR c
55#op OP_AND_LONG c
56#op OP_APUT_BOOLEAN c
57#op OP_APUT_BYTE c
58#op OP_APUT_CHAR c
59#op OP_APUT_OBJECT c
60#op OP_APUT c
61#op OP_APUT_SHORT c
62#op OP_APUT_WIDE c
63#op OP_ARRAY_LENGTH c
64#op OP_CHECK_CAST c
65#op OP_CMPG_DOUBLE c
66#op OP_CMPG_FLOAT c
67#op OP_CMPL_DOUBLE c
68#op OP_CMPL_FLOAT c
69#op OP_CMP_LONG c
70#op OP_CONST_16 c
71#op OP_CONST_4 c
72#op OP_CONST_CLASS c
73#op OP_CONST_HIGH16 c
74#op OP_CONST c
75#op OP_CONST_STRING_JUMBO c
76#op OP_CONST_STRING c
77#op OP_CONST_WIDE_16 c
78#op OP_CONST_WIDE_32 c
79#op OP_CONST_WIDE_HIGH16 c
80#op OP_CONST_WIDE c
81#op OP_DIV_DOUBLE_2ADDR c
82#op OP_DIV_DOUBLE c
83#op OP_DIV_FLOAT_2ADDR c
84#op OP_DIV_FLOAT c
85#op OP_DIV_INT_2ADDR c
86#op OP_DIV_INT_LIT16 c
87#op OP_DIV_INT_LIT8 c
88#op OP_DIV_INT c
89#op OP_DIV_LONG_2ADDR c
90#op OP_DIV_LONG c
91#op OP_DOUBLE_TO_FLOAT c
92#op OP_DOUBLE_TO_INT c
93#op OP_DOUBLE_TO_LONG c
94#op OP_EXECUTE_INLINE c
95#op OP_FILL_ARRAY_DATA c
96#op OP_FILLED_NEW_ARRAY_RANGE c
97#op OP_FILLED_NEW_ARRAY c
98#op OP_FLOAT_TO_DOUBLE c
99#op OP_FLOAT_TO_INT c
100#op OP_FLOAT_TO_LONG c
101#op OP_GOTO_16 c
102#op OP_GOTO_32 c
103#op OP_GOTO c
104#op OP_IF_EQ c
105#op OP_IF_EQZ c
106#op OP_IF_GE c
107#op OP_IF_GEZ c
108#op OP_IF_GT c
109#op OP_IF_GTZ c
110#op OP_IF_LE c
111#op OP_IF_LEZ c
112#op OP_IF_LT c
113#op OP_IF_LTZ c
114#op OP_IF_NE c
115#op OP_IF_NEZ c
116#op OP_IGET_BOOLEAN c
117#op OP_IGET_BYTE c
118#op OP_IGET_CHAR c
119#op OP_IGET_OBJECT_QUICK c
120#op OP_IGET_OBJECT c
121#op OP_IGET_QUICK c
122#op OP_IGET c
123#op OP_IGET_SHORT c
124#op OP_IGET_WIDE_QUICK c
125#op OP_IGET_WIDE c
126#op OP_INSTANCE_OF c
127#op OP_INT_TO_BYTE c
128#op OP_INT_TO_CHAR c
129#op OP_INT_TO_DOUBLE c
130#op OP_INT_TO_FLOAT c
131#op OP_INT_TO_LONG c
132#op OP_INT_TO_SHORT c
133#op OP_INVOKE_DIRECT_EMPTY c
134#op OP_INVOKE_DIRECT_RANGE c
135#op OP_INVOKE_DIRECT c
136#op OP_INVOKE_INTERFACE_RANGE c
137#op OP_INVOKE_INTERFACE c
138#op OP_INVOKE_STATIC_RANGE c
139#op OP_INVOKE_STATIC c
140#op OP_INVOKE_SUPER_QUICK_RANGE c
141#op OP_INVOKE_SUPER_QUICK c
142#op OP_INVOKE_SUPER_RANGE c
143#op OP_INVOKE_SUPER c
144#op OP_INVOKE_VIRTUAL_QUICK_RANGE c
145#op OP_INVOKE_VIRTUAL_QUICK c
146#op OP_INVOKE_VIRTUAL_RANGE c
147#op OP_INVOKE_VIRTUAL c
148#op OP_IPUT_BOOLEAN c
149#op OP_IPUT_BYTE c
150#op OP_IPUT_CHAR c
151#op OP_IPUT_OBJECT_QUICK c
152#op OP_IPUT_OBJECT c
153#op OP_IPUT_QUICK c
154#op OP_IPUT c
155#op OP_IPUT_SHORT c
156#op OP_IPUT_WIDE_QUICK c
157#op OP_IPUT_WIDE c
158#op OP_LONG_TO_DOUBLE c
159#op OP_LONG_TO_FLOAT c
160#op OP_LONG_TO_INT c
161#op OP_MONITOR_ENTER c
162#op OP_MONITOR_EXIT c
163#op OP_MOVE_16 c
164#op OP_MOVE_EXCEPTION c
165#op OP_MOVE_FROM16 c
166#op OP_MOVE_OBJECT_16 c
167#op OP_MOVE_OBJECT_FROM16 c
168#op OP_MOVE_OBJECT c
169#op OP_MOVE_RESULT_OBJECT c
170#op OP_MOVE_RESULT c
171#op OP_MOVE_RESULT_WIDE c
172#op OP_MOVE c
173#op OP_MOVE_WIDE_16 c
174#op OP_MOVE_WIDE_FROM16 c
175#op OP_MOVE_WIDE c
176#op OP_MUL_DOUBLE_2ADDR c
177#op OP_MUL_DOUBLE c
178#op OP_MUL_FLOAT_2ADDR c
179#op OP_MUL_FLOAT c
180#op OP_MUL_INT_2ADDR c
181#op OP_MUL_INT_LIT16 c
182#op OP_MUL_INT_LIT8 c
183#op OP_MUL_INT c
184#op OP_MUL_LONG_2ADDR c
185#op OP_MUL_LONG c
186#op OP_NEG_DOUBLE c
187#op OP_NEG_FLOAT c
188#op OP_NEG_INT c
189#op OP_NEG_LONG c
190#op OP_NEW_ARRAY c
191#op OP_NEW_INSTANCE c
192#op OP_NOP c
193#op OP_NOT_INT c
194#op OP_NOT_LONG c
195#op OP_OR_INT_2ADDR c
196#op OP_OR_INT_LIT16 c
197#op OP_OR_INT_LIT8 c
198#op OP_OR_INT c
199#op OP_OR_LONG_2ADDR c
200#op OP_OR_LONG c
201#op OP_PACKED_SWITCH c
202#op OP_REM_DOUBLE_2ADDR c
203#op OP_REM_DOUBLE c
204#op OP_REM_FLOAT_2ADDR c
205#op OP_REM_FLOAT c
206#op OP_REM_INT_2ADDR c
207#op OP_REM_INT_LIT16 c
208#op OP_REM_INT_LIT8 c
209#op OP_REM_INT c
210#op OP_REM_LONG_2ADDR c
211#op OP_REM_LONG c
212#op OP_RETURN_OBJECT c
213#op OP_RETURN c
214#op OP_RETURN_VOID c
215#op OP_RETURN_WIDE c
216#op OP_RSUB_INT_LIT8 c
217#op OP_RSUB_INT c
218#op OP_SGET_BOOLEAN c
219#op OP_SGET_BYTE c
220#op OP_SGET_CHAR c
221#op OP_SGET_OBJECT c
222#op OP_SGET c
223#op OP_SGET_SHORT c
224#op OP_SGET_WIDE c
225#op OP_SHL_INT_2ADDR c
226#op OP_SHL_INT_LIT8 c
227#op OP_SHL_INT c
228#op OP_SHL_LONG_2ADDR c
229#op OP_SHL_LONG c
230#op OP_SHR_INT_2ADDR c
231#op OP_SHR_INT_LIT8 c
232#op OP_SHR_INT c
233#op OP_SHR_LONG_2ADDR c
234#op OP_SHR_LONG c
235#op OP_SPARSE_SWITCH c
236#op OP_SPUT_BOOLEAN c
237#op OP_SPUT_BYTE c
238#op OP_SPUT_CHAR c
239#op OP_SPUT_OBJECT c
240#op OP_SPUT c
241#op OP_SPUT_SHORT c
242#op OP_SPUT_WIDE c
243#op OP_SUB_DOUBLE_2ADDR c
244#op OP_SUB_DOUBLE c
245#op OP_SUB_FLOAT_2ADDR c
246#op OP_SUB_FLOAT c
247#op OP_SUB_INT_2ADDR c
248#op OP_SUB_INT c
249#op OP_SUB_LONG_2ADDR c
250#op OP_SUB_LONG c
251#op OP_THROW c
252#op OP_UNUSED_3E c
253#op OP_UNUSED_3F c
254#op OP_UNUSED_40 c
255#op OP_UNUSED_41 c
256#op OP_UNUSED_42 c
257#op OP_UNUSED_43 c
258#op OP_UNUSED_73 c
259#op OP_UNUSED_79 c
260#op OP_UNUSED_7A c
261#op OP_UNUSED_F1 c
262#op OP_UNUSED_FC c
263#op OP_UNUSED_FD c
264#op OP_UNUSED_FE c
265#op OP_UNUSED_FF c
266#op OP_USHR_INT_2ADDR c
267#op OP_USHR_INT_LIT8 c
268#op OP_USHR_INT c
269#op OP_USHR_LONG_2ADDR c
270#op OP_USHR_LONG c
271#op OP_XOR_INT_2ADDR c
272#op OP_XOR_INT_LIT16 c
273#op OP_XOR_INT_LIT8 c
274#op OP_XOR_INT c
275#op OP_XOR_LONG_2ADDR c
276#op OP_XOR_LONG c
277
278# TODO: provide native implementations
279op OP_BREAKPOINT c
280op OP_EXECUTE_INLINE_RANGE c
281op OP_IGET_VOLATILE c
282op OP_IPUT_VOLATILE c
283op OP_SGET_VOLATILE c
284op OP_SPUT_VOLATILE c
285op OP_IGET_OBJECT_VOLATILE c
286op OP_IPUT_OBJECT_VOLATILE c
287op OP_SGET_OBJECT_VOLATILE c
288op OP_SPUT_OBJECT_VOLATILE c
289op OP_IGET_WIDE_VOLATILE c
290op OP_IPUT_WIDE_VOLATILE c
291op OP_SGET_WIDE_VOLATILE c
292op OP_SPUT_WIDE_VOLATILE c
293op OP_RETURN_VOID_BARRIER c
294op OP_INVOKE_OBJECT_INIT_RANGE c
295
296op-end
297
298# arch-specific entry point to interpreter
299import x86-atom/entry.S
300
301# "helper" code for C; include this after the instruction handlers
302import c/gotoTargets.cpp
303import cstubs/enddefs.cpp
304
305# common subroutines for asm
306import x86-atom/footer.S
307