/* src/vm/builtintable.inc - tables of builtin functions
- Copyright (C) 1996-2005 R. Grafl, A. Krall, C. Kruegel, C. Oates,
- R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner,
- C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger,
- Institut f. Computersprachen - TU Wien
+ Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
+ C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
+ E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
+ J. Wenninger, Institut f. Computersprachen - TU Wien
This file is part of CACAO.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA.
-
- Contact: cacao@complang.tuwien.ac.at
-
- Authors: Christian Thalinger
-
- Changes:
-
- $Id: builtintable.inc 2969 2005-07-10 15:24:35Z twisti $
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
*/
#include "config.h"
+
#include "arch.h"
+
+#if defined(ENABLE_THREADS)
+# include "threads/native/lock.h"
+#endif
+
#include "vm/builtin.h"
#include "vm/jit/jit.h"
static builtintable_entry builtintable_internal[] = {
-#if defined(__ALPHA__)
+#if defined(__ALPHA__) || defined(DISABLE_GC)
{
ICMD_F2L,
BUILTIN_f2l,
- "(F)J",
+ NULL,
"f2l",
+ "(F)J",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_D2L,
BUILTIN_d2l,
- "(D)J",
+ NULL,
"d2l",
+ "(D)J",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_F2I,
BUILTIN_f2i,
- "(F)I",
+ NULL,
"f2i",
+ "(F)I",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_D2I,
BUILTIN_d2i,
- "(D)I",
+ NULL,
"d2i",
+ "(D)I",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
#endif
-#if !SUPPORT_DIVISION
+#if !SUPPORT_DIVISION || defined(DISABLE_GC)
{
ICMD_IDIV,
BUILTIN_idiv,
- "(II)I",
+ NULL,
"idiv",
+ "(II)I",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_IREM,
BUILTIN_irem,
- "(II)I",
+ NULL,
"irem",
+ "(II)I",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
#endif
-#if !(SUPPORT_DIVISION && SUPPORT_LONG && SUPPORT_LONG_DIV)
+#if !(SUPPORT_DIVISION && SUPPORT_LONG && SUPPORT_LONG_DIV) || defined(DISABLE_GC)
{
ICMD_LDIV,
BUILTIN_ldiv,
- "(JJ)J",
+ NULL,
"ldiv",
+ "(JJ)J",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_LREM,
BUILTIN_lrem,
- "(JJ)J",
+ NULL,
"lrem",
+ "(JJ)J",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
#endif
{
ICMD_FREM,
BUILTIN_frem,
- "(FF)F",
+ NULL,
"frem",
+ "(FF)F",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_DREM,
BUILTIN_drem,
- "(DD)D",
+ NULL,
"drem",
+ "(DD)D",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_NEW,
BUILTIN_new,
- "(Ljava/lang/Class;)Ljava/lang/Object;",
+ NULL,
"new",
+ "(Ljava/lang/Class;)Ljava/lang/Object;",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_ANEWARRAY,
BUILTIN_newarray,
- "(ILjava/lang/Class;)[Ljava/lang/Object;",
+ NULL,
"newarray",
+ "(ILjava/lang/Class;)[Ljava/lang/Object;",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_NEWARRAY,
BUILTIN_newarray_boolean,
- "(I)[Z",
+ NULL,
"newarray_boolean",
+ "(I)[Z",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_NEWARRAY,
BUILTIN_newarray_byte,
- "(I)[B",
+ NULL,
"newarray_byte",
+ "(I)[B",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_NEWARRAY,
BUILTIN_newarray_char,
- "(I)[C",
+ NULL,
"newarray_char",
+ "(I)[C",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_NEWARRAY,
BUILTIN_newarray_short,
- "(I)[S",
+ NULL,
"newarray_short",
+ "(I)[S",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_NEWARRAY,
BUILTIN_newarray_int,
- "(I)[I",
+ NULL,
"newarray_int",
+ "(I)[I",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_NEWARRAY,
BUILTIN_newarray_long,
- "(I)[J",
+ NULL,
"newarray_long",
+ "(I)[J",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_NEWARRAY,
BUILTIN_newarray_float,
- "(I)[F",
+ NULL,
"newarray_float",
+ "(I)[F",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_NEWARRAY,
BUILTIN_newarray_double,
- "(I)[D",
+ NULL,
"newarray_double",
+ "(I)[D",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_CHECKCAST,
BUILTIN_arraycheckcast,
- "([Ljava/lang/Object;[Ljava/lang/Object;)[Ljava/lang/Object;",
+ NULL,
"arraycheckcast",
+ "([Ljava/lang/Object;[Ljava/lang/Object;)[Ljava/lang/Object;",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_INSTANCEOF,
BUILTIN_arrayinstanceof,
- "([Ljava/lang/Object;[Ljava/lang/Object;)I",
+ NULL,
"arrayinstanceof",
+ "([Ljava/lang/Object;[Ljava/lang/Object;)I",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
-#if !defined(__POWERPC__) && !defined(__X86_64__) && !defined(__I386__)
- {
- ICMD_AASTORE,
- BUILTIN_aastore,
- "([Ljava/lang/Object;ILjava/lang/Object;)V",
- "aastore",
- NULL
- },
-#endif
{
ICMD_AASTORE,
BUILTIN_canstore,
- "([Ljava/lang/Object;Ljava/lang/Object;)I",
+ NULL,
"canstore",
+ "([Ljava/lang/Object;Ljava/lang/Object;)I",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
-#if defined(USE_THREADS)
+#if defined(ENABLE_THREADS)
{
ICMD_MONITORENTER,
- BUILTIN_monitorenter,
- "(Ljava/lang/Object;)V",
+ LOCK_monitor_enter,
+ NULL,
"monitorenter",
+ "(Ljava/lang/Object;)V",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_MONITOREXIT,
- BUILTIN_monitorexit,
- "(Ljava/lang/Object;)V",
+ LOCK_monitor_exit,
+ NULL,
"monitorexit",
+ "(Ljava/lang/Object;)V",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
#endif
- /* assembler code patching functions **************************************/
+ /* stop entry */
{
- ICMD_NEW,
- PATCHER_builtin_new,
- "(Ljava/lang/Class;)Ljava/lang/Object;",
- "new (NOT RESOLVED)",
- NULL
- },
- {
- ICMD_ANEWARRAY,
- PATCHER_builtin_newarray,
- "(ILjava/lang/Class;)[Ljava/lang/Object;",
- "newarray (NOT RESOLVED)",
- NULL
- },
- {
- ICMD_CHECKCAST,
- PATCHER_builtin_arraycheckcast,
- "([Ljava/lang/Class;[Ljava/lang/Class;)[Ljava/lang/Object;",
- "arraycheckcast (NOT RESOLVED)",
- NULL
- },
- {
- ICMD_INSTANCEOF,
- PATCHER_builtin_arrayinstanceof,
- "([Ljava/lang/Class;[Ljava/lang/Class;)I",
- "arrayinstanceof (NOT RESOLVED)",
+ 255,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
};
{
ICMD_LCMP,
BUILTIN_lcmp,
- "(JJ)I",
+ NULL,
"lcmp",
+ "(JJ)I",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
#endif
{
ICMD_LAND,
BUILTIN_land,
- "(JJ)J",
+ NULL,
"land",
+ "(JJ)J",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_LOR,
BUILTIN_lor,
- "(JJ)J",
+ NULL,
"lor",
+ "(JJ)J",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_LXOR,
BUILTIN_lxor,
- "(JJ)J",
+ NULL,
"lxor",
+ "(JJ)J",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
#endif /* !(SUPPORT_LONG && SUPPORT_LONG_LOGICAL) */
{
ICMD_LSHL,
BUILTIN_lshl,
- "(JI)J",
+ NULL,
"lshl",
+ "(JI)J",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_LSHR,
BUILTIN_lshr,
- "(JI)J",
+ NULL,
"lshr",
+ "(JI)J",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_LUSHR,
BUILTIN_lushr,
- "(JI)J",
+ NULL,
"lushr",
+ "(JI)J",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
#endif /* !(SUPPORT_LONG && SUPPORT_LONG_SHIFT) */
{
ICMD_LADD,
BUILTIN_ladd,
- "(JJ)J",
+ NULL,
"ladd",
+ "(JJ)J",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_LSUB,
BUILTIN_lsub,
- "(JJ)J",
+ NULL,
"lsub",
+ "(JJ)J",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_LNEG,
BUILTIN_lneg,
- "(J)J",
+ NULL,
"lneg",
+ "(J)J",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
#endif /* !(SUPPORT_LONG && SUPPORT_LONG_ADD) */
{
ICMD_LMUL,
BUILTIN_lmul,
- "(JJ)J",
+ NULL,
"lmul",
+ "(JJ)J",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
#endif
-#if !(SUPPORT_FLOAT && SUPPORT_IFCVT)
+#if !(SUPPORT_FLOAT && SUPPORT_I2F)
{
ICMD_I2F,
BUILTIN_i2f,
- "(I)F",
+ NULL,
"i2f",
+ "(I)F",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
#endif
-#if !(SUPPORT_DOUBLE && SUPPORT_IFCVT)
+#if !(SUPPORT_DOUBLE && SUPPORT_I2D)
{
ICMD_I2D,
BUILTIN_i2d,
- "(I)D",
+ NULL,
"i2d",
+ "(I)D",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
#endif
-#if !(SUPPORT_FLOAT && SUPPORT_FICVT)
+#if !(SUPPORT_LONG && SUPPORT_FLOAT && SUPPORT_L2F)
{
- ICMD_F2I,
- BUILTIN_f2i,
- "(F)I",
- "f2i",
+ ICMD_L2F,
+ BUILTIN_l2f,
+ NULL,
+ "l2f",
+ "(J)F",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
#endif
-#if !(SUPPORT_DOUBLE && SUPPORT_FICVT)
+#if !(SUPPORT_LONG && SUPPORT_DOUBLE && SUPPORT_L2D)
{
- ICMD_D2I,
- BUILTIN_d2i,
- "(D)I",
- "d2i",
+ ICMD_L2D,
+ BUILTIN_l2d,
+ NULL,
+ "l2d",
+ "(J)D",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
#endif
-#if !(SUPPORT_LONG && SUPPORT_FLOAT && SUPPORT_LONG_FCVT)
+#if !(SUPPORT_FLOAT && SUPPORT_F2I)
{
- ICMD_L2F,
- BUILTIN_l2f,
- "(J)F",
- "l2f",
+ ICMD_F2I,
+ BUILTIN_f2i,
+ NULL,
+ "f2i",
+ "(F)I",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
#endif
-#if !(SUPPORT_LONG && SUPPORT_DOUBLE && SUPPORT_LONG_FCVT)
+#if !(SUPPORT_FLOAT && SUPPORT_LONG && SUPPORT_F2L)
{
- ICMD_L2D,
- BUILTIN_l2d,
- "(J)D",
- "l2d",
+ ICMD_F2L,
+ BUILTIN_f2l,
+ NULL,
+ "f2l",
+ "(F)J",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
#endif
-#if !(SUPPORT_FLOAT && SUPPORT_LONG && SUPPORT_LONG_ICVT)
+#if !(SUPPORT_DOUBLE && SUPPORT_D2I)
{
- ICMD_F2L,
- BUILTIN_f2l,
- "(F)J",
- "f2l",
+ ICMD_D2I,
+ BUILTIN_d2i,
+ NULL,
+ "d2i",
+ "(D)I",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
#endif
-#if !(SUPPORT_DOUBLE && SUPPORT_LONG && SUPPORT_LONG_ICVT)
+#if !(SUPPORT_DOUBLE && SUPPORT_LONG && SUPPORT_D2L)
{
ICMD_D2L,
BUILTIN_d2l,
- "(D)J",
+ NULL,
"d2l",
+ "(D)J",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
#endif
{
ICMD_FADD,
BUILTIN_fadd,
- "(FF)F",
+ NULL,
"fadd",
+ "(FF)F",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_FSUB,
BUILTIN_fsub,
- "(FF)F",
+ NULL,
"fsub",
+ "(FF)F",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_FMUL,
BUILTIN_fmul,
- "(FF)F",
+ NULL,
"fmul",
+ "(FF)F",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_FDIV,
BUILTIN_fdiv,
- "(FF)F",
+ NULL,
"fdiv",
+ "(FF)F",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_FNEG,
BUILTIN_fneg,
- "(F)F",
+ NULL,
"fneg",
+ "(F)F",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
+#endif /* !SUPPORT_FLOAT */
+
+#if !SUPPORT_FLOAT || !SUPPORT_FLOAT_CMP
{
ICMD_FCMPL,
BUILTIN_fcmpl,
- "(FF)I",
+ NULL,
"fcmpl",
+ "(FF)I",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_FCMPG,
BUILTIN_fcmpg,
- "(FF)I",
+ NULL,
"fcmpg",
+ "(FF)I",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
-#endif /* !SUPPORT_FLOAT */
+#endif /* !SUPPORT_FLOAT || !SUPPORT_FLOAT_CMP */
/* double functions *******************************************************/
{
ICMD_DADD,
BUILTIN_dadd,
- "(DD)D",
+ NULL,
"dadd",
+ "(DD)D",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_DSUB,
BUILTIN_dsub,
- "(DD)D",
+ NULL,
"dsub",
+ "(DD)D",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_DMUL,
BUILTIN_dmul,
- "(DD)D",
+ NULL,
"dmul",
+ "(DD)D",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_DDIV,
BUILTIN_ddiv,
- "(DD)D",
+ NULL,
"ddiv",
+ "(DD)D",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_DNEG,
BUILTIN_dneg,
- "(D)D",
+ NULL,
"dneg",
+ "(D)D",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
+#endif /* !SUPPORT_DOUBLE */
+
+#if !SUPPORT_DOUBLE || !SUPPORT_DOUBLE_CMP
{
ICMD_DCMPL,
BUILTIN_dcmpl,
- "(DD)I",
+ NULL,
"dcmpl",
+ "(DD)I",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_DCMPG,
BUILTIN_dcmpg,
- "(DD)I",
+ NULL,
"dcmpg",
+ "(DD)I",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
-#endif /* !SUPPORT_DOUBLE */
+#endif /* !SUPPORT_DOUBLE || !SUPPORT_DOUBLE_CMP */
/* float/double functions *************************************************/
{
ICMD_F2D,
BUILTIN_f2d,
- "(F)D",
+ NULL,
"f2d",
+ "(F)D",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
{
ICMD_D2F,
BUILTIN_d2f,
- "(D)F",
+ NULL,
"d2f",
+ "(D)F",
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
#endif /* !(SUPPORT_FLOAT && SUPPORT_DOUBLE) */
NULL,
NULL,
NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ false,
+ NULL
+ },
+};
+
+
+/* automatically replaced functions *******************************************/
+
+static builtintable_entry builtintable_function[] = {
+#if defined(ENABLE_JIT)
+
+ /* java.lang.VMSystem.arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V STATIC NATIVE */
+
+ {
+ ICMD_BUILTIN,
+ BUILTIN_arraycopy,
+ "java/lang/VMSystem",
+ "arraycopy",
+ "(Ljava/lang/Object;ILjava/lang/Object;II)V",
+ NULL,
+ NULL,
+ NULL,
+ true,
+ NULL
+ },
+
+ /* java.lang.System.arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V PUBLIC STATIC */
+
+#if 0
+ /* We disable this one until we have a fix for the stacktrace
+ issue. */
+
+ {
+ ICMD_BUILTIN,
+ BUILTIN_arraycopy,
+ "java/lang/System",
+ "arraycopy",
+ "(Ljava/lang/Object;ILjava/lang/Object;II)V",
+ NULL,
+ NULL,
+ NULL,
+ true,
+ NULL
+ },
+#endif
+
+ /* java.lang.VMSystem.currentTimeMillis()J PUBLIC STATIC */
+
+ {
+ ICMD_BUILTIN,
+ BUILTIN_currenttimemillis,
+ "java/lang/VMSystem",
+ "currentTimeMillis",
+ "()J",
+ NULL,
+ NULL,
+ NULL,
+ false,
+ NULL
+ },
+
+ /* java.lang.System.currentTimeMillis()J PUBLIC STATIC */
+
+ {
+ ICMD_BUILTIN,
+ BUILTIN_currenttimemillis,
+ "java/lang/System",
+ "currentTimeMillis",
+ "()J",
+ NULL,
+ NULL,
+ NULL,
+ false,
+ NULL
+ },
+
+#endif /* defined(ENABLE_JIT) */
+
+ /* stop entry */
+
+ {
+ 255,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ false,
NULL
},
};