# 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 ARMv5TE targets with VFP support.
#
# This is just ARMv5TE with replacements for the handlers that can benefit
# from floating-point instructions.  Essentially all float/double
# operations except for "remainder" and conversions to/from 64-bit ints.
#

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.cpp
import armv5te/header.S

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

# highly-platform-specific defs
import armv5te/platform.S

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

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

# opcode list; argument to op-start is default directory
op-start armv5te
    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

    # use trivial integer operation
    #op OP_NEG_DOUBLE armv5te
    #op OP_NEG_FLOAT armv5te

    # use __aeabi_* functions
    #op OP_DOUBLE_TO_LONG armv5te
    #op OP_FLOAT_TO_LONG armv5te
    #op OP_LONG_TO_DOUBLE armv5te
    #op OP_LONG_TO_FLOAT armv5te

    # no "remainder" op in vfp or libgcc.a; use libc function
    #op OP_REM_DOUBLE armv5te
    #op OP_REM_DOUBLE_2ADDR armv5te
    #op OP_REM_FLOAT armv5te
    #op OP_REM_FLOAT_2ADDR armv5te

    # experiment, unrelated to vfp
    #op OP_INT_TO_BYTE armv6
    #op OP_INT_TO_CHAR armv6
    #op OP_INT_TO_SHORT armv6
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.cpp

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

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