# 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_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_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_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-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
