# 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-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_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 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_UNUSED_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_BREAKPOINT c
op OP_EXECUTE_INLINE_RANGE 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-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


