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 <[EMAIL PROTECTED]> + + * config/arm/jit-icode.h (HAVE_cvt_float_int)> Undefine + to fix jit regression test failure. + 2008-02-02 Dalibor Topic <[EMAIL PROTECTED]> * 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 _______________________________________________ kaffe mailing list kaffe@kaffe.org http://kaffe.org/cgi-bin/mailman/listinfo/kaffe