[kaffe] CVS kaffe (robilad): use soft_cvtfi on arm jit
Kaffe CVS
cvs-commits at kaffe.org
Sun Feb 3 07:07:28 PST 2008
PatchSet 7737
Date: 2008/02/03 15:05:15
Author: robilad
Branch: HEAD
Tag: (none)
Log:
use soft_cvtfi on arm jit
Members:
ChangeLog:1.5237->1.5238
config/arm/jit-icode.h:INITIAL->1.4
Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.5237 kaffe/ChangeLog:1.5238
--- kaffe/ChangeLog:1.5237 Sat Feb 2 22:15:25 2008
+++ kaffe/ChangeLog Sun Feb 3 15:05:15 2008
@@ -1,3 +1,8 @@
+2008-02-03 Dalibor Topic <robilad at kaffe.org>
+
+ * config/arm/jit-icode.h (HAVE_cvt_float_int)> Undefine
+ to fix jit regression test failure.
+
2008-02-02 Dalibor Topic <robilad at kaffe.org>
* TODO: Updated.
===================================================================
Checking out kaffe/config/arm/jit-icode.h
RCS: /home/cvs/kaffe/kaffe/config/arm/jit-icode.h,v
VERS: 1.4
***************
--- /dev/null Sun Aug 4 19:57:58 2002
+++ kaffe/config/arm/jit-icode.h Sun Feb 3 15:07:28 2008
@@ -0,0 +1,274 @@
+/* arm/jit-icode.h
+ * Define the instructions which are present on the ARM.
+ *
+ * Copyright (c) 1996, 1997
+ * Transvirtual Technologies, Inc. All rights reserved.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file.
+ */
+
+#ifndef __icode_h
+#define __icode_h
+
+/*
+ * Size of long's compared to references.
+ */
+#define pusharg_long_idx_inc 2
+
+/*
+ * Define the range checking macros.
+ */
+#define __anyvalue_rangecheck(v) (1)
+
+//
+// Register-register operations allow you to specify an 8-bit
+// constant (...than can be shifted, although we don't handle that yet)
+//
+#define __I8const_rangecheck(v) ((v) >= -256 && (v) <= 255)
+#define __U8const_rangecheck(v) ((v) >= 0 && (v) <= 255)
+
+//
+// Used for floating load/stores, which use word index rather
+// than byte index.
+//
+#define __I10const_rangecheck(v) ((v) >= -1020 && (v) <= 1020)
+
+//
+// memory operations allow you to specify a 12-bit constant
+//
+#define __I12const_rangecheck(v) ((v) >= -4096 && (v) <= 4095)
+
+#define __refconst_rangecheck(v) __I8const_rangecheck(v)
+
+#define __floatconst_rangecheck(v) 0
+
+#define __builtin_FP_values(v) ( (v) == 0 || (v) == 1.0 || (v) == 2.0 || (v) == 3.0 || (v) == 4.0 || (v) == 5.0 || (v) == 0.5 || (v) == 10)
+
+#define __doubleconst_rangecheck(v) 0
+
+/*
+ * These must be defined for any architecture.
+ */
+#define HAVE_spill_int spill_Rxx
+#define HAVE_reload_int reload_Rxx
+#define HAVE_spill_float fspill_Rxx
+#define HAVE_reload_float freload_Rxx
+#define HAVE_spill_double fspilll_Rxx
+#define HAVE_reload_double freloadl_Rxx
+#define HAVE_prologue prologue_xxx
+#define HAVE_epilogue epilogue_xxx
+#define HAVE_exception_prologue eprologue_xxx
+
+#define HAVE_move_int_const move_RxC
+#define HAVE_move_int move_RxR
+#define HAVE_move_float fmove_RxR
+#define HAVE_move_double fmovel_RxR
+#define HAVE_move_label_const move_RxL
+#define HAVE_move_ref move_RxR
+#define HAVE_move_ref_const move_RxC
+#define HAVE_move_any move_RxR
+
+#define HAVE_move_float_const_rangecheck(v) __builtin_FP_values(v)
+#define HAVE_move_double_const_rangecheck(v) __builtin_FP_values(v)
+#define HAVE_move_float_const fmove_RxC
+#define HAVE_move_double_const fmovel_RxC
+
+#define HAVE_move_int_const_rangecheck(v) __anyvalue_rangecheck(v)
+#define HAVE_move_ref_const_rangecheck(v) __anyvalue_rangecheck(v)
+
+#define HAVE_add_int add_RRR
+#define HAVE_sub_int sub_RRR
+#define HAVE_mul_int mul_RRR
+#undef HAVE_div_int
+#undef HAVE_rem_int
+#define HAVE_and_int and_RRR
+#define HAVE_or_int or_RRR
+#define HAVE_xor_int xor_RRR
+#define HAVE_ashr_int ashr_RRR
+#define HAVE_lshr_int lshr_RRR
+#define HAVE_lshl_int lshl_RRR
+
+#define HAVE_add_float fadd_RRR
+#define HAVE_sub_float fsub_RRR
+#define HAVE_mul_float fmul_RRR
+
+#define HAVE_add_double faddl_RRR
+#define HAVE_sub_double fsubl_RRR
+#define HAVE_mul_double fmull_RRR
+
+#define HAVE_load_int load_RxR
+#define HAVE_store_int store_xRR
+#define HAVE_load_ref load_RxR
+#define HAVE_store_ref store_xRR
+#define HAVE_load_float fload_RxR
+#define HAVE_store_float fstore_RxR
+#define HAVE_load_double floadl_RxR
+#define HAVE_store_double fstorel_RxR
+
+#define HAVE_pusharg_int push_xRC
+#define HAVE_pusharg_float fpush_xRC
+#define HAVE_pusharg_double fpushl_xRC
+#define HAVE_pusharg_ref push_xRC
+#define HAVE_popargs popargs_xxC
+
+#define HAVE_cmp_int cmp_xRR
+
+//
+// Ref's are just int's
+//
+#define HAVE_cmp_ref cmp_xRR
+#define HAVE_add_ref add_RRR
+#define HAVE_add_ref_const add_RRC
+#define HAVE_cmp_ref_const cmp_xRC
+
+
+#ifdef I_THINK_THESE_DO_NOT_WORK_ALTHOUGH_I_DEFINED_THE_CODE_CORRECTLY
+# define HAVE_add_ref_const addref_RRC
+# define HAVE_cmp_ref_const cmpref_xRC
+#endif
+
+
+#define HAVE_branch branch_xCC
+#undef HAVE_branch_indirect
+
+// #define HAVE_call_ref call_xCC
+#undef HAVE_call_ref
+
+#define HAVE_call call_xRC
+#define HAVE_branch_indirect branch_indirect_xRC
+#define HAVE_return_int return_Rxx
+#define HAVE_return_long returnl_Rxx
+#define HAVE_return_float freturn_Rxx
+#define HAVE_return_double freturnl_Rxx
+#define HAVE_return_ref return_Rxx
+#define HAVE_returnarg_int returnarg_xxR
+#define HAVE_returnarg_long returnargl_xxR
+#define HAVE_returnarg_float freturnarg_xxR
+#define HAVE_returnarg_double freturnargl_xxR
+#define HAVE_returnarg_ref returnarg_xxR
+
+#define HAVE_set_label set_label_xxC
+#define HAVE_build_key set_word_xxC
+#define HAVE_build_code_ref set_wordpc_xxC
+#undef HAVE_build_const_ref
+
+#define HAVE_cvt_int_float cvtif_RxR
+#define HAVE_cvt_int_double cvtid_RxR
+
+#undef HAVE_cvt_float_int
+#undef HAVE_cvt_float_int_ieee
+#define HAVE_cvt_double_int cvtdi_RxR
+#undef HAVE_cvt_double_int_ieee
+
+#undef HAVE_cvt_long_double
+#undef HAVE_cvt_long_float
+#undef HAVE_cvt_float_long
+#undef HAVE_cvt_double_long
+
+#define HAVE_cvt_float_double cvtfd_RxR
+#define HAVE_cvt_double_float cvtdf_RxR
+
+/*
+ * These are sometimes optional (if long operators are defined)
+ */
+#define HAVE_adc_int adc_RRR
+#define HAVE_sbc_int sbc_RRR
+
+/*
+ * These are optional but help to optimise the code generated.
+ */
+#define HAVE_add_int_const add_RRC
+#define HAVE_cmp_int_const cmp_xRC
+#define HAVE_sub_int_const sub_RRC
+#define HAVE_and_int_const and_RRC
+
+
+#undef HAVE_pusharg_int_const
+#undef HAVE_load_offset_int
+#undef HAVE_store_offset_int
+#undef HAVE_load_offset_ref
+#undef HAVE_store_offset_ref
+#undef HAVE_lshl_int_const
+
+//
+// We handle a signed value in the add/sub form
+// by flipping the operator
+//
+#define HAVE_add_int_const_rangecheck(v) __I8const_rangecheck(v)
+#define HAVE_sub_int_const_rangecheck(v) __I8const_rangecheck(v)
+#define HAVE_add_ref_const_rangecheck(v) HAVE_add_int_const_rangecheck(v)
+
+#define HAVE_cmp_int_const_rangecheck(v) __U8const_rangecheck(v)
+#define HAVE_cmp_ref_const_rangecheck(v) __U8const_rangecheck(v)
+#define HAVE_pusharg_int_const_rangecheck(v) __U8const_rangecheck(v)
+#define HAVE_and_int_const_rangecheck(v) __U8const_rangecheck(v)
+
+// Not used yet
+// #define HAVE_lshl_int_const_rangecheck(v) __U8const_rangecheck(v)
+
+#define HAVE_load_offset_int_rangecheck(v) __I12const_rangecheck(v)
+#define HAVE_store_offset_int_rangecheck(v) __I12const_rangecheck(v)
+#define HAVE_load_offset_ref_rangecheck(v) __I12const_rangecheck(v)
+#define HAVE_store_offset_ref_rangecheck(v) __I12const_rangecheck(v)
+
+
+#define HAVE_load_byte loadb_RxR
+#define HAVE_load_char loadc_RxR
+#define HAVE_load_short loads_RxR
+#define HAVE_store_byte storeb_xRR
+#define HAVE_store_char stores_xRR
+#define HAVE_store_short stores_xRR
+
+/*
+ * These are optional if the architecture supports them.
+ */
+#undef HAVE_mul_int_const
+#undef HAVE_swap_int
+#undef HAVE_neg_int
+
+#undef HAVE_ashr_int_const
+#undef HAVE_lshr_int_const
+
+#undef HAVE_cmpg_float
+#undef HAVE_cmpg_double
+#undef HAVE_cmpl_float
+#undef HAVE_cmpl_double
+
+#undef HAVE_move_long_const
+#undef HAVE_move_long
+
+#undef HAVE_add_long
+#undef HAVE_sub_long
+#undef HAVE_mul_long
+#undef HAVE_div_long
+#undef HAVE_rem_long
+#undef HAVE_neg_long
+#undef HAVE_and_long
+#undef HAVE_or_long
+#undef HAVE_xor_long
+#undef HAVE_ashr_long
+#undef HAVE_lshl_long
+#undef HAVE_lshr_long
+
+#undef HAVE_load_long
+#undef HAVE_store_long
+
+#undef HAVE_pusharg_long
+
+#undef HAVE_cmp_long
+
+#undef HAVE_neg_float
+#undef HAVE_neg_double
+#undef HAVE_rem_float
+#undef HAVE_rem_double
+
+#undef HAVE_cvt_int_long
+#undef HAVE_cvt_int_byte
+#undef HAVE_cvt_int_char
+#undef HAVE_cvt_int_short
+#undef HAVE_cvt_long_int
+
+#undef HAVE_call_indirect_const
+
+#endif
More information about the kaffe
mailing list