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

#
# Configuration for ARMv7-A targets.
#
# This target includes Thumb-2 and Thumb2-EE support, as well as VFPLite.
#
# The difference in performance between this and ARMv5TE appears to be
# negligible on a Cortex-A8 CPU, so this is really just an experiment.
#

handler-style computed-goto
handler-size 64

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

# source for alternate entry stub
asm-alt-stub armv5te/alt_stub.S

# file header and basic definitions
import c/header.c
import armv5te/header.S

# C pre-processor defines for stub C instructions
import cstubs/stubdefs.c

# highly-platform-specific defs
import armv7-a/platform.S

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

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

# opcode list; argument to op-start is default directory
op-start armv5te
    # handlers that take advantage of >= ARMv6T2 instructions
    op OP_ADD_DOUBLE_2ADDR armv6t2
    op OP_ADD_FLOAT_2ADDR armv6t2
    op OP_ADD_INT_2ADDR armv6t2
    op OP_ADD_INT_LIT16 armv6t2
    op OP_ADD_LONG_2ADDR armv6t2
    op OP_AND_INT_2ADDR armv6t2
    op OP_AND_INT_LIT16 armv6t2
    op OP_AND_LONG_2ADDR armv6t2
    op OP_ARRAY_LENGTH armv6t2
    op OP_CONST_4 armv6t2
    op OP_DIV_DOUBLE_2ADDR armv6t2
    op OP_DIV_FLOAT_2ADDR armv6t2
    op OP_DIV_INT_2ADDR armv6t2
    op OP_DIV_INT_LIT16 armv6t2
    op OP_DIV_LONG_2ADDR armv6t2
    op OP_DOUBLE_TO_FLOAT armv6t2
    op OP_DOUBLE_TO_INT armv6t2
    op OP_DOUBLE_TO_LONG armv6t2
    op OP_FLOAT_TO_DOUBLE armv6t2
    op OP_FLOAT_TO_INT armv6t2
    op OP_FLOAT_TO_LONG armv6t2
    op OP_IF_EQ armv6t2
    op OP_IF_GE armv6t2
    op OP_IF_GT armv6t2
    op OP_IF_LE armv6t2
    op OP_IF_LT armv6t2
    op OP_IF_NE armv6t2
    op OP_IGET armv6t2
    op OP_IGET_QUICK armv6t2
    op OP_IGET_WIDE armv6t2
    op OP_IGET_WIDE_QUICK armv6t2
    op OP_INT_TO_BYTE armv6t2
    op OP_INT_TO_CHAR armv6t2
    op OP_INT_TO_DOUBLE armv6t2
    op OP_INT_TO_FLOAT armv6t2
    op OP_INT_TO_LONG armv6t2
    op OP_INT_TO_SHORT armv6t2
    op OP_IPUT armv6t2
    op OP_IPUT_QUICK armv6t2
    op OP_IPUT_WIDE armv6t2
    op OP_IPUT_WIDE_QUICK armv6t2
    op OP_LONG_TO_DOUBLE armv6t2
    op OP_LONG_TO_FLOAT armv6t2
    op OP_MOVE armv6t2
    op OP_MOVE_WIDE armv6t2
    op OP_MUL_DOUBLE_2ADDR armv6t2
    op OP_MUL_FLOAT_2ADDR armv6t2
    op OP_MUL_INT_2ADDR armv6t2
    op OP_MUL_INT_LIT16 armv6t2
    op OP_MUL_LONG_2ADDR armv6t2
    op OP_NEG_DOUBLE armv6t2
    op OP_NEG_FLOAT armv6t2
    op OP_NEG_INT armv6t2
    op OP_NEG_LONG armv6t2
    op OP_NOT_INT armv6t2
    op OP_NOT_LONG armv6t2
    op OP_OR_INT_2ADDR armv6t2
    op OP_OR_INT_LIT16 armv6t2
    op OP_OR_LONG_2ADDR armv6t2
    op OP_REM_DOUBLE_2ADDR armv6t2
    op OP_REM_FLOAT_2ADDR armv6t2
    op OP_REM_INT_2ADDR armv6t2
    op OP_REM_INT_LIT16 armv6t2
    op OP_REM_LONG_2ADDR armv6t2
    op OP_RSUB_INT armv6t2
    op OP_SHL_INT_2ADDR armv6t2
    op OP_SHL_LONG_2ADDR armv6t2
    op OP_SHR_INT_2ADDR armv6t2
    op OP_SHR_LONG_2ADDR armv6t2
    op OP_SUB_DOUBLE_2ADDR armv6t2
    op OP_SUB_FLOAT_2ADDR armv6t2
    op OP_SUB_INT_2ADDR armv6t2
    op OP_SUB_LONG_2ADDR armv6t2
    op OP_USHR_INT_2ADDR armv6t2
    op OP_USHR_LONG_2ADDR armv6t2
    op OP_XOR_INT_2ADDR armv6t2
    op OP_XOR_INT_LIT16 armv6t2
    op OP_XOR_LONG_2ADDR armv6t2

    # floating point handlers that use VFP
    # these override the handlers specified earlier
    op OP_ADD_DOUBLE arm-vfp
    op OP_ADD_DOUBLE_2ADDR arm-vfp
    op OP_ADD_FLOAT arm-vfp
    op OP_ADD_FLOAT_2ADDR arm-vfp
    op OP_CMPG_DOUBLE arm-vfp
    op OP_CMPG_FLOAT arm-vfp
    op OP_CMPL_DOUBLE arm-vfp
    op OP_CMPL_FLOAT arm-vfp
    op OP_DIV_DOUBLE arm-vfp
    op OP_DIV_DOUBLE_2ADDR arm-vfp
    op OP_DIV_FLOAT arm-vfp
    op OP_DIV_FLOAT_2ADDR arm-vfp
    op OP_DOUBLE_TO_FLOAT arm-vfp
    op OP_DOUBLE_TO_INT arm-vfp
    op OP_FLOAT_TO_DOUBLE arm-vfp
    op OP_FLOAT_TO_INT arm-vfp
    op OP_INT_TO_DOUBLE arm-vfp
    op OP_INT_TO_FLOAT arm-vfp
    op OP_MUL_DOUBLE arm-vfp
    op OP_MUL_DOUBLE_2ADDR arm-vfp
    op OP_MUL_FLOAT arm-vfp
    op OP_MUL_FLOAT_2ADDR arm-vfp
    op OP_SUB_DOUBLE arm-vfp
    op OP_SUB_DOUBLE_2ADDR arm-vfp
    op OP_SUB_FLOAT arm-vfp
    op OP_SUB_FLOAT_2ADDR arm-vfp
op-end

# "helper" code for C; include if you use any of the C stubs (this generates
# object code, so it's normally excluded)
##import c/gotoTargets.c

# end of defs; include this when cstubs/stubdefs.c is included
import cstubs/enddefs.c

# common subroutines for asm
import armv5te/footer.S
import armv5te/debug.c
