# 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.cpp
import x86-atom/header.S

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

# 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_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_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.cpp
import cstubs/enddefs.cpp

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