# Copyright (C) 2009 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Specifies the size of the assembly region in bytes
handler-style computed-goto
handler-size 64

# source for the instruction table stub
asm-stub x86-atom/stub.S

# file header, macros and definitions
import c/header.c
import x86-atom/header.S

# common defs for the C helper; include this before the instruction handlers
import cstubs/stubdefs.c
import c/opcommon.c

# start of opcode list; command gives default directory location of instruction files
op-start x86-atom

#op OP_ADD_DOUBLE_2ADDR c
#op OP_ADD_DOUBLE c
#op OP_ADD_FLOAT_2ADDR c
#op OP_ADD_FLOAT c
#op OP_ADD_INT_2ADDR c
#op OP_ADD_INT_LIT16 c
#op OP_ADD_INT_LIT8 c
#op OP_ADD_INT c
#op OP_ADD_LONG_2ADDR c
#op OP_ADD_LONG c
#op OP_AGET_BOOLEAN c
#op OP_AGET_BYTE c
#op OP_AGET_CHAR c
#op OP_AGET_OBJECT c
#op OP_AGET c
#op OP_AGET_SHORT c
#op OP_AGET_WIDE c
#op OP_AND_INT_2ADDR c
#op OP_AND_INT_LIT16 c
#op OP_AND_INT_LIT8 c
#op OP_AND_INT c
#op OP_AND_LONG_2ADDR c
#op OP_AND_LONG c
#op OP_APUT_BOOLEAN c
#op OP_APUT_BYTE c
#op OP_APUT_CHAR c
#op OP_APUT_OBJECT c
#op OP_APUT c
#op OP_APUT_SHORT c
#op OP_APUT_WIDE c
#op OP_ARRAY_LENGTH c
#op OP_BREAKPOINT c
#op OP_CHECK_CAST c
#op OP_CMPG_DOUBLE c
#op OP_CMPG_FLOAT c
#op OP_CMPL_DOUBLE c
#op OP_CMPL_FLOAT c
#op OP_CMP_LONG c
#op OP_CONST_16 c
#op OP_CONST_4 c
#op OP_CONST_CLASS c
#op OP_CONST_HIGH16 c
#op OP_CONST c
#op OP_CONST_STRING_JUMBO c
#op OP_CONST_STRING c
#op OP_CONST_WIDE_16 c
#op OP_CONST_WIDE_32 c
#op OP_CONST_WIDE_HIGH16 c
#op OP_CONST_WIDE c
#op OP_DIV_DOUBLE_2ADDR c
#op OP_DIV_DOUBLE c
#op OP_DIV_FLOAT_2ADDR c
#op OP_DIV_FLOAT c
#op OP_DIV_INT_2ADDR c
#op OP_DIV_INT_LIT16 c
#op OP_DIV_INT_LIT8 c
#op OP_DIV_INT c
#op OP_DIV_LONG_2ADDR c
#op OP_DIV_LONG c
#op OP_DOUBLE_TO_FLOAT c
#op OP_DOUBLE_TO_INT c
#op OP_DOUBLE_TO_LONG c
#op OP_EXECUTE_INLINE_RANGE c
#op OP_EXECUTE_INLINE c
#op OP_FILL_ARRAY_DATA c
#op OP_FILLED_NEW_ARRAY_RANGE c
#op OP_FILLED_NEW_ARRAY c
#op OP_FLOAT_TO_DOUBLE c
#op OP_FLOAT_TO_INT c
#op OP_FLOAT_TO_LONG c
#op OP_GOTO_16 c
#op OP_GOTO_32 c
#op OP_GOTO c
#op OP_IF_EQ c
#op OP_IF_EQZ c
#op OP_IF_GE c
#op OP_IF_GEZ c
#op OP_IF_GT c
#op OP_IF_GTZ c
#op OP_IF_LE c
#op OP_IF_LEZ c
#op OP_IF_LT c
#op OP_IF_LTZ c
#op OP_IF_NE c
#op OP_IF_NEZ c
#op OP_IGET_BOOLEAN c
#op OP_IGET_BYTE c
#op OP_IGET_CHAR c
#op OP_IGET_OBJECT_QUICK c
#op OP_IGET_OBJECT c
#op OP_IGET_QUICK c
#op OP_IGET c
#op OP_IGET_SHORT c
#op OP_IGET_WIDE_QUICK c
#op OP_IGET_WIDE c
#op OP_INSTANCE_OF c
#op OP_INT_TO_BYTE c
#op OP_INT_TO_CHAR c
#op OP_INT_TO_DOUBLE c
#op OP_INT_TO_FLOAT c
#op OP_INT_TO_LONG c
#op OP_INT_TO_SHORT c
#op OP_INVOKE_DIRECT_EMPTY c
#op OP_INVOKE_DIRECT_RANGE c
#op OP_INVOKE_DIRECT c
#op OP_INVOKE_INTERFACE_RANGE c
#op OP_INVOKE_INTERFACE c
#op OP_INVOKE_STATIC_RANGE c
#op OP_INVOKE_STATIC c
#op OP_INVOKE_SUPER_QUICK_RANGE c
#op OP_INVOKE_SUPER_QUICK c
#op OP_INVOKE_SUPER_RANGE c
#op OP_INVOKE_SUPER c
#op OP_INVOKE_VIRTUAL_QUICK_RANGE c
#op OP_INVOKE_VIRTUAL_QUICK c
#op OP_INVOKE_VIRTUAL_RANGE c
#op OP_INVOKE_VIRTUAL c
#op OP_IPUT_BOOLEAN c
#op OP_IPUT_BYTE c
#op OP_IPUT_CHAR c
#op OP_IPUT_OBJECT_QUICK c
#op OP_IPUT_OBJECT c
#op OP_IPUT_QUICK c
#op OP_IPUT c
#op OP_IPUT_SHORT c
#op OP_IPUT_WIDE_QUICK c
#op OP_IPUT_WIDE c
#op OP_LONG_TO_DOUBLE c
#op OP_LONG_TO_FLOAT c
#op OP_LONG_TO_INT c
#op OP_MONITOR_ENTER c
#op OP_MONITOR_EXIT c
#op OP_MOVE_16 c
#op OP_MOVE_EXCEPTION c
#op OP_MOVE_FROM16 c
#op OP_MOVE_OBJECT_16 c
#op OP_MOVE_OBJECT_FROM16 c
#op OP_MOVE_OBJECT c
#op OP_MOVE_RESULT_OBJECT c
#op OP_MOVE_RESULT c
#op OP_MOVE_RESULT_WIDE c
#op OP_MOVE c
#op OP_MOVE_WIDE_16 c
#op OP_MOVE_WIDE_FROM16 c
#op OP_MOVE_WIDE c
#op OP_MUL_DOUBLE_2ADDR c
#op OP_MUL_DOUBLE c
#op OP_MUL_FLOAT_2ADDR c
#op OP_MUL_FLOAT c
#op OP_MUL_INT_2ADDR c
#op OP_MUL_INT_LIT16 c
#op OP_MUL_INT_LIT8 c
#op OP_MUL_INT c
#op OP_MUL_LONG_2ADDR c
#op OP_MUL_LONG c
#op OP_NEG_DOUBLE c
#op OP_NEG_FLOAT c
#op OP_NEG_INT c
#op OP_NEG_LONG c
#op OP_NEW_ARRAY c
#op OP_NEW_INSTANCE c
#op OP_NOP c
#op OP_NOT_INT c
#op OP_NOT_LONG c
#op OP_OR_INT_2ADDR c
#op OP_OR_INT_LIT16 c
#op OP_OR_INT_LIT8 c
#op OP_OR_INT c
#op OP_OR_LONG_2ADDR c
#op OP_OR_LONG c
#op OP_PACKED_SWITCH c
#op OP_REM_DOUBLE_2ADDR c
#op OP_REM_DOUBLE c
#op OP_REM_FLOAT_2ADDR c
#op OP_REM_FLOAT c
#op OP_REM_INT_2ADDR c
#op OP_REM_INT_LIT16 c
#op OP_REM_INT_LIT8 c
#op OP_REM_INT c
#op OP_REM_LONG_2ADDR c
#op OP_REM_LONG c
#op OP_RETURN_OBJECT c
#op OP_RETURN c
#op OP_RETURN_VOID c
#op OP_RETURN_WIDE c
#op OP_RSUB_INT_LIT8 c
#op OP_RSUB_INT c
#op OP_SGET_BOOLEAN c
#op OP_SGET_BYTE c
#op OP_SGET_CHAR c
#op OP_SGET_OBJECT c
#op OP_SGET c
#op OP_SGET_SHORT c
#op OP_SGET_WIDE c
#op OP_SHL_INT_2ADDR c
#op OP_SHL_INT_LIT8 c
#op OP_SHL_INT c
#op OP_SHL_LONG_2ADDR c
#op OP_SHL_LONG c
#op OP_SHR_INT_2ADDR c
#op OP_SHR_INT_LIT8 c
#op OP_SHR_INT c
#op OP_SHR_LONG_2ADDR c
#op OP_SHR_LONG c
#op OP_SPARSE_SWITCH c
#op OP_SPUT_BOOLEAN c
#op OP_SPUT_BYTE c
#op OP_SPUT_CHAR c
#op OP_SPUT_OBJECT c
#op OP_SPUT c
#op OP_SPUT_SHORT c
#op OP_SPUT_WIDE c
#op OP_SUB_DOUBLE_2ADDR c
#op OP_SUB_DOUBLE c
#op OP_SUB_FLOAT_2ADDR c
#op OP_SUB_FLOAT c
#op OP_SUB_INT_2ADDR c
#op OP_SUB_INT c
#op OP_SUB_LONG_2ADDR c
#op OP_SUB_LONG c
#op OP_THROW c
#op OP_UNUSED_3E c
#op OP_UNUSED_3F c
#op OP_UNUSED_40 c
#op OP_UNUSED_41 c
#op OP_UNUSED_42 c
#op OP_UNUSED_43 c
#op OP_UNUSED_73 c
#op OP_UNUSED_79 c
#op OP_UNUSED_7A c
#op OP_UNUSED_E3 c
#op OP_UNUSED_E4 c
#op OP_UNUSED_E5 c
#op OP_UNUSED_E6 c
#op OP_UNUSED_E7 c
#op OP_UNUSED_E8 c
#op OP_UNUSED_E9 c
#op OP_UNUSED_EA c
#op OP_UNUSED_EB c
#op OP_UNUSED_F1 c
#op OP_UNUSED_FC c
#op OP_UNUSED_FD c
#op OP_UNUSED_FE c
#op OP_DISPATCH_FF c
#op OP_USHR_INT_2ADDR c
#op OP_USHR_INT_LIT8 c
#op OP_USHR_INT c
#op OP_USHR_LONG_2ADDR c
#op OP_USHR_LONG c
#op OP_XOR_INT_2ADDR c
#op OP_XOR_INT_LIT16 c
#op OP_XOR_INT_LIT8 c
#op OP_XOR_INT c
#op OP_XOR_LONG_2ADDR c
#op OP_XOR_LONG c
# TODO: provide native implementations
op OP_IGET_VOLATILE c
op OP_IPUT_VOLATILE c
op OP_SGET_VOLATILE c
op OP_SPUT_VOLATILE c
op OP_IGET_OBJECT_VOLATILE c
op OP_IPUT_OBJECT_VOLATILE c
op OP_SGET_OBJECT_VOLATILE c
op OP_SPUT_OBJECT_VOLATILE c
op OP_IGET_WIDE_VOLATILE c
op OP_IPUT_WIDE_VOLATILE c
op OP_SGET_WIDE_VOLATILE c
op OP_SPUT_WIDE_VOLATILE c
op OP_RETURN_VOID_BARRIER c
op OP_INVOKE_OBJECT_INIT_RANGE c
op-end

# arch-specific entry point to interpreter
import x86-atom/entry.S

# "helper" code for C; include this after the instruction handlers
import c/gotoTargets.c
import cstubs/enddefs.c

# common subroutines for asm
import x86-atom/footer.S
