mirror of git://gcc.gnu.org/git/gcc.git
configure.in (arm*-*-eabi*): New target.
* configure.in (arm*-*-eabi*): New target. * configure: Regenerate. * configure.ac (arm*-*-eabi*): New target. (arm*-*-symbianelf*): Likewise. * configure: Regenerated. * config.gcc (arm*-*-eabi*): New target. * defaults.h (TARGET_LIBGCC_FUNCS): New macro. (TARGET_LIB_INT_CMP_BIASED): Likewise. * expmed.c (expand_divmod): Try a two-valued divmod function as a last resort. * gthr.h: Remove bogus tokens at end of #pragma. * optabs.c (expand_twoval_binop_libfunc): New function. (prepare_cmp_insn): Handle the !TARGET_LIB_INT_CMP_BIASED case. (prepare_float_lib_cmp): Try reversing the condition. (debug_optab_libfuncs): New function. * optabs.h (expand_twoval_binop_libfunc): Declare. * config/arm/arm.c (arm_init_libfuncs): New function. (arm_compute_initial_eliminatino_offset): Return HOST_WIDE_INT. (TARGET_INIT_LIBFUNCS): Define it. * config/arm/arm.h (TARGET_BPABI): New macro. * config/arm/arm-protos.h (arm_compute_initial_elimination_offset): Return HOST_WIDE_INT. * config/arm/bpabi.S: New file. * config/arm/bpabi.c: Likewise. * config/arm/bpabi.h: Likewise. * config/arm/ieee754-df.S (__aeabi_dneg): New function or alias. (__aeabi_drsub): Likewise. (__aeabi_dsub): Likewise. (__aeabi_dadd): Likewise. (__aeabi_ui2d): Likewise. (__aeabi_i2d): Likewise. (__aeabi_f2d): Likewise. (__aeabi_dmul): Likewise. (__aeabi_ddiv): Likewise. (__aeabi_cdrcmple): Likewise. (__aeabi_cdcmpeq): Likewise. (__aeabi_cdcmple): Likewise. (__aeabi_dcmpeq): Likewise. (__aeabi_dcmplt): Likewise. (__aeabi_dcmple): Likewise. (__aeabi_dcmpge): Likewise. (__aeabi_dcmpgt): Likewise. (__aeabi_dcmpun): Likewise. (__aeabi_d2iz): Likewise. (__aeabi_d2uiz): Likewise. (__aeabi_d2f): Likewise. * config/arm/ieee754-sf.S (__aeabi_fneg): New function or alias. (__aeabi_frsub): Likewise. (__aeabi_fsub): Likewise. (__aeabi_fadd): Likewise. (__aeabi_ui2f): Likewise. (__aeabi_i2f): Likewise. (__aeabi_fmul): Likewise. (__aeabi_fdiv): Likewise. (__aeabi_cfrcmple): Likewise. (__aeabi_cfcmpeq): Likewise. (__aeabi_cfcmple): Likewise. (__aeabi_fcmpeq): Likewise. (__aeabi_fcmplt): Likewise. (__aeabi_fcmple): Likewise. (__aeabi_fcmpge): Likewise. (__aeabi_fcmpgt): Likewise. (__aeabi_fcmpun): Likewise. (__aeabi_f2iz): Likewise. (__aeabi_f2uiz): Likewise. * config/arm/lib1funcs.asm (ARM_CALL): New macro. (__aeabi_uidivmod): New function or alias. (__aeabi_idivmod): Likewise. (__aeabi_idiv0): Likewise. (__aeabi_ldiv0): Likewise. (__aeabi_llsr): Likewise. (__aeabi_lasr): Likewise. (__aeabi_llsl): Likewise. (bpabi.S): Include it. * config/arm/libgcc-bpabi.ver: New file. * config/arm/symbian.h (ARM_DEFAULT_ABI): Remove. (LINK_SPEC): Remove. * config/arm/t-arm-elf (LIB1ASMFUNCS): Add __aeabi_lcmp and __aeabi_ulcmp. * config/arm/t-bpabi: New file. * doc/tm.texi (TARGET_LIBGCC_FUNCS): New entry. (TARGET_LIB_INT_CMP_BIASED): Likewise. * gcc.dg/testsuite/gcc.dg/arm-eabi1.c: New test. * gcc.dg/dll-2.c: Fix dg-require syntax. * gcc.misc-tests/arm-isr.c (abort): Declare. (exit): Likewise. From-SVN: r85788
This commit is contained in:
parent
fba73eb1cb
commit
b3f8d95d35
|
@ -1,3 +1,8 @@
|
||||||
|
2004-08-09 Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
|
* configure.in (arm*-*-eabi*): New target.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
2004-08-06 Paolo Bonzini <bonzini@gnu.org>
|
2004-08-06 Paolo Bonzini <bonzini@gnu.org>
|
||||||
|
|
||||||
* Makefile.def (bfd, opcodes, gcc, zlib): Mark as bootstrap module.
|
* Makefile.def (bfd, opcodes, gcc, zlib): Mark as bootstrap module.
|
||||||
|
|
|
@ -1263,7 +1263,7 @@ case "${target}" in
|
||||||
arm-*-coff | strongarm-*-coff | xscale-*-coff)
|
arm-*-coff | strongarm-*-coff | xscale-*-coff)
|
||||||
noconfigdirs="$noconfigdirs ${libgcj}"
|
noconfigdirs="$noconfigdirs ${libgcj}"
|
||||||
;;
|
;;
|
||||||
arm-*-elf* | strongarm-*-elf* | xscale-*-elf*)
|
arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* )
|
||||||
noconfigdirs="$noconfigdirs target-libffi target-qthreads"
|
noconfigdirs="$noconfigdirs target-libffi target-qthreads"
|
||||||
;;
|
;;
|
||||||
arm*-*-symbianelf*)
|
arm*-*-symbianelf*)
|
||||||
|
|
|
@ -479,7 +479,7 @@ case "${target}" in
|
||||||
arm-*-coff | strongarm-*-coff | xscale-*-coff)
|
arm-*-coff | strongarm-*-coff | xscale-*-coff)
|
||||||
noconfigdirs="$noconfigdirs ${libgcj}"
|
noconfigdirs="$noconfigdirs ${libgcj}"
|
||||||
;;
|
;;
|
||||||
arm-*-elf* | strongarm-*-elf* | xscale-*-elf*)
|
arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* )
|
||||||
noconfigdirs="$noconfigdirs target-libffi target-qthreads"
|
noconfigdirs="$noconfigdirs target-libffi target-qthreads"
|
||||||
;;
|
;;
|
||||||
arm*-*-symbianelf*)
|
arm*-*-symbianelf*)
|
||||||
|
|
|
@ -1,3 +1,83 @@
|
||||||
|
2004-08-09 Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
|
* config.gcc (arm*-*-eabi*): New target.
|
||||||
|
* defaults.h (TARGET_LIBGCC_FUNCS): New macro.
|
||||||
|
(TARGET_LIB_INT_CMP_BIASED): Likewise.
|
||||||
|
* expmed.c (expand_divmod): Try a two-valued divmod function as a
|
||||||
|
last resort.
|
||||||
|
* gthr.h: Remove bogus tokens at end of #pragma.
|
||||||
|
* optabs.c (expand_twoval_binop_libfunc): New function.
|
||||||
|
(prepare_cmp_insn): Handle the !TARGET_LIB_INT_CMP_BIASED case.
|
||||||
|
(prepare_float_lib_cmp): Try reversing the condition.
|
||||||
|
(debug_optab_libfuncs): New function.
|
||||||
|
* optabs.h (expand_twoval_binop_libfunc): Declare.
|
||||||
|
* config/arm/arm.c (arm_init_libfuncs): New function.
|
||||||
|
(arm_compute_initial_eliminatino_offset): Return HOST_WIDE_INT.
|
||||||
|
(TARGET_INIT_LIBFUNCS): Define it.
|
||||||
|
* config/arm/arm.h (TARGET_BPABI): New macro.
|
||||||
|
* config/arm/arm-protos.h
|
||||||
|
(arm_compute_initial_elimination_offset): Return HOST_WIDE_INT.
|
||||||
|
* config/arm/bpabi.S: New file.
|
||||||
|
* config/arm/bpabi.c: Likewise.
|
||||||
|
* config/arm/bpabi.h: Likewise.
|
||||||
|
* config/arm/ieee754-df.S (__aeabi_dneg): New function or alias.
|
||||||
|
(__aeabi_drsub): Likewise.
|
||||||
|
(__aeabi_dsub): Likewise.
|
||||||
|
(__aeabi_dadd): Likewise.
|
||||||
|
(__aeabi_ui2d): Likewise.
|
||||||
|
(__aeabi_i2d): Likewise.
|
||||||
|
(__aeabi_f2d): Likewise.
|
||||||
|
(__aeabi_dmul): Likewise.
|
||||||
|
(__aeabi_ddiv): Likewise.
|
||||||
|
(__aeabi_cdrcmple): Likewise.
|
||||||
|
(__aeabi_cdcmpeq): Likewise.
|
||||||
|
(__aeabi_cdcmple): Likewise.
|
||||||
|
(__aeabi_dcmpeq): Likewise.
|
||||||
|
(__aeabi_dcmplt): Likewise.
|
||||||
|
(__aeabi_dcmple): Likewise.
|
||||||
|
(__aeabi_dcmpge): Likewise.
|
||||||
|
(__aeabi_dcmpgt): Likewise.
|
||||||
|
(__aeabi_dcmpun): Likewise.
|
||||||
|
(__aeabi_d2iz): Likewise.
|
||||||
|
(__aeabi_d2uiz): Likewise.
|
||||||
|
(__aeabi_d2f): Likewise.
|
||||||
|
* config/arm/ieee754-sf.S (__aeabi_fneg): New function or alias.
|
||||||
|
(__aeabi_frsub): Likewise.
|
||||||
|
(__aeabi_fsub): Likewise.
|
||||||
|
(__aeabi_fadd): Likewise.
|
||||||
|
(__aeabi_ui2f): Likewise.
|
||||||
|
(__aeabi_i2f): Likewise.
|
||||||
|
(__aeabi_fmul): Likewise.
|
||||||
|
(__aeabi_fdiv): Likewise.
|
||||||
|
(__aeabi_cfrcmple): Likewise.
|
||||||
|
(__aeabi_cfcmpeq): Likewise.
|
||||||
|
(__aeabi_cfcmple): Likewise.
|
||||||
|
(__aeabi_fcmpeq): Likewise.
|
||||||
|
(__aeabi_fcmplt): Likewise.
|
||||||
|
(__aeabi_fcmple): Likewise.
|
||||||
|
(__aeabi_fcmpge): Likewise.
|
||||||
|
(__aeabi_fcmpgt): Likewise.
|
||||||
|
(__aeabi_fcmpun): Likewise.
|
||||||
|
(__aeabi_f2iz): Likewise.
|
||||||
|
(__aeabi_f2uiz): Likewise.
|
||||||
|
* config/arm/lib1funcs.asm (ARM_CALL): New macro.
|
||||||
|
(__aeabi_uidivmod): New function or alias.
|
||||||
|
(__aeabi_idivmod): Likewise.
|
||||||
|
(__aeabi_idiv0): Likewise.
|
||||||
|
(__aeabi_ldiv0): Likewise.
|
||||||
|
(__aeabi_llsr): Likewise.
|
||||||
|
(__aeabi_lasr): Likewise.
|
||||||
|
(__aeabi_llsl): Likewise.
|
||||||
|
(bpabi.S): Include it.
|
||||||
|
* config/arm/libgcc-bpabi.ver: New file.
|
||||||
|
* config/arm/symbian.h (ARM_DEFAULT_ABI): Remove.
|
||||||
|
(LINK_SPEC): Remove.
|
||||||
|
* config/arm/t-arm-elf (LIB1ASMFUNCS): Add __aeabi_lcmp and
|
||||||
|
__aeabi_ulcmp.
|
||||||
|
* config/arm/t-bpabi: New file.
|
||||||
|
* doc/tm.texi (TARGET_LIBGCC_FUNCS): New entry.
|
||||||
|
(TARGET_LIB_INT_CMP_BIASED): Likewise.
|
||||||
|
|
||||||
2004-08-10 David Edelsohn <edelsohn@gnu.org>
|
2004-08-10 David Edelsohn <edelsohn@gnu.org>
|
||||||
|
|
||||||
* config/rs6000/rs6000-protos.h (expand_block_clear): Declare.
|
* config/rs6000/rs6000-protos.h (expand_block_clear): Declare.
|
||||||
|
|
|
@ -652,9 +652,19 @@ arm*-*-ecos-elf)
|
||||||
tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h arm/ecos-elf.h"
|
tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h arm/ecos-elf.h"
|
||||||
tmake_file="arm/t-arm arm/t-arm-elf"
|
tmake_file="arm/t-arm arm/t-arm-elf"
|
||||||
;;
|
;;
|
||||||
arm*-*-symbianelf*)
|
arm*-*-eabi* | arm*-*-symbianelf* )
|
||||||
tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/symbian.h arm/aout.h arm/arm.h"
|
# The BPABI long long divmod functions return a 128-bit value in
|
||||||
tmake_file="t-slibgcc-elf-ver arm/t-arm arm/t-arm-elf"
|
# registers r0-r3. Correctly modeling that requires the use of
|
||||||
|
# TImode.
|
||||||
|
need_64bit_hwint=yes
|
||||||
|
tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/bpabi.h"
|
||||||
|
case ${target} in
|
||||||
|
arm*-*-symbianelf*)
|
||||||
|
tm_file="${tm_file} arm/symbian.h"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
tm_file="${tm_file} arm/aout.h arm/arm.h"
|
||||||
|
tmake_file="t-slibgcc-elf-ver arm/t-arm arm/t-arm-elf arm/t-bpabi"
|
||||||
;;
|
;;
|
||||||
arm*-*-rtems*)
|
arm*-*-rtems*)
|
||||||
tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h arm/rtems-elf.h rtems.h"
|
tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h arm/rtems-elf.h rtems.h"
|
||||||
|
|
|
@ -34,8 +34,8 @@ extern void arm_expand_prologue (void);
|
||||||
extern const char *arm_strip_name_encoding (const char *);
|
extern const char *arm_strip_name_encoding (const char *);
|
||||||
extern void arm_asm_output_labelref (FILE *, const char *);
|
extern void arm_asm_output_labelref (FILE *, const char *);
|
||||||
extern unsigned long arm_current_func_type (void);
|
extern unsigned long arm_current_func_type (void);
|
||||||
extern unsigned int arm_compute_initial_elimination_offset (unsigned int,
|
extern HOST_WIDE_INT arm_compute_initial_elimination_offset (unsigned int,
|
||||||
unsigned int);
|
unsigned int);
|
||||||
extern HOST_WIDE_INT thumb_compute_initial_elimination_offset (unsigned int,
|
extern HOST_WIDE_INT thumb_compute_initial_elimination_offset (unsigned int,
|
||||||
unsigned int);
|
unsigned int);
|
||||||
|
|
||||||
|
|
|
@ -169,6 +169,7 @@ static bool arm_cxx_guard_mask_bit (void);
|
||||||
static tree arm_get_cookie_size (tree);
|
static tree arm_get_cookie_size (tree);
|
||||||
static bool arm_cookie_has_size (void);
|
static bool arm_cookie_has_size (void);
|
||||||
static bool arm_cxx_cdtor_returns_this (void);
|
static bool arm_cxx_cdtor_returns_this (void);
|
||||||
|
static void arm_init_libfuncs (void);
|
||||||
|
|
||||||
|
|
||||||
/* Initialize the GCC target structure. */
|
/* Initialize the GCC target structure. */
|
||||||
|
@ -250,6 +251,9 @@ static bool arm_cxx_cdtor_returns_this (void);
|
||||||
#undef TARGET_EXPAND_BUILTIN
|
#undef TARGET_EXPAND_BUILTIN
|
||||||
#define TARGET_EXPAND_BUILTIN arm_expand_builtin
|
#define TARGET_EXPAND_BUILTIN arm_expand_builtin
|
||||||
|
|
||||||
|
#undef TARGET_INIT_LIBFUNCS
|
||||||
|
#define TARGET_INIT_LIBFUNCS arm_init_libfuncs
|
||||||
|
|
||||||
#undef TARGET_PROMOTE_FUNCTION_ARGS
|
#undef TARGET_PROMOTE_FUNCTION_ARGS
|
||||||
#define TARGET_PROMOTE_FUNCTION_ARGS hook_bool_tree_true
|
#define TARGET_PROMOTE_FUNCTION_ARGS hook_bool_tree_true
|
||||||
#undef TARGET_PROMOTE_FUNCTION_RETURN
|
#undef TARGET_PROMOTE_FUNCTION_RETURN
|
||||||
|
@ -614,6 +618,104 @@ bit_count (unsigned long value)
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set up library functions uqniue to ARM. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
arm_init_libfuncs (void)
|
||||||
|
{
|
||||||
|
/* There are no special library functions unless we are using the
|
||||||
|
ARM BPABI. */
|
||||||
|
if (!TARGET_BPABI)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* The functions below are described in Section 4 of the "Run-Time
|
||||||
|
ABI for the ARM architecture", Version 1.0. */
|
||||||
|
|
||||||
|
/* Double-precision floating-point arithmetic. Table 2. */
|
||||||
|
set_optab_libfunc (add_optab, DFmode, "__aeabi_dadd");
|
||||||
|
set_optab_libfunc (sdiv_optab, DFmode, "__aeabi_ddiv");
|
||||||
|
set_optab_libfunc (smul_optab, DFmode, "__aeabi_dmul");
|
||||||
|
set_optab_libfunc (neg_optab, DFmode, "__aeabi_dneg");
|
||||||
|
set_optab_libfunc (sub_optab, DFmode, "__aeabi_dsub");
|
||||||
|
|
||||||
|
/* Double-precision comparisions. Table 3. */
|
||||||
|
set_optab_libfunc (eq_optab, DFmode, "__aeabi_dcmpeq");
|
||||||
|
set_optab_libfunc (ne_optab, DFmode, NULL);
|
||||||
|
set_optab_libfunc (lt_optab, DFmode, "__aeabi_dcmplt");
|
||||||
|
set_optab_libfunc (le_optab, DFmode, "__aeabi_dcmple");
|
||||||
|
set_optab_libfunc (ge_optab, DFmode, "__aeabi_dcmpge");
|
||||||
|
set_optab_libfunc (gt_optab, DFmode, "__aeabi_dcmpgt");
|
||||||
|
set_optab_libfunc (unord_optab, DFmode, "__aeabi_dcmpun");
|
||||||
|
|
||||||
|
/* Single-precision floating-point arithmetic. Table 4. */
|
||||||
|
set_optab_libfunc (add_optab, SFmode, "__aeabi_fadd");
|
||||||
|
set_optab_libfunc (sdiv_optab, SFmode, "__aeabi_fdiv");
|
||||||
|
set_optab_libfunc (smul_optab, SFmode, "__aeabi_fmul");
|
||||||
|
set_optab_libfunc (neg_optab, SFmode, "__aeabi_fneg");
|
||||||
|
set_optab_libfunc (sub_optab, SFmode, "__aeabi_fsub");
|
||||||
|
|
||||||
|
/* Single-precision comparisions. Table 5. */
|
||||||
|
set_optab_libfunc (eq_optab, SFmode, "__aeabi_fcmpeq");
|
||||||
|
set_optab_libfunc (ne_optab, SFmode, NULL);
|
||||||
|
set_optab_libfunc (lt_optab, SFmode, "__aeabi_fcmplt");
|
||||||
|
set_optab_libfunc (le_optab, SFmode, "__aeabi_fcmple");
|
||||||
|
set_optab_libfunc (ge_optab, SFmode, "__aeabi_fcmpge");
|
||||||
|
set_optab_libfunc (gt_optab, SFmode, "__aeabi_fcmpgt");
|
||||||
|
set_optab_libfunc (unord_optab, SFmode, "__aeabi_fcmpun");
|
||||||
|
|
||||||
|
/* Floating-point to integer conversions. Table 6. */
|
||||||
|
set_conv_libfunc (sfix_optab, SImode, DFmode, "__aeabi_d2iz");
|
||||||
|
set_conv_libfunc (ufix_optab, SImode, DFmode, "__aeabi_d2uiz");
|
||||||
|
set_conv_libfunc (sfix_optab, DImode, DFmode, "__aeabi_d2lz");
|
||||||
|
set_conv_libfunc (ufix_optab, DImode, DFmode, "__aeabi_d2ulz");
|
||||||
|
set_conv_libfunc (sfix_optab, SImode, SFmode, "__aeabi_f2iz");
|
||||||
|
set_conv_libfunc (ufix_optab, SImode, SFmode, "__aeabi_f2uiz");
|
||||||
|
set_conv_libfunc (sfix_optab, DImode, SFmode, "__aeabi_f2lz");
|
||||||
|
set_conv_libfunc (ufix_optab, DImode, SFmode, "__aeabi_f2ulz");
|
||||||
|
|
||||||
|
/* Conversions between floating types. Table 7. */
|
||||||
|
set_conv_libfunc (trunc_optab, SFmode, DFmode, "__aeabi_d2f");
|
||||||
|
set_conv_libfunc (sext_optab, DFmode, SFmode, "__aeabi_f2d");
|
||||||
|
|
||||||
|
/* Integer to floating-point converisons. Table 8. */
|
||||||
|
set_conv_libfunc (sfloat_optab, DFmode, SImode, "__aeabi_i2d");
|
||||||
|
set_conv_libfunc (ufloat_optab, DFmode, SImode, "__aeabi_ui2d");
|
||||||
|
set_conv_libfunc (sfloat_optab, DFmode, DImode, "__aeabi_l2d");
|
||||||
|
set_conv_libfunc (ufloat_optab, DFmode, DImode, "__aeabi_ul2d");
|
||||||
|
set_conv_libfunc (sfloat_optab, SFmode, SImode, "__aeabi_i2f");
|
||||||
|
set_conv_libfunc (ufloat_optab, SFmode, SImode, "__aeabi_ui2f");
|
||||||
|
set_conv_libfunc (sfloat_optab, SFmode, DImode, "__aeabi_l2f");
|
||||||
|
set_conv_libfunc (ufloat_optab, SFmode, DImode, "__aeabi_ul2f");
|
||||||
|
|
||||||
|
/* Long long. Table 9. */
|
||||||
|
set_optab_libfunc (smul_optab, DImode, "__aeabi_lmul");
|
||||||
|
set_optab_libfunc (sdivmod_optab, DImode, "__aeabi_ldivmod");
|
||||||
|
set_optab_libfunc (udivmod_optab, DImode, "__aeabi_uldivmod");
|
||||||
|
set_optab_libfunc (ashl_optab, DImode, "__aeabi_llsl");
|
||||||
|
set_optab_libfunc (lshr_optab, DImode, "__aeabi_llsr");
|
||||||
|
set_optab_libfunc (ashr_optab, DImode, "__aeabi_lasr");
|
||||||
|
set_optab_libfunc (cmp_optab, DImode, "__aeabi_lcmp");
|
||||||
|
set_optab_libfunc (ucmp_optab, DImode, "__aeabi_ulcmp");
|
||||||
|
|
||||||
|
/* Integer (32/32->32) division. \S 4.3.1. */
|
||||||
|
set_optab_libfunc (sdivmod_optab, SImode, "__aeabi_idivmod");
|
||||||
|
set_optab_libfunc (udivmod_optab, SImode, "__aeabi_uidivmod");
|
||||||
|
|
||||||
|
/* The divmod functions are designed so that they can be used for
|
||||||
|
plain division, even though they return both the quotient and the
|
||||||
|
remainder. The quotient is returned in the usual location (i.e.,
|
||||||
|
r0 for SImode, {r0, r1} for DImode), just as would be expected
|
||||||
|
for an ordinary division routine. Because the AAPCS calling
|
||||||
|
conventions specify that all of { r0, r1, r2, r3 } are
|
||||||
|
callee-saved registers, there is no need to tell the compiler
|
||||||
|
explicitly that those registers are clobbered by these
|
||||||
|
routines. */
|
||||||
|
set_optab_libfunc (sdiv_optab, DImode, "__aeabi_ldivmod");
|
||||||
|
set_optab_libfunc (udiv_optab, DImode, "__aeabi_uldivmod");
|
||||||
|
set_optab_libfunc (sdiv_optab, SImode, "__aeabi_idivmod");
|
||||||
|
set_optab_libfunc (udiv_optab, SImode, "__aeabi_uidivmod");
|
||||||
|
}
|
||||||
|
|
||||||
/* Fix up any incompatible options that the user has specified.
|
/* Fix up any incompatible options that the user has specified.
|
||||||
This has now turned into a maze. */
|
This has now turned into a maze. */
|
||||||
void
|
void
|
||||||
|
@ -10165,7 +10267,7 @@ arm_get_frame_offsets (void)
|
||||||
/* Calculate the relative offsets for the different stack pointers. Positive
|
/* Calculate the relative offsets for the different stack pointers. Positive
|
||||||
offsets are in the direction of stack growth. */
|
offsets are in the direction of stack growth. */
|
||||||
|
|
||||||
unsigned int
|
HOST_WIDE_INT
|
||||||
arm_compute_initial_elimination_offset (unsigned int from, unsigned int to)
|
arm_compute_initial_elimination_offset (unsigned int from, unsigned int to)
|
||||||
{
|
{
|
||||||
arm_stack_offsets *offsets;
|
arm_stack_offsets *offsets;
|
||||||
|
|
|
@ -296,6 +296,14 @@ extern GTY(()) rtx aof_pic_label;
|
||||||
#define TARGET_AAPCS_BASED \
|
#define TARGET_AAPCS_BASED \
|
||||||
(arm_abi != ARM_ABI_APCS && arm_abi != ARM_ABI_ATPCS)
|
(arm_abi != ARM_ABI_APCS && arm_abi != ARM_ABI_ATPCS)
|
||||||
|
|
||||||
|
/* True iff the full BPABI is being used. If TARGET_BPABI is true,
|
||||||
|
then TARGET_AAPCS_BASED must be true -- but the converse does not
|
||||||
|
hold. TARGET_BPABI implies the use of the BPABI runtime library,
|
||||||
|
etc., in addition to just the AAPCS calling conventions. */
|
||||||
|
#ifndef TARGET_BPABI
|
||||||
|
#define TARGET_BPABI false
|
||||||
|
#endif
|
||||||
|
|
||||||
/* SUBTARGET_SWITCHES is used to add flags on a per-config basis. */
|
/* SUBTARGET_SWITCHES is used to add flags on a per-config basis. */
|
||||||
#ifndef SUBTARGET_SWITCHES
|
#ifndef SUBTARGET_SWITCHES
|
||||||
#define SUBTARGET_SWITCHES
|
#define SUBTARGET_SWITCHES
|
||||||
|
|
|
@ -0,0 +1,95 @@
|
||||||
|
/* Miscellaneous BPABI functions.
|
||||||
|
|
||||||
|
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
||||||
|
Contributed by CodeSourcery, LLC.
|
||||||
|
|
||||||
|
This file is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by the
|
||||||
|
Free Software Foundation; either version 2, or (at your option) any
|
||||||
|
later version.
|
||||||
|
|
||||||
|
In addition to the permissions in the GNU General Public License, the
|
||||||
|
Free Software Foundation gives you unlimited permission to link the
|
||||||
|
compiled version of this file into combinations with other programs,
|
||||||
|
and to distribute those combinations without any restriction coming
|
||||||
|
from the use of this file. (The General Public License restrictions
|
||||||
|
do apply in other respects; for example, they cover modification of
|
||||||
|
the file, and distribution when not linked into a combine
|
||||||
|
executable.)
|
||||||
|
|
||||||
|
This file is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; see the file COPYING. If not, write to
|
||||||
|
the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#ifdef __ARMEB__
|
||||||
|
#define xxh r0
|
||||||
|
#define xxl r1
|
||||||
|
#define yyh r2
|
||||||
|
#define yyl r3
|
||||||
|
#else
|
||||||
|
#define xxh r1
|
||||||
|
#define xxl r0
|
||||||
|
#define yyh r3
|
||||||
|
#define yyl r2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef L_aeabi_lcmp
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_lcmp
|
||||||
|
subs ip, xxl, yyl
|
||||||
|
sbcs ip, xxh, yyh
|
||||||
|
subeqs ip, xxl, yyl
|
||||||
|
mov r0, ip
|
||||||
|
RET
|
||||||
|
FUNC_END aeabi_lcmp
|
||||||
|
|
||||||
|
#endif /* L_aeabi_lcmp */
|
||||||
|
|
||||||
|
#ifdef L_aeabi_ulcmp
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_ulcmp
|
||||||
|
cmp xxh, yyh
|
||||||
|
movlo r0, #-1
|
||||||
|
movhi r0, #1
|
||||||
|
RETc(ne)
|
||||||
|
cmp xxl, yyl
|
||||||
|
movlo r0, #-1
|
||||||
|
movhi r0, #1
|
||||||
|
moveq r0, #0
|
||||||
|
RET
|
||||||
|
FUNC_END aeabi_ulcmp
|
||||||
|
|
||||||
|
#endif /* L_aeabi_ulcmp */
|
||||||
|
|
||||||
|
#ifdef L_aeabi_ldivmod
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_ldivmod
|
||||||
|
sub sp, sp, #8
|
||||||
|
stmfd sp!, {sp, lr}
|
||||||
|
bl SYM(__gnu_ldivmod_helper) __PLT__
|
||||||
|
ldr lr, [sp, #4]
|
||||||
|
add sp, sp, #8
|
||||||
|
ldmfd sp!, {r2, r3}
|
||||||
|
RET
|
||||||
|
|
||||||
|
#endif /* L_aeabi_ldivmod */
|
||||||
|
|
||||||
|
#ifdef L_aeabi_uldivmod
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_uldivmod
|
||||||
|
sub sp, sp, #8
|
||||||
|
stmfd sp!, {sp, lr}
|
||||||
|
bl SYM(__gnu_uldivmod_helper) __PLT__
|
||||||
|
ldr lr, [sp, #4]
|
||||||
|
add sp, sp, #8
|
||||||
|
ldmfd sp!, {r2, r3}
|
||||||
|
RET
|
||||||
|
|
||||||
|
#endif /* L_aeabi_divmod */
|
||||||
|
|
|
@ -0,0 +1,94 @@
|
||||||
|
/* Miscellaneous BPABI functions.
|
||||||
|
|
||||||
|
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
||||||
|
Contributed by CodeSourcery, LLC.
|
||||||
|
|
||||||
|
This file is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by the
|
||||||
|
Free Software Foundation; either version 2, or (at your option) any
|
||||||
|
later version.
|
||||||
|
|
||||||
|
In addition to the permissions in the GNU General Public License, the
|
||||||
|
Free Software Foundation gives you unlimited permission to link the
|
||||||
|
compiled version of this file into combinations with other programs,
|
||||||
|
and to distribute those combinations without any restriction coming
|
||||||
|
from the use of this file. (The General Public License restrictions
|
||||||
|
do apply in other respects; for example, they cover modification of
|
||||||
|
the file, and distribution when not linked into a combine
|
||||||
|
executable.)
|
||||||
|
|
||||||
|
This file is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; see the file COPYING. If not, write to
|
||||||
|
the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
extern double __aeabi_ul2d (unsigned long long);
|
||||||
|
extern float __aeabi_ul2f (unsigned long long);
|
||||||
|
extern long long __divdi3 (long long, long long);
|
||||||
|
extern unsigned long long __udivdi3 (unsigned long long,
|
||||||
|
unsigned long long);
|
||||||
|
extern long long __gnu_ldivmod_helper (long long, long long, long long *);
|
||||||
|
extern unsigned long long __gnu_uldivmod_helper (unsigned long long,
|
||||||
|
unsigned long long,
|
||||||
|
unsigned long long *);
|
||||||
|
|
||||||
|
/* These functions are based on __floatdidf and __floatdisf, but
|
||||||
|
convert unsigned DImode values instead of signed DImode
|
||||||
|
values. */
|
||||||
|
|
||||||
|
#define WORD_SIZE (sizeof (int) * 8)
|
||||||
|
#define HIGH_HALFWORD_COEFF (((unsigned long long) 1) << (WORD_SIZE / 2))
|
||||||
|
#define HIGH_WORD_COEFF (((unsigned long long) 1) << WORD_SIZE)
|
||||||
|
|
||||||
|
double
|
||||||
|
__aeabi_ul2d (unsigned long long u)
|
||||||
|
{
|
||||||
|
double d = (unsigned) (u >> WORD_SIZE);
|
||||||
|
d *= HIGH_HALFWORD_COEFF;
|
||||||
|
d *= HIGH_HALFWORD_COEFF;
|
||||||
|
d += (unsigned) (u & (HIGH_WORD_COEFF - 1));
|
||||||
|
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
float
|
||||||
|
__aeabi_ul2f (unsigned long long u)
|
||||||
|
{
|
||||||
|
/* Do the calculation in DFmode so that we don't lose any of the
|
||||||
|
precision of the high word while multiplying it. */
|
||||||
|
double f = (unsigned) (u >> WORD_SIZE);
|
||||||
|
f *= HIGH_HALFWORD_COEFF;
|
||||||
|
f *= HIGH_HALFWORD_COEFF;
|
||||||
|
f += (unsigned) (u & (HIGH_WORD_COEFF - 1));
|
||||||
|
|
||||||
|
return (float) f;
|
||||||
|
}
|
||||||
|
|
||||||
|
long long
|
||||||
|
__gnu_ldivmod_helper (long long a,
|
||||||
|
long long b,
|
||||||
|
long long *remainder)
|
||||||
|
{
|
||||||
|
long long quotient;
|
||||||
|
|
||||||
|
quotient = __divdi3 (a, b);
|
||||||
|
*remainder = a - b * quotient;
|
||||||
|
return quotient;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long long
|
||||||
|
__gnu_uldivmod_helper (unsigned long long a,
|
||||||
|
unsigned long long b,
|
||||||
|
unsigned long long *remainder)
|
||||||
|
{
|
||||||
|
unsigned long long quotient;
|
||||||
|
|
||||||
|
quotient = __udivdi3 (a, b);
|
||||||
|
*remainder = a - b * quotient;
|
||||||
|
return quotient;
|
||||||
|
}
|
|
@ -0,0 +1,83 @@
|
||||||
|
/* Configuration file for ARM BPABI targets.
|
||||||
|
Copyright (C) 2004
|
||||||
|
Free Software Foundation, Inc.
|
||||||
|
Contributed by CodeSourcery, LLC
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your
|
||||||
|
option) any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||||
|
License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GCC; see the file COPYING. If not, write to
|
||||||
|
the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
/* Use the AAPCS ABI by default. */
|
||||||
|
#define ARM_DEFAULT_ABI ARM_ABI_AAPCS
|
||||||
|
|
||||||
|
/* Assume that AAPCS ABIs should adhere to the full BPABI. */
|
||||||
|
#define TARGET_BPABI (TARGET_AAPCS_BASED)
|
||||||
|
|
||||||
|
/* The ARM BPABI functions return a boolean; they use no special
|
||||||
|
calling convention. */
|
||||||
|
#define FLOAT_LIB_COMPARE_RETURNS_BOOL(MODE, COMPARISON) TARGET_BPABI
|
||||||
|
|
||||||
|
/* Do not generate calls to any of the standard GCC functions in
|
||||||
|
libgcc when generating BPABI code. */
|
||||||
|
#define TARGET_LIBGCC_LIBFUNCS !TARGET_BPABI
|
||||||
|
|
||||||
|
/* The BPABI integer comparision routines return { -1, 0, 1 }. */
|
||||||
|
#define TARGET_LIB_INT_CMP_BIASED !TARGET_BPABI
|
||||||
|
|
||||||
|
/* The generic link spec in elf.h does not support shared libraries. */
|
||||||
|
#undef LINK_SPEC
|
||||||
|
#define LINK_SPEC "%{mbig-endian:-EB} %{mlittle-endian:-EL} " \
|
||||||
|
"%{static:-Bstatic} %{shared:-shared} %{symbolic:-Bsymbolic} " \
|
||||||
|
"-X"
|
||||||
|
|
||||||
|
#if defined (__thumb__) && !defined (__THUMB_INTERWORD)
|
||||||
|
#define RENAME_LIBRARY_SET ".thumb_set"
|
||||||
|
#else
|
||||||
|
#define RENAME_LIBRARY_SET ".set"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Make __aeabi_AEABI_NAME an alias for __GCC_NAME. */
|
||||||
|
#define RENAME_LIBRARY(GCC_NAME, AEABI_NAME) \
|
||||||
|
__asm__ (".globl\t__aeabi_" #AEABI_NAME "\n" \
|
||||||
|
RENAME_LIBRARY_SET "\t__aeabi_" #AEABI_NAME \
|
||||||
|
", __" #GCC_NAME "\n");
|
||||||
|
|
||||||
|
/* Give some libgcc functions an additional __aeabi name. */
|
||||||
|
#ifdef L_muldi3
|
||||||
|
#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (muldi3, lmul)
|
||||||
|
#endif
|
||||||
|
#ifdef L_muldi3
|
||||||
|
#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (muldi3, lmul)
|
||||||
|
#endif
|
||||||
|
#ifdef L_fixdfdi
|
||||||
|
#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixdfdi, d2lz)
|
||||||
|
#endif
|
||||||
|
#ifdef L_fixunsdfdi
|
||||||
|
#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixunsdfdi, d2ulz)
|
||||||
|
#endif
|
||||||
|
#ifdef L_fixsfdi
|
||||||
|
#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixsfdi, f2lz)
|
||||||
|
#endif
|
||||||
|
#ifdef L_fixunssfdi
|
||||||
|
#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixunssfdi, f2ulz)
|
||||||
|
#endif
|
||||||
|
#ifdef L_floatdidf
|
||||||
|
#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatdidf, l2d)
|
||||||
|
#endif
|
||||||
|
#ifdef L_floatdisf
|
||||||
|
#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatdisf, l2f)
|
||||||
|
#endif
|
||||||
|
|
|
@ -59,17 +59,25 @@
|
||||||
#ifdef L_negdf2
|
#ifdef L_negdf2
|
||||||
|
|
||||||
ARM_FUNC_START negdf2
|
ARM_FUNC_START negdf2
|
||||||
|
ARM_FUNC_ALIAS aeabi_dneg negdf2
|
||||||
@ flip sign bit
|
@ flip sign bit
|
||||||
eor xh, xh, #0x80000000
|
eor xh, xh, #0x80000000
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
FUNC_END aeabi_dneg
|
||||||
FUNC_END negdf2
|
FUNC_END negdf2
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef L_addsubdf3
|
#ifdef L_addsubdf3
|
||||||
|
|
||||||
ARM_FUNC_START subdf3
|
ARM_FUNC_START aeabi_drsub
|
||||||
|
|
||||||
|
eor xh, xh, #0x80000000 @ flip sign bit of first arg
|
||||||
|
b 1f
|
||||||
|
|
||||||
|
ARM_FUNC_START subdf3
|
||||||
|
ARM_FUNC_ALIAS aeabi_dsub subdf3
|
||||||
@ flip sign bit of second arg
|
@ flip sign bit of second arg
|
||||||
eor yh, yh, #0x80000000
|
eor yh, yh, #0x80000000
|
||||||
#if defined(__thumb__) && !defined(__THUMB_INTERWORK__)
|
#if defined(__thumb__) && !defined(__THUMB_INTERWORK__)
|
||||||
|
@ -77,6 +85,7 @@ ARM_FUNC_START subdf3
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ARM_FUNC_START adddf3
|
ARM_FUNC_START adddf3
|
||||||
|
ARM_FUNC_ALIAS aeabi_dadd adddf3
|
||||||
|
|
||||||
1: @ Compare both args, return zero if equal but the sign.
|
1: @ Compare both args, return zero if equal but the sign.
|
||||||
teq xl, yl
|
teq xl, yl
|
||||||
|
@ -373,10 +382,13 @@ LSYM(Lad_i):
|
||||||
movne xl, #0
|
movne xl, #0
|
||||||
RETLDM "r4, r5"
|
RETLDM "r4, r5"
|
||||||
|
|
||||||
|
FUNC_END aeabi_dsub
|
||||||
FUNC_END subdf3
|
FUNC_END subdf3
|
||||||
|
FUNC_END aeabi_dadd
|
||||||
FUNC_END adddf3
|
FUNC_END adddf3
|
||||||
|
|
||||||
ARM_FUNC_START floatunsidf
|
ARM_FUNC_START floatunsidf
|
||||||
|
ARM_FUNC_ALIAS aeabi_ui2d floatunsidf
|
||||||
teq r0, #0
|
teq r0, #0
|
||||||
moveq r1, #0
|
moveq r1, #0
|
||||||
RETc(eq)
|
RETc(eq)
|
||||||
|
@ -388,9 +400,11 @@ ARM_FUNC_START floatunsidf
|
||||||
mov xh, #0
|
mov xh, #0
|
||||||
b LSYM(Lad_l)
|
b LSYM(Lad_l)
|
||||||
|
|
||||||
|
FUNC_END aeabi_ui2d
|
||||||
FUNC_END floatunsidf
|
FUNC_END floatunsidf
|
||||||
|
|
||||||
ARM_FUNC_START floatsidf
|
ARM_FUNC_START floatsidf
|
||||||
|
ARM_FUNC_ALIAS aeabi_i2d floatsidf
|
||||||
teq r0, #0
|
teq r0, #0
|
||||||
moveq r1, #0
|
moveq r1, #0
|
||||||
RETc(eq)
|
RETc(eq)
|
||||||
|
@ -403,9 +417,12 @@ ARM_FUNC_START floatsidf
|
||||||
mov xh, #0
|
mov xh, #0
|
||||||
b LSYM(Lad_l)
|
b LSYM(Lad_l)
|
||||||
|
|
||||||
|
FUNC_END aeabi_i2d
|
||||||
FUNC_END floatsidf
|
FUNC_END floatsidf
|
||||||
|
|
||||||
ARM_FUNC_START extendsfdf2
|
ARM_FUNC_START extendsfdf2
|
||||||
|
ARM_FUNC_ALIAS aeabi_f2d extendsfdf2
|
||||||
|
|
||||||
movs r2, r0, lsl #1
|
movs r2, r0, lsl #1
|
||||||
beq 1f @ value is 0.0 or -0.0
|
beq 1f @ value is 0.0 or -0.0
|
||||||
mov xh, r2, asr #3 @ stretch exponent
|
mov xh, r2, asr #3 @ stretch exponent
|
||||||
|
@ -429,6 +446,7 @@ ARM_FUNC_START extendsfdf2
|
||||||
bic xh, xh, #0x80000000
|
bic xh, xh, #0x80000000
|
||||||
b LSYM(Lad_l)
|
b LSYM(Lad_l)
|
||||||
|
|
||||||
|
FUNC_END aeabi_f2d
|
||||||
FUNC_END extendsfdf2
|
FUNC_END extendsfdf2
|
||||||
|
|
||||||
#endif /* L_addsubdf3 */
|
#endif /* L_addsubdf3 */
|
||||||
|
@ -436,7 +454,7 @@ ARM_FUNC_START extendsfdf2
|
||||||
#ifdef L_muldivdf3
|
#ifdef L_muldivdf3
|
||||||
|
|
||||||
ARM_FUNC_START muldf3
|
ARM_FUNC_START muldf3
|
||||||
|
ARM_FUNC_ALIAS aeabi_dmul muldf3
|
||||||
stmfd sp!, {r4, r5, r6, lr}
|
stmfd sp!, {r4, r5, r6, lr}
|
||||||
|
|
||||||
@ Mask out exponents.
|
@ Mask out exponents.
|
||||||
|
@ -722,10 +740,12 @@ LSYM(Lml_n):
|
||||||
orr xh, xh, #0x00f80000
|
orr xh, xh, #0x00f80000
|
||||||
RETLDM "r4, r5, r6"
|
RETLDM "r4, r5, r6"
|
||||||
|
|
||||||
|
FUNC_END aeabi_dmul
|
||||||
FUNC_END muldf3
|
FUNC_END muldf3
|
||||||
|
|
||||||
ARM_FUNC_START divdf3
|
ARM_FUNC_START divdf3
|
||||||
|
ARM_FUNC_ALIAS aeabi_ddiv divdf3
|
||||||
|
|
||||||
stmfd sp!, {r4, r5, r6, lr}
|
stmfd sp!, {r4, r5, r6, lr}
|
||||||
|
|
||||||
@ Mask out exponents.
|
@ Mask out exponents.
|
||||||
|
@ -934,6 +954,7 @@ LSYM(Ldv_s):
|
||||||
bne LSYM(Lml_z) @ 0 / <non_zero> -> 0
|
bne LSYM(Lml_z) @ 0 / <non_zero> -> 0
|
||||||
b LSYM(Lml_n) @ 0 / 0 -> NAN
|
b LSYM(Lml_n) @ 0 / 0 -> NAN
|
||||||
|
|
||||||
|
FUNC_END aeabi_ddiv
|
||||||
FUNC_END divdf3
|
FUNC_END divdf3
|
||||||
|
|
||||||
#endif /* L_muldivdf3 */
|
#endif /* L_muldivdf3 */
|
||||||
|
@ -1013,11 +1034,78 @@ ARM_FUNC_ALIAS eqdf2 cmpdf2
|
||||||
FUNC_END eqdf2
|
FUNC_END eqdf2
|
||||||
FUNC_END cmpdf2
|
FUNC_END cmpdf2
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_cdrcmple
|
||||||
|
mov ip, r0
|
||||||
|
mov r0, r2
|
||||||
|
mov r2, ip
|
||||||
|
mov ip, r1
|
||||||
|
mov r1, r3
|
||||||
|
mov r3, ip
|
||||||
|
b 6f
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_cdcmpeq
|
||||||
|
ARM_FUNC_ALIAS aeabi_cdcmple aeabi_cdcmpeq
|
||||||
|
@ The status-returning routines are required to preserve all
|
||||||
|
@ registers except ip, lr, and cpsr.
|
||||||
|
6: stmfd sp!, {r0, r1, r2, r3, lr}
|
||||||
|
ARM_CALL cmpdf2
|
||||||
|
@ Set the Z flag correctly, and the C flag unconditionally.
|
||||||
|
cmp r0, #0
|
||||||
|
@ Clear the C flag if the return value was -1, indicating
|
||||||
|
@ that the first operand was smaller than the second.
|
||||||
|
cmnmi r0, #0
|
||||||
|
RETLDM "r0, r1, r2, r3"
|
||||||
|
FUNC_END aeabi_cdcmple
|
||||||
|
FUNC_END aeabi_cdcmpeq
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_dcmpeq
|
||||||
|
str lr, [sp, #-4]!
|
||||||
|
ARM_CALL aeabi_cdcmple
|
||||||
|
moveq r0, #1 @ Equal to.
|
||||||
|
movne r0, #0 @ Less than, greater than, or unordered.
|
||||||
|
RETLDM
|
||||||
|
FUNC_END aeabi_dcmpeq
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_dcmplt
|
||||||
|
str lr, [sp, #-4]!
|
||||||
|
ARM_CALL aeabi_cdcmple
|
||||||
|
movcc r0, #1 @ Less than.
|
||||||
|
movcs r0, #0 @ Equal to, greater than, or unordered.
|
||||||
|
RETLDM
|
||||||
|
FUNC_END aeabi_dcmplt
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_dcmple
|
||||||
|
str lr, [sp, #-4]!
|
||||||
|
ARM_CALL aeabi_cdcmple
|
||||||
|
movls r0, #1 @ Less than or equal to.
|
||||||
|
movhi r0, #0 @ Greater than or unordered.
|
||||||
|
RETLDM
|
||||||
|
FUNC_END aeabi_dcmple
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_dcmpge
|
||||||
|
str lr, [sp, #-4]!
|
||||||
|
ARM_CALL aeabi_cdrcmple
|
||||||
|
movls r0, #1 @ Operand 2 is less than or equal to operand 1.
|
||||||
|
movhi r0, #0 @ Operand 2 greater than operand 1, or unordered.
|
||||||
|
RETLDM
|
||||||
|
FUNC_END aeabi_dcmpge
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_dcmpgt
|
||||||
|
str lr, [sp, #-4]!
|
||||||
|
ARM_CALL aeabi_cdrcmple
|
||||||
|
movcc r0, #1 @ Operand 2 is less than operand 1.
|
||||||
|
movcs r0, #0 @ Operand 2 is greater than or equal to operand 1,
|
||||||
|
@ or they are unordered.
|
||||||
|
RETLDM
|
||||||
|
FUNC_END aeabi_dcmpgt
|
||||||
|
|
||||||
#endif /* L_cmpdf2 */
|
#endif /* L_cmpdf2 */
|
||||||
|
|
||||||
#ifdef L_unorddf2
|
#ifdef L_unorddf2
|
||||||
|
|
||||||
ARM_FUNC_START unorddf2
|
ARM_FUNC_START unorddf2
|
||||||
|
ARM_FUNC_ALIAS aeabi_dcmpun unorddf2
|
||||||
|
|
||||||
str lr, [sp, #-4]!
|
str lr, [sp, #-4]!
|
||||||
mov ip, #0x7f000000
|
mov ip, #0x7f000000
|
||||||
orr ip, ip, #0x00f00000
|
orr ip, ip, #0x00f00000
|
||||||
|
@ -1037,6 +1125,7 @@ ARM_FUNC_START unorddf2
|
||||||
3: mov r0, #1 @ arguments are unordered.
|
3: mov r0, #1 @ arguments are unordered.
|
||||||
RETLDM
|
RETLDM
|
||||||
|
|
||||||
|
FUNC_END aeabi_dcmpun
|
||||||
FUNC_END unorddf2
|
FUNC_END unorddf2
|
||||||
|
|
||||||
#endif /* L_unorddf2 */
|
#endif /* L_unorddf2 */
|
||||||
|
@ -1044,6 +1133,7 @@ ARM_FUNC_START unorddf2
|
||||||
#ifdef L_fixdfsi
|
#ifdef L_fixdfsi
|
||||||
|
|
||||||
ARM_FUNC_START fixdfsi
|
ARM_FUNC_START fixdfsi
|
||||||
|
ARM_FUNC_ALIAS aeabi_d2iz fixdfsi
|
||||||
orrs ip, xl, xh, lsl #1
|
orrs ip, xl, xh, lsl #1
|
||||||
beq 1f @ value is 0.
|
beq 1f @ value is 0.
|
||||||
|
|
||||||
|
@ -1084,6 +1174,7 @@ ARM_FUNC_START fixdfsi
|
||||||
4: mov r0, #0 @ How should we convert NAN?
|
4: mov r0, #0 @ How should we convert NAN?
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
FUNC_END aeabi_d2iz
|
||||||
FUNC_END fixdfsi
|
FUNC_END fixdfsi
|
||||||
|
|
||||||
#endif /* L_fixdfsi */
|
#endif /* L_fixdfsi */
|
||||||
|
@ -1091,6 +1182,7 @@ ARM_FUNC_START fixdfsi
|
||||||
#ifdef L_fixunsdfsi
|
#ifdef L_fixunsdfsi
|
||||||
|
|
||||||
ARM_FUNC_START fixunsdfsi
|
ARM_FUNC_START fixunsdfsi
|
||||||
|
ARM_FUNC_ALIAS aeabi_d2uiz fixunsdfsi
|
||||||
orrs ip, xl, xh, lsl #1
|
orrs ip, xl, xh, lsl #1
|
||||||
movcss r0, #0 @ value is negative
|
movcss r0, #0 @ value is negative
|
||||||
RETc(eq) @ or 0 (xl, xh overlap r0)
|
RETc(eq) @ or 0 (xl, xh overlap r0)
|
||||||
|
@ -1127,6 +1219,7 @@ ARM_FUNC_START fixunsdfsi
|
||||||
4: mov r0, #0 @ How should we convert NAN?
|
4: mov r0, #0 @ How should we convert NAN?
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
FUNC_END aeabi_d2uiz
|
||||||
FUNC_END fixunsdfsi
|
FUNC_END fixunsdfsi
|
||||||
|
|
||||||
#endif /* L_fixunsdfsi */
|
#endif /* L_fixunsdfsi */
|
||||||
|
@ -1134,6 +1227,7 @@ ARM_FUNC_START fixunsdfsi
|
||||||
#ifdef L_truncdfsf2
|
#ifdef L_truncdfsf2
|
||||||
|
|
||||||
ARM_FUNC_START truncdfsf2
|
ARM_FUNC_START truncdfsf2
|
||||||
|
ARM_FUNC_ALIAS aeabi_d2f truncdfsf2
|
||||||
orrs r2, xl, xh, lsl #1
|
orrs r2, xl, xh, lsl #1
|
||||||
moveq r0, r2, rrx
|
moveq r0, r2, rrx
|
||||||
RETc(eq) @ value is 0.0 or -0.0
|
RETc(eq) @ value is 0.0 or -0.0
|
||||||
|
@ -1219,6 +1313,7 @@ ARM_FUNC_START truncdfsf2
|
||||||
and xh, xh, #0x80000000
|
and xh, xh, #0x80000000
|
||||||
b 5b
|
b 5b
|
||||||
|
|
||||||
|
FUNC_END aeabi_d2f
|
||||||
FUNC_END truncdfsf2
|
FUNC_END truncdfsf2
|
||||||
|
|
||||||
#endif /* L_truncdfsf2 */
|
#endif /* L_truncdfsf2 */
|
||||||
|
|
|
@ -41,23 +41,34 @@
|
||||||
#ifdef L_negsf2
|
#ifdef L_negsf2
|
||||||
|
|
||||||
ARM_FUNC_START negsf2
|
ARM_FUNC_START negsf2
|
||||||
|
ARM_FUNC_ALIAS aeabi_fneg negsf2
|
||||||
|
|
||||||
eor r0, r0, #0x80000000 @ flip sign bit
|
eor r0, r0, #0x80000000 @ flip sign bit
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
FUNC_END aeabi_fneg
|
||||||
FUNC_END negsf2
|
FUNC_END negsf2
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef L_addsubsf3
|
#ifdef L_addsubsf3
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_frsub
|
||||||
|
|
||||||
|
eor r0, r0, #0x80000000 @ flip sign bit of first arg
|
||||||
|
b 1f
|
||||||
|
|
||||||
ARM_FUNC_START subsf3
|
ARM_FUNC_START subsf3
|
||||||
|
ARM_FUNC_ALIAS aeabi_fsub subsf3
|
||||||
|
|
||||||
eor r1, r1, #0x80000000 @ flip sign bit of second arg
|
eor r1, r1, #0x80000000 @ flip sign bit of second arg
|
||||||
#if defined(__thumb__) && !defined(__THUMB_INTERWORK__)
|
#if defined(__thumb__) && !defined(__THUMB_INTERWORK__)
|
||||||
b 1f @ Skip Thumb-code prologue
|
b 1f @ Skip Thumb-code prologue
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ARM_FUNC_START addsf3
|
ARM_FUNC_START addsf3
|
||||||
|
ARM_FUNC_ALIAS aeabi_fadd addsf3
|
||||||
|
|
||||||
1: @ Compare both args, return zero if equal but the sign.
|
1: @ Compare both args, return zero if equal but the sign.
|
||||||
eor r2, r0, r1
|
eor r2, r0, r1
|
||||||
teq r2, #0x80000000
|
teq r2, #0x80000000
|
||||||
|
@ -258,14 +269,21 @@ LSYM(Lad_i):
|
||||||
orrne r0, r3, #0x00400000 @ NAN
|
orrne r0, r3, #0x00400000 @ NAN
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
FUNC_END aeabi_frsub
|
||||||
|
FUNC_END aeabi_fadd
|
||||||
FUNC_END addsf3
|
FUNC_END addsf3
|
||||||
|
FUNC_END aeabi_fsub
|
||||||
FUNC_END subsf3
|
FUNC_END subsf3
|
||||||
|
|
||||||
ARM_FUNC_START floatunsisf
|
ARM_FUNC_START floatunsisf
|
||||||
|
ARM_FUNC_ALIAS aeabi_ui2f floatunsisf
|
||||||
|
|
||||||
mov r3, #0
|
mov r3, #0
|
||||||
b 1f
|
b 1f
|
||||||
|
|
||||||
ARM_FUNC_START floatsisf
|
ARM_FUNC_START floatsisf
|
||||||
|
ARM_FUNC_ALIAS aeabi_i2f floatsisf
|
||||||
|
|
||||||
ands r3, r0, #0x80000000
|
ands r3, r0, #0x80000000
|
||||||
rsbmi r0, r0, #0
|
rsbmi r0, r0, #0
|
||||||
|
|
||||||
|
@ -290,7 +308,9 @@ ARM_FUNC_START floatsisf
|
||||||
add r2, r2, #(2 << 23)
|
add r2, r2, #(2 << 23)
|
||||||
b LSYM(Lad_p)
|
b LSYM(Lad_p)
|
||||||
|
|
||||||
|
FUNC_END aeabi_i2f
|
||||||
FUNC_END floatsisf
|
FUNC_END floatsisf
|
||||||
|
FUNC_END aeabi_ui2f
|
||||||
FUNC_END floatunsisf
|
FUNC_END floatunsisf
|
||||||
|
|
||||||
#endif /* L_addsubsf3 */
|
#endif /* L_addsubsf3 */
|
||||||
|
@ -298,7 +318,8 @@ ARM_FUNC_START floatsisf
|
||||||
#ifdef L_muldivsf3
|
#ifdef L_muldivsf3
|
||||||
|
|
||||||
ARM_FUNC_START mulsf3
|
ARM_FUNC_START mulsf3
|
||||||
|
ARM_FUNC_ALIAS aeabi_fmul mulsf3
|
||||||
|
|
||||||
@ Mask out exponents.
|
@ Mask out exponents.
|
||||||
mov ip, #0xff000000
|
mov ip, #0xff000000
|
||||||
and r2, r0, ip, lsr #1
|
and r2, r0, ip, lsr #1
|
||||||
|
@ -485,10 +506,12 @@ LSYM(Lml_n):
|
||||||
orr r0, r0, #0x00c00000
|
orr r0, r0, #0x00c00000
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
FUNC_END aeabi_fmul
|
||||||
FUNC_END mulsf3
|
FUNC_END mulsf3
|
||||||
|
|
||||||
ARM_FUNC_START divsf3
|
ARM_FUNC_START divsf3
|
||||||
|
ARM_FUNC_ALIAS aeabi_fdiv divsf3
|
||||||
|
|
||||||
@ Mask out exponents.
|
@ Mask out exponents.
|
||||||
mov ip, #0xff000000
|
mov ip, #0xff000000
|
||||||
and r2, r0, ip, lsr #1
|
and r2, r0, ip, lsr #1
|
||||||
|
@ -636,12 +659,28 @@ LSYM(Ldv_s):
|
||||||
bne LSYM(Lml_z) @ 0 / <non_zero> -> 0
|
bne LSYM(Lml_z) @ 0 / <non_zero> -> 0
|
||||||
b LSYM(Lml_n) @ 0 / 0 -> NAN
|
b LSYM(Lml_n) @ 0 / 0 -> NAN
|
||||||
|
|
||||||
|
FUNC_END aeabi_fdiv
|
||||||
FUNC_END divsf3
|
FUNC_END divsf3
|
||||||
|
|
||||||
#endif /* L_muldivsf3 */
|
#endif /* L_muldivsf3 */
|
||||||
|
|
||||||
#ifdef L_cmpsf2
|
#ifdef L_cmpsf2
|
||||||
|
|
||||||
|
@ The return value in r0 is
|
||||||
|
@
|
||||||
|
@ 0 if the operands are equal
|
||||||
|
@ 1 if the first operand is greater than the second, or
|
||||||
|
@ the operands are unordered and the operation is
|
||||||
|
@ CMP, LT, LE, NE, or EQ.
|
||||||
|
@ -1 if the first operand is less than the second, or
|
||||||
|
@ the operands are unordered and the operation is GT
|
||||||
|
@ or GE.
|
||||||
|
@
|
||||||
|
@ The Z flag will be set iff the operands are equal.
|
||||||
|
@
|
||||||
|
@ The following registers are clobbered by this function:
|
||||||
|
@ ip, r0, r1, r2, r3
|
||||||
|
|
||||||
ARM_FUNC_START gtsf2
|
ARM_FUNC_START gtsf2
|
||||||
ARM_FUNC_ALIAS gesf2 gtsf2
|
ARM_FUNC_ALIAS gesf2 gtsf2
|
||||||
mov r3, #-1
|
mov r3, #-1
|
||||||
|
@ -657,24 +696,31 @@ ARM_FUNC_ALIAS nesf2 cmpsf2
|
||||||
ARM_FUNC_ALIAS eqsf2 cmpsf2
|
ARM_FUNC_ALIAS eqsf2 cmpsf2
|
||||||
mov r3, #1 @ how should we specify unordered here?
|
mov r3, #1 @ how should we specify unordered here?
|
||||||
|
|
||||||
1: @ Trap any INF/NAN first.
|
@ Both Inf and NaN have an exponent of 255. Therefore, we
|
||||||
mov ip, #0xff000000
|
@ compute (r1 & 0x8f80000) || (r2 & 0x8f8000).
|
||||||
|
1: mov ip, #0xff000000
|
||||||
and r2, r1, ip, lsr #1
|
and r2, r1, ip, lsr #1
|
||||||
teq r2, ip, lsr #1
|
teq r2, ip, lsr #1
|
||||||
and r2, r0, ip, lsr #1
|
and r2, r0, ip, lsr #1
|
||||||
teqne r2, ip, lsr #1
|
teqne r2, ip, lsr #1
|
||||||
beq 3f
|
beq 3f
|
||||||
|
|
||||||
@ Test for equality.
|
@ Test for equality. The representations of +0.0 and -0.0
|
||||||
@ Note that 0.0 is equal to -0.0.
|
@ have all bits set to zero, except for the sign bit. Since
|
||||||
|
@ 0.0 is equal to -0.0, we begin by testing
|
||||||
|
@ ((r0 | r1) & ~0x8000000).
|
||||||
2: orr r3, r0, r1
|
2: orr r3, r0, r1
|
||||||
|
@ If the result of the bitwise and is zero, then the Z flag
|
||||||
|
@ will be set. In any case, the C flag will be set.
|
||||||
bics r3, r3, #0x80000000 @ either 0.0 or -0.0
|
bics r3, r3, #0x80000000 @ either 0.0 or -0.0
|
||||||
teqne r0, r1 @ or both the same
|
teqne r0, r1 @ or both the same
|
||||||
|
@ If the Z flag is set, the two operands were equal. Return zero.
|
||||||
moveq r0, #0
|
moveq r0, #0
|
||||||
RETc(eq)
|
RETc(eq)
|
||||||
|
|
||||||
@ Check for sign difference. The N flag is set if it is the case.
|
@ Check for sign difference. The N flag is set (due to the
|
||||||
@ If so, return sign of r0.
|
@ use of teq above) if the sign bit is set on exactly one
|
||||||
|
@ of the operands. Return the sign of the first operand.
|
||||||
movmi r0, r0, asr #31
|
movmi r0, r0, asr #31
|
||||||
orrmi r0, r0, #1
|
orrmi r0, r0, #1
|
||||||
RETc(mi)
|
RETc(mi)
|
||||||
|
@ -686,12 +732,24 @@ ARM_FUNC_ALIAS eqsf2 cmpsf2
|
||||||
@ Compare mantissa if exponents are equal
|
@ Compare mantissa if exponents are equal
|
||||||
moveq r0, r0, lsl #9
|
moveq r0, r0, lsl #9
|
||||||
cmpeq r0, r1, lsl #9
|
cmpeq r0, r1, lsl #9
|
||||||
|
|
||||||
|
@ We know the operands cannot be equal at this point, so the
|
||||||
|
@ Z flag is clear. The C flag is set if the first operand has
|
||||||
|
@ the greater exponent, or the exponents are equal and the
|
||||||
|
@ first operand has the greater mantissa. Therefore, if the C
|
||||||
|
@ flag is set, the first operand is greater iff the sign is
|
||||||
|
@ positive. These next two instructions will put zero in
|
||||||
|
@ r0 if the first operand is greater, and -1 if the second
|
||||||
|
@ operand is greater.
|
||||||
movcs r0, r1, asr #31
|
movcs r0, r1, asr #31
|
||||||
mvncc r0, r1, asr #31
|
mvncc r0, r1, asr #31
|
||||||
|
@ If r0 is 0, the first operand is greater, so return 1. Leave
|
||||||
|
@ -1 unchanged.
|
||||||
orr r0, r0, #1
|
orr r0, r0, #1
|
||||||
RET
|
RET
|
||||||
|
|
||||||
@ Look for a NAN.
|
@ We know that at least one argument is either Inf or NaN.
|
||||||
|
@ Look for a NaN.
|
||||||
3: and r2, r1, ip, lsr #1
|
3: and r2, r1, ip, lsr #1
|
||||||
teq r2, ip, lsr #1
|
teq r2, ip, lsr #1
|
||||||
bne 4f
|
bne 4f
|
||||||
|
@ -702,7 +760,8 @@ ARM_FUNC_ALIAS eqsf2 cmpsf2
|
||||||
bne 2b
|
bne 2b
|
||||||
movs ip, r0, lsl #9
|
movs ip, r0, lsl #9
|
||||||
beq 2b @ r0 is not NAN
|
beq 2b @ r0 is not NAN
|
||||||
5: mov r0, r3 @ return unordered code from r3.
|
5: @ The Z flag is clear at this point.
|
||||||
|
mov r0, r3 @ return unordered code from r3.
|
||||||
RET
|
RET
|
||||||
|
|
||||||
FUNC_END gesf2
|
FUNC_END gesf2
|
||||||
|
@ -713,11 +772,75 @@ ARM_FUNC_ALIAS eqsf2 cmpsf2
|
||||||
FUNC_END eqsf2
|
FUNC_END eqsf2
|
||||||
FUNC_END cmpsf2
|
FUNC_END cmpsf2
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_cfrcmple
|
||||||
|
mov ip, r0
|
||||||
|
mov r0, r1
|
||||||
|
mov r1, ip
|
||||||
|
b 6f
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_cfcmpeq
|
||||||
|
ARM_FUNC_ALIAS aeabi_cfcmple aeabi_cfcmpeq
|
||||||
|
@ The status-returning routines are required to preserve all
|
||||||
|
@ registers except ip, lr, and cpsr.
|
||||||
|
6: stmfd sp!, {r0, r1, r2, r3, lr}
|
||||||
|
ARM_CALL cmpsf2
|
||||||
|
@ Set the Z flag correctly, and the C flag unconditionally.
|
||||||
|
cmp r0, #0
|
||||||
|
@ Clear the C flag if the return value was -1, indicating
|
||||||
|
@ that the first operand was smaller than the second.
|
||||||
|
cmnmi r0, #0
|
||||||
|
RETLDM "r0, r1, r2, r3"
|
||||||
|
FUNC_END aeabi_cfcmple
|
||||||
|
FUNC_END aeabi_cfcmpeq
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_fcmpeq
|
||||||
|
str lr, [sp, #-4]!
|
||||||
|
ARM_CALL aeabi_cfcmple
|
||||||
|
moveq r0, #1 @ Equal to.
|
||||||
|
movne r0, #0 @ Less than, greater than, or unordered.
|
||||||
|
RETLDM
|
||||||
|
FUNC_END aeabi_fcmpeq
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_fcmplt
|
||||||
|
str lr, [sp, #-4]!
|
||||||
|
ARM_CALL aeabi_cfcmple
|
||||||
|
movcc r0, #1 @ Less than.
|
||||||
|
movcs r0, #0 @ Equal to, greater than, or unordered.
|
||||||
|
RETLDM
|
||||||
|
FUNC_END aeabi_fcmplt
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_fcmple
|
||||||
|
str lr, [sp, #-4]!
|
||||||
|
ARM_CALL aeabi_cfcmple
|
||||||
|
movls r0, #1 @ Less than or equal to.
|
||||||
|
movhi r0, #0 @ Greater than or unordered.
|
||||||
|
RETLDM
|
||||||
|
FUNC_END aeabi_fcmple
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_fcmpge
|
||||||
|
str lr, [sp, #-4]!
|
||||||
|
ARM_CALL aeabi_cfrcmple
|
||||||
|
movls r0, #1 @ Operand 2 is less than or equal to operand 1.
|
||||||
|
movhi r0, #0 @ Operand 2 greater than operand 1, or unordered.
|
||||||
|
RETLDM
|
||||||
|
FUNC_END aeabi_fcmpge
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_fcmpgt
|
||||||
|
str lr, [sp, #-4]!
|
||||||
|
ARM_CALL aeabi_cfrcmple
|
||||||
|
movcc r0, #1 @ Operand 2 is less than operand 1.
|
||||||
|
movcs r0, #0 @ Operand 2 is greater than or equal to operand 1,
|
||||||
|
@ or they are unordered.
|
||||||
|
RETLDM
|
||||||
|
FUNC_END aeabi_fcmpgt
|
||||||
|
|
||||||
#endif /* L_cmpsf2 */
|
#endif /* L_cmpsf2 */
|
||||||
|
|
||||||
#ifdef L_unordsf2
|
#ifdef L_unordsf2
|
||||||
|
|
||||||
ARM_FUNC_START unordsf2
|
ARM_FUNC_START unordsf2
|
||||||
|
ARM_FUNC_ALIAS aeabi_fcmpun unordsf2
|
||||||
|
|
||||||
mov ip, #0xff000000
|
mov ip, #0xff000000
|
||||||
and r2, r1, ip, lsr #1
|
and r2, r1, ip, lsr #1
|
||||||
teq r2, ip, lsr #1
|
teq r2, ip, lsr #1
|
||||||
|
@ -734,6 +857,7 @@ ARM_FUNC_START unordsf2
|
||||||
3: mov r0, #1 @ arguments are unordered.
|
3: mov r0, #1 @ arguments are unordered.
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
FUNC_END aeabi_fcmpun
|
||||||
FUNC_END unordsf2
|
FUNC_END unordsf2
|
||||||
|
|
||||||
#endif /* L_unordsf2 */
|
#endif /* L_unordsf2 */
|
||||||
|
@ -741,6 +865,7 @@ ARM_FUNC_START unordsf2
|
||||||
#ifdef L_fixsfsi
|
#ifdef L_fixsfsi
|
||||||
|
|
||||||
ARM_FUNC_START fixsfsi
|
ARM_FUNC_START fixsfsi
|
||||||
|
ARM_FUNC_ALIAS aeabi_f2iz fixsfsi
|
||||||
movs r0, r0, lsl #1
|
movs r0, r0, lsl #1
|
||||||
RETc(eq) @ value is 0.
|
RETc(eq) @ value is 0.
|
||||||
|
|
||||||
|
@ -774,6 +899,7 @@ ARM_FUNC_START fixsfsi
|
||||||
3: mov r0, #0 @ What should we convert NAN to?
|
3: mov r0, #0 @ What should we convert NAN to?
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
FUNC_END aeabi_f2iz
|
||||||
FUNC_END fixsfsi
|
FUNC_END fixsfsi
|
||||||
|
|
||||||
#endif /* L_fixsfsi */
|
#endif /* L_fixsfsi */
|
||||||
|
@ -781,6 +907,7 @@ ARM_FUNC_START fixsfsi
|
||||||
#ifdef L_fixunssfsi
|
#ifdef L_fixunssfsi
|
||||||
|
|
||||||
ARM_FUNC_START fixunssfsi
|
ARM_FUNC_START fixunssfsi
|
||||||
|
ARM_FUNC_ALIAS aeabi_f2uiz fixunssfsi
|
||||||
movs r0, r0, lsl #1
|
movs r0, r0, lsl #1
|
||||||
movcss r0, #0 @ value is negative...
|
movcss r0, #0 @ value is negative...
|
||||||
RETc(eq) @ ... or 0.
|
RETc(eq) @ ... or 0.
|
||||||
|
@ -811,6 +938,7 @@ ARM_FUNC_START fixunssfsi
|
||||||
3: mov r0, #0 @ What should we convert NAN to?
|
3: mov r0, #0 @ What should we convert NAN to?
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
FUNC_END aeabi_f2uiz
|
||||||
FUNC_END fixunssfsi
|
FUNC_END fixunssfsi
|
||||||
|
|
||||||
#endif /* L_fixunssfsi */
|
#endif /* L_fixunssfsi */
|
||||||
|
|
|
@ -199,6 +199,9 @@ SYM (__\name):
|
||||||
_L__\name: /* A hook to tell gdb that we've switched to ARM */
|
_L__\name: /* A hook to tell gdb that we've switched to ARM */
|
||||||
.endm
|
.endm
|
||||||
#define EQUIV .thumb_set
|
#define EQUIV .thumb_set
|
||||||
|
.macro ARM_CALL name
|
||||||
|
bl _L__\name
|
||||||
|
.endm
|
||||||
#else
|
#else
|
||||||
.macro ARM_FUNC_START name
|
.macro ARM_FUNC_START name
|
||||||
.text
|
.text
|
||||||
|
@ -209,6 +212,9 @@ _L__\name: /* A hook to tell gdb that we've switched to ARM */
|
||||||
SYM (__\name):
|
SYM (__\name):
|
||||||
.endm
|
.endm
|
||||||
#define EQUIV .set
|
#define EQUIV .set
|
||||||
|
.macro ARM_CALL name
|
||||||
|
bl __\name
|
||||||
|
.endm
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
.macro ARM_FUNC_ALIAS new old
|
.macro ARM_FUNC_ALIAS new old
|
||||||
|
@ -649,6 +655,15 @@ LSYM(Lgot_result):
|
||||||
|
|
||||||
DIV_FUNC_END udivsi3
|
DIV_FUNC_END udivsi3
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_uidivmod
|
||||||
|
stmfd sp!, { r0, r1, lr }
|
||||||
|
ARM_CALL udivsi3
|
||||||
|
ldmfd sp!, { r1, r2, lr }
|
||||||
|
mul r3, r2, r0
|
||||||
|
sub r1, r1, r3
|
||||||
|
RET
|
||||||
|
FUNC_END aeabi_uidivmod
|
||||||
|
|
||||||
#endif /* L_udivsi3 */
|
#endif /* L_udivsi3 */
|
||||||
/* ------------------------------------------------------------------------ */
|
/* ------------------------------------------------------------------------ */
|
||||||
#ifdef L_umodsi3
|
#ifdef L_umodsi3
|
||||||
|
@ -769,6 +784,15 @@ LSYM(Lover12):
|
||||||
|
|
||||||
DIV_FUNC_END divsi3
|
DIV_FUNC_END divsi3
|
||||||
|
|
||||||
|
ARM_FUNC_START aeabi_idivmod
|
||||||
|
stmfd sp!, { r0, r1, lr }
|
||||||
|
ARM_CALL divsi3
|
||||||
|
ldmfd sp!, { r1, r2, lr }
|
||||||
|
mul r3, r2, r0
|
||||||
|
sub r1, r1, r3
|
||||||
|
RET
|
||||||
|
FUNC_END aeabi_idivmod
|
||||||
|
|
||||||
#endif /* L_divsi3 */
|
#endif /* L_divsi3 */
|
||||||
/* ------------------------------------------------------------------------ */
|
/* ------------------------------------------------------------------------ */
|
||||||
#ifdef L_modsi3
|
#ifdef L_modsi3
|
||||||
|
@ -834,9 +858,13 @@ LSYM(Lover12):
|
||||||
#ifdef L_dvmd_tls
|
#ifdef L_dvmd_tls
|
||||||
|
|
||||||
FUNC_START div0
|
FUNC_START div0
|
||||||
|
ARM_FUNC_ALIAS aeabi_idiv0 div0
|
||||||
|
ARM_FUNC_ALIAS aeabi_ldiv0 div0
|
||||||
|
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
FUNC_END aeabi_ldiv0
|
||||||
|
FUNC_END aeabi_idiv0
|
||||||
FUNC_END div0
|
FUNC_END div0
|
||||||
|
|
||||||
#endif /* L_divmodsi_tools */
|
#endif /* L_divmodsi_tools */
|
||||||
|
@ -884,7 +912,8 @@ LSYM(Lover12):
|
||||||
#ifdef L_lshrdi3
|
#ifdef L_lshrdi3
|
||||||
|
|
||||||
FUNC_START lshrdi3
|
FUNC_START lshrdi3
|
||||||
|
ARM_FUNC_ALIAS aeabi_llsr lshrdi3
|
||||||
|
|
||||||
#ifdef __thumb__
|
#ifdef __thumb__
|
||||||
lsr al, r2
|
lsr al, r2
|
||||||
mov r3, ah
|
mov r3, ah
|
||||||
|
@ -907,6 +936,7 @@ LSYM(Lover12):
|
||||||
mov ah, ah, lsr r2
|
mov ah, ah, lsr r2
|
||||||
RET
|
RET
|
||||||
#endif
|
#endif
|
||||||
|
FUNC_END aeabi_llsr
|
||||||
FUNC_END lshrdi3
|
FUNC_END lshrdi3
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -914,6 +944,8 @@ LSYM(Lover12):
|
||||||
#ifdef L_ashrdi3
|
#ifdef L_ashrdi3
|
||||||
|
|
||||||
FUNC_START ashrdi3
|
FUNC_START ashrdi3
|
||||||
|
ARM_FUNC_ALIAS aeabi_lasr ashrdi3
|
||||||
|
|
||||||
#ifdef __thumb__
|
#ifdef __thumb__
|
||||||
lsr al, r2
|
lsr al, r2
|
||||||
mov r3, ah
|
mov r3, ah
|
||||||
|
@ -941,6 +973,7 @@ LSYM(Lover12):
|
||||||
RET
|
RET
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
FUNC_END aeabi_lasr
|
||||||
FUNC_END ashrdi3
|
FUNC_END ashrdi3
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -948,6 +981,8 @@ LSYM(Lover12):
|
||||||
#ifdef L_ashldi3
|
#ifdef L_ashldi3
|
||||||
|
|
||||||
FUNC_START ashldi3
|
FUNC_START ashldi3
|
||||||
|
ARM_FUNC_ALIAS aeabi_llsl ashldi3
|
||||||
|
|
||||||
#ifdef __thumb__
|
#ifdef __thumb__
|
||||||
lsl ah, r2
|
lsl ah, r2
|
||||||
mov r3, al
|
mov r3, al
|
||||||
|
@ -970,6 +1005,7 @@ LSYM(Lover12):
|
||||||
mov al, al, lsl r2
|
mov al, al, lsl r2
|
||||||
RET
|
RET
|
||||||
#endif
|
#endif
|
||||||
|
FUNC_END aeabi_llsl
|
||||||
FUNC_END ashldi3
|
FUNC_END ashldi3
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1104,4 +1140,4 @@ LSYM(Lchange_\register):
|
||||||
|
|
||||||
#include "ieee754-df.S"
|
#include "ieee754-df.S"
|
||||||
#include "ieee754-sf.S"
|
#include "ieee754-sf.S"
|
||||||
|
#include "bpabi.S"
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
GCC_3.5 {
|
||||||
|
# BPABI symbols
|
||||||
|
__aeabi_cdcmpeq
|
||||||
|
__aeabi_cdcmple
|
||||||
|
__aeabi_cdrcmple
|
||||||
|
__aeabi_cfcmpeq
|
||||||
|
__aeabi_cfcmple
|
||||||
|
__aeabi_cfrcmple
|
||||||
|
__aeabi_d2f
|
||||||
|
__aeabi_d2iz
|
||||||
|
__aeabi_d2lz
|
||||||
|
__aeabi_d2uiz
|
||||||
|
__aeabi_d2ulz
|
||||||
|
__aeabi_dadd
|
||||||
|
__aeabi_dcmpeq
|
||||||
|
__aeabi_dcmpge
|
||||||
|
__aeabi_dcmpgt
|
||||||
|
__aeabi_dcmple
|
||||||
|
__aeabi_dcmplt
|
||||||
|
__aeabi_dcmpun
|
||||||
|
__aeabi_ddiv
|
||||||
|
__aeabi_dmul
|
||||||
|
__aeabi_dneg
|
||||||
|
__aeabi_drsub
|
||||||
|
__aeabi_dsub
|
||||||
|
__aeabi_f2d
|
||||||
|
__aeabi_f2iz
|
||||||
|
__aeabi_f2lz
|
||||||
|
__aeabi_f2uiz
|
||||||
|
__aeabi_f2ulz
|
||||||
|
__aeabi_fadd
|
||||||
|
__aeabi_fcmpeq
|
||||||
|
__aeabi_fcmpge
|
||||||
|
__aeabi_fcmpgt
|
||||||
|
__aeabi_fcmple
|
||||||
|
__aeabi_fcmplt
|
||||||
|
__aeabi_fcmpun
|
||||||
|
__aeabi_fdiv
|
||||||
|
__aeabi_fmul
|
||||||
|
__aeabi_fneg
|
||||||
|
__aeabi_frsub
|
||||||
|
__aeabi_fsub
|
||||||
|
__aeabi_i2d
|
||||||
|
__aeabi_i2f
|
||||||
|
__aeabi_idiv0
|
||||||
|
__aeabi_idivmod
|
||||||
|
__aeabi_l2d
|
||||||
|
__aeabi_l2f
|
||||||
|
__aeabi_lasr
|
||||||
|
__aeabi_lcmp
|
||||||
|
__aeabi_ldiv0
|
||||||
|
__aeabi_ldivmod
|
||||||
|
__aeabi_llsl
|
||||||
|
__aeabi_llsr
|
||||||
|
__aeabi_lmul
|
||||||
|
__aeabi_ui2d
|
||||||
|
__aeabi_ui2f
|
||||||
|
__aeabi_uidivmod
|
||||||
|
__aeabi_uldivmod
|
||||||
|
__aeabi_ulcmp
|
||||||
|
__aeabi_ul2d
|
||||||
|
__aeabi_ul2f
|
||||||
|
}
|
|
@ -20,9 +20,6 @@
|
||||||
the Free Software Foundation, 59 Temple Place - Suite 330,
|
the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
/* Use the SYMBIAN ABI by default. */
|
|
||||||
#define ARM_DEFAULT_ABI ARM_ABI_AAPCS
|
|
||||||
|
|
||||||
/* Do not expand builtin functions (unless explicitly prefixed with
|
/* Do not expand builtin functions (unless explicitly prefixed with
|
||||||
"__builtin"). Symbian OS code relies on properties of the standard
|
"__builtin"). Symbian OS code relies on properties of the standard
|
||||||
library that go beyond those guaranteed by the ANSI/ISO standard.
|
library that go beyond those guaranteed by the ANSI/ISO standard.
|
||||||
|
@ -53,11 +50,5 @@
|
||||||
#undef STARTFILE_SPEC
|
#undef STARTFILE_SPEC
|
||||||
#define STARTFILE_SPEC "crti%O%s crtbegin%O%s"
|
#define STARTFILE_SPEC "crti%O%s crtbegin%O%s"
|
||||||
|
|
||||||
/* The generic link spec in elf.h does not support shared libraries. */
|
|
||||||
#undef LINK_SPEC
|
|
||||||
#define LINK_SPEC "%{mbig-endian:-EB} %{mlittle-endian:-EL} " \
|
|
||||||
"%{static:-Bstatic} %{shared:-shared} %{symbolic:-Bsymbolic} " \
|
|
||||||
"-X"
|
|
||||||
|
|
||||||
/* Support the "dllimport" attribute. */
|
/* Support the "dllimport" attribute. */
|
||||||
#define TARGET_DLLIMPORT_DECL_ATTRIBUTES 1
|
#define TARGET_DLLIMPORT_DECL_ATTRIBUTES 1
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Add the bpabi.S functions.
|
||||||
|
LIB1ASMFUNCS += _aeabi_lcmp _aeabi_ulcmp _aeabi_ldivmod _aeabi_uldivmod
|
||||||
|
|
||||||
|
# Add the BPABI C functions.
|
||||||
|
LIB2FUNCS_EXTRA = $(srcdir)/config/arm/bpabi.c
|
||||||
|
|
||||||
|
# Add the BPABI names.
|
||||||
|
SHLIB_MAPFILES += $(srcdir)/config/arm/libgcc-bpabi.ver
|
||||||
|
|
|
@ -627,6 +627,19 @@ You Lose! You must define PREFERRED_DEBUGGING_TYPE!
|
||||||
#define FLOAT_LIB_COMPARE_RETURNS_BOOL(MODE, COMPARISON) false
|
#define FLOAT_LIB_COMPARE_RETURNS_BOOL(MODE, COMPARISON) false
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* True if the target should use the standard libgcc arithmetic
|
||||||
|
library functions, like __addsi3 and _fixdfdi. */
|
||||||
|
#ifndef TARGET_LIBGCC_LIBFUNCS
|
||||||
|
#define TARGET_LIBGCC_LIBFUNCS (true)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* True if the targets integer-comparision fucntions return { 0, 1, 2
|
||||||
|
} to indicate { <, ==, > }. False if { -1, 0, 1 } is used
|
||||||
|
instead. The libgcc routines are biased. */
|
||||||
|
#ifndef TARGET_LIB_INT_CMP_BIASED
|
||||||
|
#define TARGET_LIB_INT_CMP_BIASED (true)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* If FLOAT_WORDS_BIG_ENDIAN is not defined in the header files,
|
/* If FLOAT_WORDS_BIG_ENDIAN is not defined in the header files,
|
||||||
then the word-endianness is the same as for integers. */
|
then the word-endianness is the same as for integers. */
|
||||||
#ifndef FLOAT_WORDS_BIG_ENDIAN
|
#ifndef FLOAT_WORDS_BIG_ENDIAN
|
||||||
|
|
|
@ -4765,6 +4765,24 @@ comparison operators, so the default returns false always. Most ports
|
||||||
don't need to define this macro.
|
don't need to define this macro.
|
||||||
@end defmac
|
@end defmac
|
||||||
|
|
||||||
|
@defmac TARGET_LIBGCC_FUNCS
|
||||||
|
This macro should evaluate to @code{true} if the standard GCC library
|
||||||
|
names (like @code{__modsi3}) should be used for functions provided in
|
||||||
|
@file{libgcc.a}. If this macro evaluates to @code{false}, then the
|
||||||
|
target must explictily set the names of all desired library functions
|
||||||
|
itself using the @code{TARGET_INIT_LIBFUNCS} hook.
|
||||||
|
@end defmac
|
||||||
|
|
||||||
|
@defmac TARGET_LIB_INT_CMP_BIASED
|
||||||
|
This macro should evaluate to @code{true} if the integer comparison
|
||||||
|
functions (like @code{__cmpdi2}) return 0 to indicate that the first
|
||||||
|
operand is smaller than the second, 1 to indicate that they are equal,
|
||||||
|
and 2 to indicate that the first operand is greater than the second.
|
||||||
|
If this macro evalutes to @code{false} the comparison functions return
|
||||||
|
-1, 0, and 1 instead of 0, 1, and 2. If the target uses the routines
|
||||||
|
in @file{libgcc.a}, you do not need to define this macro.
|
||||||
|
@end defmac
|
||||||
|
|
||||||
@cindex US Software GOFAST, floating point emulation library
|
@cindex US Software GOFAST, floating point emulation library
|
||||||
@cindex floating point emulation library, US Software GOFAST
|
@cindex floating point emulation library, US Software GOFAST
|
||||||
@cindex GOFAST, floating point emulation library
|
@cindex GOFAST, floating point emulation library
|
||||||
|
|
22
gcc/expmed.c
22
gcc/expmed.c
|
@ -4337,10 +4337,24 @@ expand_divmod (int rem_flag, enum tree_code code, enum machine_mode mode,
|
||||||
target = 0;
|
target = 0;
|
||||||
|
|
||||||
if (quotient == 0)
|
if (quotient == 0)
|
||||||
/* No divide instruction either. Use library for remainder. */
|
{
|
||||||
remainder = sign_expand_binop (compute_mode, umod_optab, smod_optab,
|
/* No divide instruction either. Use library for remainder. */
|
||||||
op0, op1, target,
|
remainder = sign_expand_binop (compute_mode, umod_optab, smod_optab,
|
||||||
unsignedp, OPTAB_LIB_WIDEN);
|
op0, op1, target,
|
||||||
|
unsignedp, OPTAB_LIB_WIDEN);
|
||||||
|
/* No remainder function. Try a quotient-and-remainder
|
||||||
|
function, keeping the remainder. */
|
||||||
|
if (!remainder)
|
||||||
|
{
|
||||||
|
remainder = gen_reg_rtx (compute_mode);
|
||||||
|
if (!expand_twoval_binop_libfunc
|
||||||
|
(unsignedp ? udivmod_optab : sdivmod_optab,
|
||||||
|
op0, op1,
|
||||||
|
NULL_RTX, remainder,
|
||||||
|
unsignedp ? UMOD : MOD))
|
||||||
|
remainder = NULL_RTX;
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* We divided. Now finish doing X - Y * (X / Y). */
|
/* We divided. Now finish doing X - Y * (X / Y). */
|
||||||
|
|
|
@ -102,6 +102,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||||
#include "gthr-single.h"
|
#include "gthr-single.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#pragma GCC visibility pop(default)
|
#pragma GCC visibility pop
|
||||||
|
|
||||||
#endif /* ! GCC_GTHR_H */
|
#endif /* ! GCC_GTHR_H */
|
||||||
|
|
268
gcc/optabs.c
268
gcc/optabs.c
|
@ -2448,6 +2448,55 @@ expand_twoval_binop (optab binoptab, rtx op0, rtx op1, rtx targ0, rtx targ1,
|
||||||
delete_insns_since (entry_last);
|
delete_insns_since (entry_last);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Expand the two-valued library call indicated by BINOPTAB, but
|
||||||
|
preserve only one of the values. If TARG0 is non-NULL, the first
|
||||||
|
value is placed into TARG0; otherwise the second value is placed
|
||||||
|
into TARG1. Exactly one of TARG0 and TARG1 must be non-NULL. The
|
||||||
|
value stored into TARG0 or TARG1 is equivalent to (CODE OP0 OP1).
|
||||||
|
This routine assumes that the value returned by the library call is
|
||||||
|
as if the return value was of an integral mode twice as wide as the
|
||||||
|
mode of OP0. Returns 1 if the call was successful. */
|
||||||
|
|
||||||
|
bool
|
||||||
|
expand_twoval_binop_libfunc (optab binoptab, rtx op0, rtx op1,
|
||||||
|
rtx targ0, rtx targ1, enum rtx_code code)
|
||||||
|
{
|
||||||
|
enum machine_mode mode;
|
||||||
|
enum machine_mode libval_mode;
|
||||||
|
rtx libval;
|
||||||
|
rtx insns;
|
||||||
|
|
||||||
|
/* Exactly one of TARG0 or TARG1 should be non-NULL. */
|
||||||
|
if (!((targ0 != NULL_RTX) ^ (targ1 != NULL_RTX)))
|
||||||
|
abort ();
|
||||||
|
|
||||||
|
mode = GET_MODE (op0);
|
||||||
|
if (!binoptab->handlers[(int) mode].libfunc)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
/* The value returned by the library function will have twice as
|
||||||
|
many bits as the nominal MODE. */
|
||||||
|
libval_mode = smallest_mode_for_size (2 * GET_MODE_BITSIZE (mode),
|
||||||
|
MODE_INT);
|
||||||
|
start_sequence ();
|
||||||
|
libval = emit_library_call_value (binoptab->handlers[(int) mode].libfunc,
|
||||||
|
NULL_RTX, LCT_CONST,
|
||||||
|
libval_mode, 2,
|
||||||
|
op0, mode,
|
||||||
|
op1, mode);
|
||||||
|
/* Get the part of VAL containing the value that we want. */
|
||||||
|
libval = simplify_gen_subreg (mode, libval, libval_mode,
|
||||||
|
targ0 ? 0 : GET_MODE_SIZE (mode));
|
||||||
|
insns = get_insns ();
|
||||||
|
end_sequence ();
|
||||||
|
/* Move the into the desired location. */
|
||||||
|
emit_libcall_block (insns, targ0 ? targ0 : targ1, libval,
|
||||||
|
gen_rtx_fmt_ee (code, mode, op0, op1));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Wrapper around expand_unop which takes an rtx code to specify
|
/* Wrapper around expand_unop which takes an rtx code to specify
|
||||||
the operation to perform, not an optab pointer. All other
|
the operation to perform, not an optab pointer. All other
|
||||||
|
@ -3817,12 +3866,19 @@ prepare_cmp_insn (rtx *px, rtx *py, enum rtx_code *pcomparison, rtx size,
|
||||||
result = emit_library_call_value (libfunc, NULL_RTX, LCT_CONST_MAKE_BLOCK,
|
result = emit_library_call_value (libfunc, NULL_RTX, LCT_CONST_MAKE_BLOCK,
|
||||||
word_mode, 2, x, mode, y, mode);
|
word_mode, 2, x, mode, y, mode);
|
||||||
|
|
||||||
/* Integer comparison returns a result that must be compared against 1,
|
|
||||||
so that even if we do an unsigned compare afterward,
|
|
||||||
there is still a value that can represent the result "less than". */
|
|
||||||
*px = result;
|
*px = result;
|
||||||
*py = const1_rtx;
|
|
||||||
*pmode = word_mode;
|
*pmode = word_mode;
|
||||||
|
if (TARGET_LIB_INT_CMP_BIASED)
|
||||||
|
/* Integer comparison returns a result that must be compared
|
||||||
|
against 1, so that even if we do an unsigned compare
|
||||||
|
afterward, there is still a value that can represent the
|
||||||
|
result "less than". */
|
||||||
|
*py = const1_rtx;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*py = const0_rtx;
|
||||||
|
*punsignedp = 1;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3993,12 +4049,14 @@ prepare_float_lib_cmp (rtx *px, rtx *py, enum rtx_code *pcomparison,
|
||||||
{
|
{
|
||||||
enum rtx_code comparison = *pcomparison;
|
enum rtx_code comparison = *pcomparison;
|
||||||
enum rtx_code swapped = swap_condition (comparison);
|
enum rtx_code swapped = swap_condition (comparison);
|
||||||
|
enum rtx_code reversed = reverse_condition_maybe_unordered (comparison);
|
||||||
rtx x = *px;
|
rtx x = *px;
|
||||||
rtx y = *py;
|
rtx y = *py;
|
||||||
enum machine_mode orig_mode = GET_MODE (x);
|
enum machine_mode orig_mode = GET_MODE (x);
|
||||||
enum machine_mode mode;
|
enum machine_mode mode;
|
||||||
rtx value, target, insns, equiv;
|
rtx value, target, insns, equiv;
|
||||||
rtx libfunc = 0;
|
rtx libfunc = 0;
|
||||||
|
bool reversed_p = false;
|
||||||
|
|
||||||
for (mode = orig_mode; mode != VOIDmode; mode = GET_MODE_WIDER_MODE (mode))
|
for (mode = orig_mode; mode != VOIDmode; mode = GET_MODE_WIDER_MODE (mode))
|
||||||
{
|
{
|
||||||
|
@ -4012,8 +4070,16 @@ prepare_float_lib_cmp (rtx *px, rtx *py, enum rtx_code *pcomparison,
|
||||||
comparison = swapped;
|
comparison = swapped;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
if ((libfunc = code_to_optab[reversed]->handlers[mode].libfunc)
|
||||||
|
&& FLOAT_LIB_COMPARE_RETURNS_BOOL (mode, reversed))
|
||||||
|
{
|
||||||
|
comparison = reversed;
|
||||||
|
reversed_p = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (mode == VOIDmode)
|
if (mode == VOIDmode)
|
||||||
abort ();
|
abort ();
|
||||||
|
|
||||||
|
@ -4089,10 +4155,9 @@ prepare_float_lib_cmp (rtx *px, rtx *py, enum rtx_code *pcomparison,
|
||||||
target = gen_reg_rtx (word_mode);
|
target = gen_reg_rtx (word_mode);
|
||||||
emit_libcall_block (insns, target, value, equiv);
|
emit_libcall_block (insns, target, value, equiv);
|
||||||
|
|
||||||
|
|
||||||
if (comparison == UNORDERED
|
if (comparison == UNORDERED
|
||||||
|| FLOAT_LIB_COMPARE_RETURNS_BOOL (mode, comparison))
|
|| FLOAT_LIB_COMPARE_RETURNS_BOOL (mode, comparison))
|
||||||
comparison = NE;
|
comparison = reversed_p ? EQ : NE;
|
||||||
|
|
||||||
*px = target;
|
*px = target;
|
||||||
*py = const0_rtx;
|
*py = const0_rtx;
|
||||||
|
@ -5418,72 +5483,79 @@ init_optabs (void)
|
||||||
init_all_optabs ();
|
init_all_optabs ();
|
||||||
|
|
||||||
/* Initialize the optabs with the names of the library functions. */
|
/* Initialize the optabs with the names of the library functions. */
|
||||||
init_integral_libfuncs (add_optab, "add", '3');
|
if (TARGET_LIBGCC_LIBFUNCS)
|
||||||
init_floating_libfuncs (add_optab, "add", '3');
|
{
|
||||||
init_integral_libfuncs (addv_optab, "addv", '3');
|
init_integral_libfuncs (add_optab, "add", '3');
|
||||||
init_floating_libfuncs (addv_optab, "add", '3');
|
init_floating_libfuncs (add_optab, "add", '3');
|
||||||
init_integral_libfuncs (sub_optab, "sub", '3');
|
init_integral_libfuncs (addv_optab, "addv", '3');
|
||||||
init_floating_libfuncs (sub_optab, "sub", '3');
|
init_floating_libfuncs (addv_optab, "add", '3');
|
||||||
init_integral_libfuncs (subv_optab, "subv", '3');
|
init_integral_libfuncs (sub_optab, "sub", '3');
|
||||||
init_floating_libfuncs (subv_optab, "sub", '3');
|
init_floating_libfuncs (sub_optab, "sub", '3');
|
||||||
init_integral_libfuncs (smul_optab, "mul", '3');
|
init_integral_libfuncs (subv_optab, "subv", '3');
|
||||||
init_floating_libfuncs (smul_optab, "mul", '3');
|
init_floating_libfuncs (subv_optab, "sub", '3');
|
||||||
init_integral_libfuncs (smulv_optab, "mulv", '3');
|
init_integral_libfuncs (smul_optab, "mul", '3');
|
||||||
init_floating_libfuncs (smulv_optab, "mul", '3');
|
init_floating_libfuncs (smul_optab, "mul", '3');
|
||||||
init_integral_libfuncs (sdiv_optab, "div", '3');
|
init_integral_libfuncs (smulv_optab, "mulv", '3');
|
||||||
init_floating_libfuncs (sdiv_optab, "div", '3');
|
init_floating_libfuncs (smulv_optab, "mul", '3');
|
||||||
init_integral_libfuncs (sdivv_optab, "divv", '3');
|
init_integral_libfuncs (sdiv_optab, "div", '3');
|
||||||
init_integral_libfuncs (udiv_optab, "udiv", '3');
|
init_floating_libfuncs (sdiv_optab, "div", '3');
|
||||||
init_integral_libfuncs (sdivmod_optab, "divmod", '4');
|
init_integral_libfuncs (sdivv_optab, "divv", '3');
|
||||||
init_integral_libfuncs (udivmod_optab, "udivmod", '4');
|
init_integral_libfuncs (udiv_optab, "udiv", '3');
|
||||||
init_integral_libfuncs (smod_optab, "mod", '3');
|
init_integral_libfuncs (sdivmod_optab, "divmod", '4');
|
||||||
init_integral_libfuncs (umod_optab, "umod", '3');
|
init_integral_libfuncs (udivmod_optab, "udivmod", '4');
|
||||||
init_floating_libfuncs (ftrunc_optab, "ftrunc", '2');
|
init_integral_libfuncs (smod_optab, "mod", '3');
|
||||||
init_integral_libfuncs (and_optab, "and", '3');
|
init_integral_libfuncs (umod_optab, "umod", '3');
|
||||||
init_integral_libfuncs (ior_optab, "ior", '3');
|
init_floating_libfuncs (ftrunc_optab, "ftrunc", '2');
|
||||||
init_integral_libfuncs (xor_optab, "xor", '3');
|
init_integral_libfuncs (and_optab, "and", '3');
|
||||||
init_integral_libfuncs (ashl_optab, "ashl", '3');
|
init_integral_libfuncs (ior_optab, "ior", '3');
|
||||||
init_integral_libfuncs (ashr_optab, "ashr", '3');
|
init_integral_libfuncs (xor_optab, "xor", '3');
|
||||||
init_integral_libfuncs (lshr_optab, "lshr", '3');
|
init_integral_libfuncs (ashl_optab, "ashl", '3');
|
||||||
init_integral_libfuncs (smin_optab, "min", '3');
|
init_integral_libfuncs (ashr_optab, "ashr", '3');
|
||||||
init_floating_libfuncs (smin_optab, "min", '3');
|
init_integral_libfuncs (lshr_optab, "lshr", '3');
|
||||||
init_integral_libfuncs (smax_optab, "max", '3');
|
init_integral_libfuncs (smin_optab, "min", '3');
|
||||||
init_floating_libfuncs (smax_optab, "max", '3');
|
init_floating_libfuncs (smin_optab, "min", '3');
|
||||||
init_integral_libfuncs (umin_optab, "umin", '3');
|
init_integral_libfuncs (smax_optab, "max", '3');
|
||||||
init_integral_libfuncs (umax_optab, "umax", '3');
|
init_floating_libfuncs (smax_optab, "max", '3');
|
||||||
init_integral_libfuncs (neg_optab, "neg", '2');
|
init_integral_libfuncs (umin_optab, "umin", '3');
|
||||||
init_floating_libfuncs (neg_optab, "neg", '2');
|
init_integral_libfuncs (umax_optab, "umax", '3');
|
||||||
init_integral_libfuncs (negv_optab, "negv", '2');
|
init_integral_libfuncs (neg_optab, "neg", '2');
|
||||||
init_floating_libfuncs (negv_optab, "neg", '2');
|
init_floating_libfuncs (neg_optab, "neg", '2');
|
||||||
init_integral_libfuncs (one_cmpl_optab, "one_cmpl", '2');
|
init_integral_libfuncs (negv_optab, "negv", '2');
|
||||||
init_integral_libfuncs (ffs_optab, "ffs", '2');
|
init_floating_libfuncs (negv_optab, "neg", '2');
|
||||||
init_integral_libfuncs (clz_optab, "clz", '2');
|
init_integral_libfuncs (one_cmpl_optab, "one_cmpl", '2');
|
||||||
init_integral_libfuncs (ctz_optab, "ctz", '2');
|
init_integral_libfuncs (ffs_optab, "ffs", '2');
|
||||||
init_integral_libfuncs (popcount_optab, "popcount", '2');
|
init_integral_libfuncs (clz_optab, "clz", '2');
|
||||||
init_integral_libfuncs (parity_optab, "parity", '2');
|
init_integral_libfuncs (ctz_optab, "ctz", '2');
|
||||||
|
init_integral_libfuncs (popcount_optab, "popcount", '2');
|
||||||
|
init_integral_libfuncs (parity_optab, "parity", '2');
|
||||||
|
|
||||||
/* Comparison libcalls for integers MUST come in pairs, signed/unsigned. */
|
/* Comparison libcalls for integers MUST come in pairs,
|
||||||
init_integral_libfuncs (cmp_optab, "cmp", '2');
|
signed/unsigned. */
|
||||||
init_integral_libfuncs (ucmp_optab, "ucmp", '2');
|
init_integral_libfuncs (cmp_optab, "cmp", '2');
|
||||||
init_floating_libfuncs (cmp_optab, "cmp", '2');
|
init_integral_libfuncs (ucmp_optab, "ucmp", '2');
|
||||||
|
init_floating_libfuncs (cmp_optab, "cmp", '2');
|
||||||
|
|
||||||
/* EQ etc are floating point only. */
|
/* EQ etc are floating point only. */
|
||||||
init_floating_libfuncs (eq_optab, "eq", '2');
|
init_floating_libfuncs (eq_optab, "eq", '2');
|
||||||
init_floating_libfuncs (ne_optab, "ne", '2');
|
init_floating_libfuncs (ne_optab, "ne", '2');
|
||||||
init_floating_libfuncs (gt_optab, "gt", '2');
|
init_floating_libfuncs (gt_optab, "gt", '2');
|
||||||
init_floating_libfuncs (ge_optab, "ge", '2');
|
init_floating_libfuncs (ge_optab, "ge", '2');
|
||||||
init_floating_libfuncs (lt_optab, "lt", '2');
|
init_floating_libfuncs (lt_optab, "lt", '2');
|
||||||
init_floating_libfuncs (le_optab, "le", '2');
|
init_floating_libfuncs (le_optab, "le", '2');
|
||||||
init_floating_libfuncs (unord_optab, "unord", '2');
|
init_floating_libfuncs (unord_optab, "unord", '2');
|
||||||
|
|
||||||
/* Conversions. */
|
/* Conversions. */
|
||||||
init_interclass_conv_libfuncs (sfloat_optab, "float", MODE_INT, MODE_FLOAT);
|
init_interclass_conv_libfuncs (sfloat_optab, "float",
|
||||||
init_interclass_conv_libfuncs (sfix_optab, "fix", MODE_FLOAT, MODE_INT);
|
MODE_INT, MODE_FLOAT);
|
||||||
init_interclass_conv_libfuncs (ufix_optab, "fixuns", MODE_FLOAT, MODE_INT);
|
init_interclass_conv_libfuncs (sfix_optab, "fix",
|
||||||
|
MODE_FLOAT, MODE_INT);
|
||||||
|
init_interclass_conv_libfuncs (ufix_optab, "fixuns",
|
||||||
|
MODE_FLOAT, MODE_INT);
|
||||||
|
|
||||||
/* sext_optab is also used for FLOAT_EXTEND. */
|
/* sext_optab is also used for FLOAT_EXTEND. */
|
||||||
init_intraclass_conv_libfuncs (sext_optab, "extend", MODE_FLOAT, true);
|
init_intraclass_conv_libfuncs (sext_optab, "extend", MODE_FLOAT, true);
|
||||||
init_intraclass_conv_libfuncs (trunc_optab, "trunc", MODE_FLOAT, false);
|
init_intraclass_conv_libfuncs (trunc_optab, "trunc", MODE_FLOAT, false);
|
||||||
|
}
|
||||||
|
|
||||||
/* Use cabs for double complex abs, since systems generally have cabs.
|
/* Use cabs for double complex abs, since systems generally have cabs.
|
||||||
Don't define any libcall for float complex, so that cabs will be used. */
|
Don't define any libcall for float complex, so that cabs will be used. */
|
||||||
|
@ -5530,6 +5602,64 @@ init_optabs (void)
|
||||||
/* Allow the target to add more libcalls or rename some, etc. */
|
/* Allow the target to add more libcalls or rename some, etc. */
|
||||||
targetm.init_libfuncs ();
|
targetm.init_libfuncs ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
|
||||||
|
/* Print information about the current contents of the optabs on
|
||||||
|
STDERR. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
debug_optab_libfuncs (void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
int k;
|
||||||
|
|
||||||
|
/* Dump the arithmetic optabs. */
|
||||||
|
for (i = 0; i != (int) OTI_MAX; i++)
|
||||||
|
for (j = 0; j < NUM_MACHINE_MODES; ++j)
|
||||||
|
{
|
||||||
|
optab o;
|
||||||
|
struct optab_handlers *h;
|
||||||
|
|
||||||
|
o = optab_table[i];
|
||||||
|
h = &o->handlers[j];
|
||||||
|
if (h->libfunc)
|
||||||
|
{
|
||||||
|
if (GET_CODE (h->libfunc) != SYMBOL_REF)
|
||||||
|
abort ();
|
||||||
|
fprintf (stderr, "%s\t%s:\t%s\n",
|
||||||
|
GET_RTX_NAME (o->code),
|
||||||
|
GET_MODE_NAME (j),
|
||||||
|
XSTR (h->libfunc, 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dump the conversion optabs. */
|
||||||
|
for (i = 0; i < (int) CTI_MAX; ++i)
|
||||||
|
for (j = 0; j < NUM_MACHINE_MODES; ++j)
|
||||||
|
for (k = 0; k < NUM_MACHINE_MODES; ++k)
|
||||||
|
{
|
||||||
|
convert_optab o;
|
||||||
|
struct optab_handlers *h;
|
||||||
|
|
||||||
|
o = &convert_optab_table[i];
|
||||||
|
h = &o->handlers[j][k];
|
||||||
|
if (h->libfunc)
|
||||||
|
{
|
||||||
|
if (GET_CODE (h->libfunc) != SYMBOL_REF)
|
||||||
|
abort ();
|
||||||
|
fprintf (stderr, "%s\t%s\t%s:\t%s\n",
|
||||||
|
GET_RTX_NAME (o->code),
|
||||||
|
GET_MODE_NAME (j),
|
||||||
|
GET_MODE_NAME (k),
|
||||||
|
XSTR (h->libfunc, 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* DEBUG */
|
||||||
|
|
||||||
|
|
||||||
/* Generate insns to trap with code TCODE if OP1 and OP2 satisfy condition
|
/* Generate insns to trap with code TCODE if OP1 and OP2 satisfy condition
|
||||||
CODE. Return 0 on failure. */
|
CODE. Return 0 on failure. */
|
||||||
|
|
|
@ -417,6 +417,11 @@ extern int expand_twoval_unop (optab, rtx, rtx, rtx, int);
|
||||||
/* Generate code to perform an operation on two operands with two results. */
|
/* Generate code to perform an operation on two operands with two results. */
|
||||||
extern int expand_twoval_binop (optab, rtx, rtx, rtx, rtx, int);
|
extern int expand_twoval_binop (optab, rtx, rtx, rtx, rtx, int);
|
||||||
|
|
||||||
|
/* Generate code to perform an operation on two operands with two
|
||||||
|
results, using a library function. */
|
||||||
|
extern bool expand_twoval_binop_libfunc (optab, rtx, rtx, rtx, rtx,
|
||||||
|
enum rtx_code);
|
||||||
|
|
||||||
/* Expand a unary arithmetic operation given optab rtx operand. */
|
/* Expand a unary arithmetic operation given optab rtx operand. */
|
||||||
extern rtx expand_unop (enum machine_mode, optab, rtx, rtx, int);
|
extern rtx expand_unop (enum machine_mode, optab, rtx, rtx, int);
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
2004-08-09 Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
|
* gcc.dg/testsuite/gcc.dg/arm-eabi1.c: New test.
|
||||||
|
* gcc.dg/dll-2.c: Fix dg-require syntax.
|
||||||
|
* gcc.misc-tests/arm-isr.c (abort): Declare.
|
||||||
|
(exit): Likewise.
|
||||||
|
|
||||||
2004-08-10 Mark Mitchell <mark@codesourcery.com>
|
2004-08-10 Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
PR c++/16971
|
PR c++/16971
|
||||||
|
|
|
@ -0,0 +1,235 @@
|
||||||
|
/* { dg-do run { target arm*-*-symbianelf* arm*-*-eabi* } } */
|
||||||
|
/* { dg-options "" } */
|
||||||
|
|
||||||
|
/* This file tests most of the non-C++ run-time helper functions
|
||||||
|
described in Section 4 of the "Run-Time ABI for the ARM
|
||||||
|
Architecture". These are basic tests; they do not try to validate
|
||||||
|
all of the corner cases in these routines.
|
||||||
|
|
||||||
|
The functions not tested here are:
|
||||||
|
|
||||||
|
__aeabi_cdcmpeq
|
||||||
|
__aeabi_cdcmple
|
||||||
|
__aeabi_cdrcmple
|
||||||
|
__aeabi_cfcmpeq
|
||||||
|
__aeabi_cfcmple
|
||||||
|
__aeabi_cfrcmple
|
||||||
|
__aeabi_ldivmod
|
||||||
|
__aeabi_uldivmod
|
||||||
|
__aeabi_idivmod
|
||||||
|
__aeabi_uidivmod
|
||||||
|
|
||||||
|
These functions have non-standard calling conventions that would
|
||||||
|
require the use of inline assembly to test. It would be good to
|
||||||
|
add such tests, but they have not yet been implemented.
|
||||||
|
|
||||||
|
There are also no tests for the "division by zero", "unaligned
|
||||||
|
memory access", "memory copying, clearing, and setting"
|
||||||
|
functions. */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
#define decl_float(code, type) \
|
||||||
|
extern type __aeabi_ ## code ## add (type, type); \
|
||||||
|
extern type __aeabi_ ## code ## div (type, type); \
|
||||||
|
extern type __aeabi_ ## code ## mul (type, type); \
|
||||||
|
extern type __aeabi_ ## code ## neg (type); \
|
||||||
|
extern type __aeabi_ ## code ## rsub (type, type); \
|
||||||
|
extern type __aeabi_ ## code ## sub (type, type); \
|
||||||
|
extern int __aeabi_ ## code ## cmpeq (type, type); \
|
||||||
|
extern int __aeabi_ ## code ## cmplt (type, type); \
|
||||||
|
extern int __aeabi_ ## code ## cmple (type, type); \
|
||||||
|
extern int __aeabi_ ## code ## cmpge (type, type); \
|
||||||
|
extern int __aeabi_ ## code ## cmpgt (type, type); \
|
||||||
|
extern int __aeabi_ ## code ## cmpun (type, type); \
|
||||||
|
extern int __aeabi_ ## code ## 2iz (type); \
|
||||||
|
extern unsigned int __aeabi_ ## code ## 2uiz (type); \
|
||||||
|
extern long long __aeabi_ ## code ## 2lz (type); \
|
||||||
|
extern unsigned long long __aeabi_ ## code ## 2ulz (type); \
|
||||||
|
extern type __aeabi_i2 ## code (int); \
|
||||||
|
extern type __aeabi_ui2 ## code (int); \
|
||||||
|
extern type __aeabi_l2 ## code (long long); \
|
||||||
|
extern type __aeabi_ul2 ## code (unsigned long long); \
|
||||||
|
\
|
||||||
|
type code ## zero = 0.0; \
|
||||||
|
type code ## one = 1.0; \
|
||||||
|
type code ## two = 2.0; \
|
||||||
|
type code ## four = 4.0; \
|
||||||
|
type code ## minus_one = -1.0; \
|
||||||
|
type code ## minus_two = -2.0; \
|
||||||
|
type code ## minus_four = -4.0; \
|
||||||
|
type code ## epsilon = 1E-32; \
|
||||||
|
type code ## NaN = 0.0 / 0.0;
|
||||||
|
|
||||||
|
decl_float (d, double)
|
||||||
|
decl_float (f, float)
|
||||||
|
|
||||||
|
extern float __aeabi_d2f (double);
|
||||||
|
extern double __aeabi_f2d (float);
|
||||||
|
extern long long __aeabi_lmul (long long, long long);
|
||||||
|
extern long long __aeabi_llsl (long long, int);
|
||||||
|
extern long long __aeabi_llsr (long long, int);
|
||||||
|
extern long long __aeabi_lasr (long long, int);
|
||||||
|
extern int __aeabi_lcmp (long long, long long);
|
||||||
|
extern int __aeabi_ulcmp (unsigned long long, unsigned long long);
|
||||||
|
|
||||||
|
#define eq(a, b, type, abs, epsilon, format) \
|
||||||
|
{ \
|
||||||
|
type a1; \
|
||||||
|
type b1; \
|
||||||
|
\
|
||||||
|
fprintf (stderr, "%d: Test %s == %s\n", __LINE__, #a, #b); \
|
||||||
|
a1 = a; \
|
||||||
|
b1 = b; \
|
||||||
|
if (abs (a1 - b1) > epsilon) \
|
||||||
|
{ \
|
||||||
|
fprintf (stderr, "%d: " format " != " format "\n", \
|
||||||
|
__LINE__, a1, b1); \
|
||||||
|
abort (); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define ieq(a, b) eq (a, b, int, abs, 0, "%d")
|
||||||
|
#define ueq(a, b) eq (a, b, unsigned int, abs, 0, "%u")
|
||||||
|
#define leq(a, b) eq (a, b, long long, abs, 0, "%lld")
|
||||||
|
#define uleq(a, b) eq (a, b, unsigned long long, abs, 0, "%llu")
|
||||||
|
#define feq(a, b) eq (a, b, float, fabs, fepsilon, "%f")
|
||||||
|
#define deq(a, b) eq (a, b, double, fabs, depsilon, "%g")
|
||||||
|
|
||||||
|
int main () {
|
||||||
|
/* Table 2. Double-precision floating-point arithmetic. */
|
||||||
|
deq (__aeabi_dadd (dzero, done), done);
|
||||||
|
deq (__aeabi_dadd (done, done), dtwo);
|
||||||
|
deq (__aeabi_ddiv (dminus_four, dminus_two), dtwo);
|
||||||
|
deq (__aeabi_ddiv (dminus_two, dtwo), dminus_one);
|
||||||
|
deq (__aeabi_dmul (dtwo, dtwo), dfour);
|
||||||
|
deq (__aeabi_dmul (dminus_one, dminus_two), dtwo);
|
||||||
|
deq (__aeabi_dneg (dminus_one), done);
|
||||||
|
deq (__aeabi_dneg (dfour), dminus_four);
|
||||||
|
deq (__aeabi_drsub (done, dzero), dminus_one);
|
||||||
|
deq (__aeabi_drsub (dtwo, dminus_two), dminus_four);
|
||||||
|
deq (__aeabi_dsub (dzero, done), dminus_one);
|
||||||
|
deq (__aeabi_dsub (dminus_two, dtwo), dminus_four);
|
||||||
|
|
||||||
|
/* Table 3. Double-precision floating-point comparisons. */
|
||||||
|
ieq (__aeabi_dcmpeq (done, done), 1);
|
||||||
|
ieq (__aeabi_dcmpeq (done, dzero), 0);
|
||||||
|
ieq (__aeabi_dcmpeq (dNaN, dzero), 0);
|
||||||
|
ieq (__aeabi_dcmpeq (dNaN, dNaN), 0);
|
||||||
|
|
||||||
|
ieq (__aeabi_dcmplt (dzero, done), 1);
|
||||||
|
ieq (__aeabi_dcmplt (done, dzero), 0);
|
||||||
|
ieq (__aeabi_dcmplt (dzero, dzero), 0);
|
||||||
|
ieq (__aeabi_dcmplt (dzero, dNaN), 0);
|
||||||
|
ieq (__aeabi_dcmplt (dNaN, dNaN), 0);
|
||||||
|
|
||||||
|
ieq (__aeabi_dcmple (dzero, done), 1);
|
||||||
|
ieq (__aeabi_dcmple (done, dzero), 0);
|
||||||
|
ieq (__aeabi_dcmple (dzero, dzero), 1);
|
||||||
|
ieq (__aeabi_dcmple (dzero, dNaN), 0);
|
||||||
|
ieq (__aeabi_dcmple (dNaN, dNaN), 0);
|
||||||
|
|
||||||
|
ieq (__aeabi_dcmpge (dzero, done), 0);
|
||||||
|
ieq (__aeabi_dcmpge (done, dzero), 1);
|
||||||
|
ieq (__aeabi_dcmpge (dzero, dzero), 1);
|
||||||
|
ieq (__aeabi_dcmpge (dzero, dNaN), 0);
|
||||||
|
ieq (__aeabi_dcmpge (dNaN, dNaN), 0);
|
||||||
|
|
||||||
|
ieq (__aeabi_dcmpgt (dzero, done), 0);
|
||||||
|
ieq (__aeabi_dcmpgt (done, dzero), 1);
|
||||||
|
ieq (__aeabi_dcmplt (dzero, dzero), 0);
|
||||||
|
ieq (__aeabi_dcmpgt (dzero, dNaN), 0);
|
||||||
|
ieq (__aeabi_dcmpgt (dNaN, dNaN), 0);
|
||||||
|
|
||||||
|
ieq (__aeabi_dcmpun (done, done), 0);
|
||||||
|
ieq (__aeabi_dcmpun (done, dzero), 0);
|
||||||
|
ieq (__aeabi_dcmpun (dNaN, dzero), 1);
|
||||||
|
ieq (__aeabi_dcmpun (dNaN, dNaN), 1);
|
||||||
|
|
||||||
|
/* Table 4. Single-precision floating-point arithmetic. */
|
||||||
|
feq (__aeabi_fadd (fzero, fone), fone);
|
||||||
|
feq (__aeabi_fadd (fone, fone), ftwo);
|
||||||
|
feq (__aeabi_fdiv (fminus_four, fminus_two), ftwo);
|
||||||
|
feq (__aeabi_fdiv (fminus_two, ftwo), fminus_one);
|
||||||
|
feq (__aeabi_fmul (ftwo, ftwo), ffour);
|
||||||
|
feq (__aeabi_fmul (fminus_one, fminus_two), ftwo);
|
||||||
|
feq (__aeabi_fneg (fminus_one), fone);
|
||||||
|
feq (__aeabi_fneg (ffour), fminus_four);
|
||||||
|
feq (__aeabi_frsub (fone, fzero), fminus_one);
|
||||||
|
feq (__aeabi_frsub (ftwo, fminus_two), fminus_four);
|
||||||
|
feq (__aeabi_fsub (fzero, fone), fminus_one);
|
||||||
|
feq (__aeabi_fsub (fminus_two, ftwo), fminus_four);
|
||||||
|
|
||||||
|
/* Table 5. Single-precision floating-point comparisons. */
|
||||||
|
ieq (__aeabi_fcmpeq (fone, fone), 1);
|
||||||
|
ieq (__aeabi_fcmpeq (fone, fzero), 0);
|
||||||
|
ieq (__aeabi_fcmpeq (fNaN, fzero), 0);
|
||||||
|
ieq (__aeabi_fcmpeq (fNaN, fNaN), 0);
|
||||||
|
|
||||||
|
ieq (__aeabi_fcmplt (fzero, fone), 1);
|
||||||
|
ieq (__aeabi_fcmplt (fone, fzero), 0);
|
||||||
|
ieq (__aeabi_fcmplt (fzero, fzero), 0);
|
||||||
|
ieq (__aeabi_fcmplt (fzero, fNaN), 0);
|
||||||
|
ieq (__aeabi_fcmplt (fNaN, fNaN), 0);
|
||||||
|
|
||||||
|
ieq (__aeabi_fcmple (fzero, fone), 1);
|
||||||
|
ieq (__aeabi_fcmple (fone, fzero), 0);
|
||||||
|
ieq (__aeabi_fcmple (fzero, fzero), 1);
|
||||||
|
ieq (__aeabi_fcmple (fzero, fNaN), 0);
|
||||||
|
ieq (__aeabi_fcmple (fNaN, fNaN), 0);
|
||||||
|
|
||||||
|
ieq (__aeabi_fcmpge (fzero, fone), 0);
|
||||||
|
ieq (__aeabi_fcmpge (fone, fzero), 1);
|
||||||
|
ieq (__aeabi_fcmpge (fzero, fzero), 1);
|
||||||
|
ieq (__aeabi_fcmpge (fzero, fNaN), 0);
|
||||||
|
ieq (__aeabi_fcmpge (fNaN, fNaN), 0);
|
||||||
|
|
||||||
|
ieq (__aeabi_fcmpgt (fzero, fone), 0);
|
||||||
|
ieq (__aeabi_fcmpgt (fone, fzero), 1);
|
||||||
|
ieq (__aeabi_fcmplt (fzero, fzero), 0);
|
||||||
|
ieq (__aeabi_fcmpgt (fzero, fNaN), 0);
|
||||||
|
ieq (__aeabi_fcmpgt (fNaN, fNaN), 0);
|
||||||
|
|
||||||
|
ieq (__aeabi_fcmpun (fone, fone), 0);
|
||||||
|
ieq (__aeabi_fcmpun (fone, fzero), 0);
|
||||||
|
ieq (__aeabi_fcmpun (fNaN, fzero), 1);
|
||||||
|
ieq (__aeabi_fcmpun (fNaN, fNaN), 1);
|
||||||
|
|
||||||
|
/* Table 6. Floating-point to integer conversions. */
|
||||||
|
ieq (__aeabi_d2iz (dminus_one), -1);
|
||||||
|
ueq (__aeabi_d2uiz (done), 1);
|
||||||
|
leq (__aeabi_d2lz (dminus_two), -2LL);
|
||||||
|
uleq (__aeabi_d2ulz (dfour), 4LL);
|
||||||
|
ieq (__aeabi_f2iz (fminus_one), -1);
|
||||||
|
ueq (__aeabi_f2uiz (fone), 1);
|
||||||
|
leq (__aeabi_f2lz (fminus_two), -2LL);
|
||||||
|
uleq (__aeabi_f2ulz (ffour), 4LL);
|
||||||
|
|
||||||
|
/* Table 7. Conversions between floating types. */
|
||||||
|
feq (__aeabi_d2f (dtwo), ftwo);
|
||||||
|
deq (__aeabi_f2d (fminus_four), dminus_four);
|
||||||
|
|
||||||
|
/* Table 8. Integer to floating-point conversions. */
|
||||||
|
deq (__aeabi_i2d (-1), dminus_one);
|
||||||
|
deq (__aeabi_ui2d (2), dtwo);
|
||||||
|
deq (__aeabi_l2d (-1), dminus_one);
|
||||||
|
deq (__aeabi_ul2d (2ULL), dtwo);
|
||||||
|
feq (__aeabi_i2f (-1), fminus_one);
|
||||||
|
feq (__aeabi_ui2f (2), ftwo);
|
||||||
|
feq (__aeabi_l2f (-1), fminus_one);
|
||||||
|
feq (__aeabi_ul2f (2ULL), ftwo);
|
||||||
|
|
||||||
|
/* Table 9. Long long functions. */
|
||||||
|
leq (__aeabi_lmul (4LL, -1LL), -4LL);
|
||||||
|
leq (__aeabi_llsl (2LL, 1), 4LL);
|
||||||
|
leq (__aeabi_llsr (-1LL, 63), 1);
|
||||||
|
leq (__aeabi_lasr (-1LL, 63), -1);
|
||||||
|
ieq (__aeabi_lcmp (0LL, 1LL), -1);
|
||||||
|
ieq (__aeabi_lcmp (0LL, 0LL), 0);
|
||||||
|
ieq (__aeabi_lcmp (1LL, 0LL), 1);
|
||||||
|
ieq (__aeabi_ulcmp (0LL, 1LL), -1);
|
||||||
|
ieq (__aeabi_ulcmp (0LL, 0LL), 0);
|
||||||
|
ieq (__aeabi_ulcmp (1LL, 0LL), 1);
|
||||||
|
}
|
|
@ -8,7 +8,7 @@
|
||||||
In C, it's ok to redeclare a variable so this works for variables
|
In C, it's ok to redeclare a variable so this works for variables
|
||||||
and functions. In C++, it only works for functions. */
|
and functions. In C++, it only works for functions. */
|
||||||
|
|
||||||
/* { dg-require-dll } */
|
/* { dg-require-dll "" } */
|
||||||
|
|
||||||
__declspec (dllimport) int foo1 ();
|
__declspec (dllimport) int foo1 ();
|
||||||
__declspec (dllexport) int foo1 ();
|
__declspec (dllexport) int foo1 ();
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
extern void abort ();
|
||||||
|
extern void exit (int);
|
||||||
|
|
||||||
#ifndef __thumb__
|
#ifndef __thumb__
|
||||||
/* There used to be a couple of bugs in the ARM's prologue and epilogue
|
/* There used to be a couple of bugs in the ARM's prologue and epilogue
|
||||||
generation for ISR routines. The wrong epilogue instruction would be
|
generation for ISR routines. The wrong epilogue instruction would be
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2004-08-09 Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
|
* configure.ac (arm*-*-eabi*): New target.
|
||||||
|
(arm*-*-symbianelf*): Likewise.
|
||||||
|
* configure: Regenerated.
|
||||||
|
|
||||||
2004-07-24 Bernardo Innocenti <bernie@develer.com>
|
2004-07-24 Bernardo Innocenti <bernie@develer.com>
|
||||||
|
|
||||||
* internal.h (xnew, xcnew, xnewvec, xcnewvec, xobnew): Remove.
|
* internal.h (xnew, xcnew, xnewvec, xcnewvec, xobnew): Remove.
|
||||||
|
|
|
@ -969,7 +969,7 @@ esac
|
||||||
else
|
else
|
||||||
echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
|
echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
|
||||||
fi
|
fi
|
||||||
cd "$ac_popdir"
|
cd $ac_popdir
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -2428,7 +2428,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -2486,7 +2487,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -2602,7 +2604,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -2656,7 +2659,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -2701,7 +2705,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -2745,7 +2750,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -3074,7 +3080,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -3135,7 +3142,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -3449,7 +3457,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -3619,7 +3628,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -3696,7 +3706,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -3888,7 +3899,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -3948,7 +3960,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -4018,7 +4031,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -4091,7 +4105,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -4156,7 +4171,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -4220,7 +4236,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -4283,7 +4300,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -4345,7 +4363,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -4385,7 +4404,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -4441,7 +4461,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -4481,7 +4502,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -4545,7 +4567,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -4576,8 +4599,10 @@ See \`config.log' for more details." >&2;}
|
||||||
esac
|
esac
|
||||||
else
|
else
|
||||||
if test "$cross_compiling" = yes; then
|
if test "$cross_compiling" = yes; then
|
||||||
{ { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
|
{ { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
|
||||||
echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
|
See \`config.log' for more details." >&5
|
||||||
|
echo "$as_me: error: cannot run test program while cross compiling
|
||||||
|
See \`config.log' for more details." >&2;}
|
||||||
{ (exit 1); exit 1; }; }
|
{ (exit 1); exit 1; }; }
|
||||||
else
|
else
|
||||||
cat >conftest.$ac_ext <<_ACEOF
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
@ -4689,7 +4714,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -4751,7 +4777,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -4791,7 +4818,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -4847,7 +4875,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -4887,7 +4916,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -4951,7 +4981,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -4982,8 +5013,10 @@ See \`config.log' for more details." >&2;}
|
||||||
esac
|
esac
|
||||||
else
|
else
|
||||||
if test "$cross_compiling" = yes; then
|
if test "$cross_compiling" = yes; then
|
||||||
{ { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
|
{ { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
|
||||||
echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
|
See \`config.log' for more details." >&5
|
||||||
|
echo "$as_me: error: cannot run test program while cross compiling
|
||||||
|
See \`config.log' for more details." >&2;}
|
||||||
{ (exit 1); exit 1; }; }
|
{ (exit 1); exit 1; }; }
|
||||||
else
|
else
|
||||||
cat >conftest.$ac_ext <<_ACEOF
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
@ -5137,7 +5170,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -5201,7 +5235,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -5270,7 +5305,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -5339,7 +5375,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -5408,7 +5445,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -5477,7 +5515,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -5546,7 +5585,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -5615,7 +5655,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -5687,7 +5728,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -5768,7 +5810,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -5909,7 +5952,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -6045,7 +6089,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -6207,7 +6252,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -6335,7 +6381,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -6976,7 +7023,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -7026,7 +7074,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -7116,7 +7165,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
(exit $ac_status); } &&
|
(exit $ac_status); } &&
|
||||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
(eval $ac_try) 2>&5
|
(eval $ac_try) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -7180,6 +7230,8 @@ fi
|
||||||
|
|
||||||
case $target in
|
case $target in
|
||||||
alpha*-*-* | \
|
alpha*-*-* | \
|
||||||
|
arm*-*-eabi* | \
|
||||||
|
arm*-*-symbianelf* | \
|
||||||
x86_64-*-* | \
|
x86_64-*-* | \
|
||||||
ia64-*-* | \
|
ia64-*-* | \
|
||||||
hppa*64*-*-* | parisc*64*-*-* | \
|
hppa*64*-*-* | parisc*64*-*-* | \
|
||||||
|
@ -8100,6 +8152,11 @@ esac
|
||||||
*) ac_INSTALL=$ac_top_builddir$INSTALL ;;
|
*) ac_INSTALL=$ac_top_builddir$INSTALL ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
if test x"$ac_file" != x-; then
|
||||||
|
{ echo "$as_me:$LINENO: creating $ac_file" >&5
|
||||||
|
echo "$as_me: creating $ac_file" >&6;}
|
||||||
|
rm -f "$ac_file"
|
||||||
|
fi
|
||||||
# Let's still pretend it is `configure' which instantiates (i.e., don't
|
# Let's still pretend it is `configure' which instantiates (i.e., don't
|
||||||
# use $as_me), people would be surprised to read:
|
# use $as_me), people would be surprised to read:
|
||||||
# /* config.h. Generated by config.status. */
|
# /* config.h. Generated by config.status. */
|
||||||
|
@ -8138,12 +8195,6 @@ echo "$as_me: error: cannot find input file: $f" >&2;}
|
||||||
fi;;
|
fi;;
|
||||||
esac
|
esac
|
||||||
done` || { (exit 1); exit 1; }
|
done` || { (exit 1); exit 1; }
|
||||||
|
|
||||||
if test x"$ac_file" != x-; then
|
|
||||||
{ echo "$as_me:$LINENO: creating $ac_file" >&5
|
|
||||||
echo "$as_me: creating $ac_file" >&6;}
|
|
||||||
rm -f "$ac_file"
|
|
||||||
fi
|
|
||||||
_ACEOF
|
_ACEOF
|
||||||
cat >>$CONFIG_STATUS <<_ACEOF
|
cat >>$CONFIG_STATUS <<_ACEOF
|
||||||
sed "$ac_vpsub
|
sed "$ac_vpsub
|
||||||
|
|
|
@ -65,6 +65,8 @@ fi
|
||||||
m4_changequote(,)
|
m4_changequote(,)
|
||||||
case $target in
|
case $target in
|
||||||
alpha*-*-* | \
|
alpha*-*-* | \
|
||||||
|
arm*-*-eabi* | \
|
||||||
|
arm*-*-symbianelf* | \
|
||||||
x86_64-*-* | \
|
x86_64-*-* | \
|
||||||
ia64-*-* | \
|
ia64-*-* | \
|
||||||
hppa*64*-*-* | parisc*64*-*-* | \
|
hppa*64*-*-* | parisc*64*-*-* | \
|
||||||
|
|
Loading…
Reference in New Issue