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