diff options
author | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-01-27 01:43:17 +0000 |
---|---|---|
committer | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-01-27 01:43:17 +0000 |
commit | be2828ce3a45f1a520b7d3e932b1fead7462ec7e (patch) | |
tree | e7daf0f28ecb5da9660b21aee68e6919f846c183 /gcc/config/m68k | |
parent | 6bc988cda5e493c3e632a2d82be7ea8763a618e2 (diff) | |
download | gcc-be2828ce3a45f1a520b7d3e932b1fead7462ec7e.tar.gz |
Merge in gcc2 snapshot 19980929. See gcc/ChangeLog and gcc/FSFChangeLog for
details.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@24879 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/m68k')
-rw-r--r-- | gcc/config/m68k/m68k.md | 203 | ||||
-rw-r--r-- | gcc/config/m68k/vxm68k.h | 11 |
2 files changed, 85 insertions, 129 deletions
diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md index 83d5c83d05e..236bd9a0062 100644 --- a/gcc/config/m68k/m68k.md +++ b/gcc/config/m68k/m68k.md @@ -1675,8 +1675,7 @@ (define_insn "extendqidi2" [(set (match_operand:DI 0 "general_operand" "=d") - (sign_extend:DI - (match_operand:QI 1 "general_operand" "rm")))] + (sign_extend:DI (match_operand:QI 1 "general_operand" "dm")))] "" "* { @@ -5675,8 +5674,12 @@ return output_scc_di (operands[1], operands[2], operands[3], operands[0]); } ") +;; Note that operand 0 of an SCC insn is supported in the hardware as +;; memory, but we cannot allow it to be in memory in case the address +;; needs to be reloaded. + (define_expand "seq" - [(set (match_operand:QI 0 "general_operand" "") + [(set (match_operand:QI 0 "register_operand" "") (eq:QI (cc0) (const_int 0)))] "" " @@ -5689,25 +5692,16 @@ }") (define_insn "" - [(set (match_operand:QI 0 "general_operand" "=dm") - (eq:QI (cc0) (const_int 0)))] - "! TARGET_5200" - "* - cc_status = cc_prev_status; - OUTPUT_JUMP (\"seq %0\", \"fseq %0\", \"seq %0\"); -") - -(define_insn "" - [(set (match_operand:QI 0 "general_operand" "=d") + [(set (match_operand:QI 0 "register_operand" "=d") (eq:QI (cc0) (const_int 0)))] - "TARGET_5200" + "" "* cc_status = cc_prev_status; OUTPUT_JUMP (\"seq %0\", \"fseq %0\", \"seq %0\"); ") (define_expand "sne" - [(set (match_operand:QI 0 "general_operand" "") + [(set (match_operand:QI 0 "register_operand" "") (ne:QI (cc0) (const_int 0)))] "" " @@ -5720,25 +5714,16 @@ }") (define_insn "" - [(set (match_operand:QI 0 "general_operand" "=dm") - (ne:QI (cc0) (const_int 0)))] - "! TARGET_5200" - "* - cc_status = cc_prev_status; - OUTPUT_JUMP (\"sne %0\", \"fsne %0\", \"sne %0\"); -") - -(define_insn "" - [(set (match_operand:QI 0 "general_operand" "=d") + [(set (match_operand:QI 0 "register_operand" "=d") (ne:QI (cc0) (const_int 0)))] - "TARGET_5200" + "" "* cc_status = cc_prev_status; OUTPUT_JUMP (\"sne %0\", \"fsne %0\", \"sne %0\"); ") (define_expand "sgt" - [(set (match_operand:QI 0 "general_operand" "") + [(set (match_operand:QI 0 "register_operand" "") (gt:QI (cc0) (const_int 0)))] "" " @@ -5751,45 +5736,30 @@ }") (define_insn "" - [(set (match_operand:QI 0 "general_operand" "=dm") - (gt:QI (cc0) (const_int 0)))] - "! TARGET_5200" - "* - cc_status = cc_prev_status; - OUTPUT_JUMP (\"sgt %0\", \"fsgt %0\", 0); -") - -(define_insn "" - [(set (match_operand:QI 0 "general_operand" "=d") + [(set (match_operand:QI 0 "register_operand" "=d") (gt:QI (cc0) (const_int 0)))] - "TARGET_5200" + "" "* cc_status = cc_prev_status; OUTPUT_JUMP (\"sgt %0\", \"fsgt %0\", 0); ") (define_expand "sgtu" - [(set (match_operand:QI 0 "general_operand" "") + [(set (match_operand:QI 0 "register_operand" "") (gtu:QI (cc0) (const_int 0)))] "" "") (define_insn "" - [(set (match_operand:QI 0 "general_operand" "=dm") - (gtu:QI (cc0) (const_int 0)))] - "! TARGET_5200" - "* cc_status = cc_prev_status; - return \"shi %0\"; ") - -(define_insn "" - [(set (match_operand:QI 0 "general_operand" "=d") + [(set (match_operand:QI 0 "register_operand" "=d") (gtu:QI (cc0) (const_int 0)))] - "TARGET_5200" - "* cc_status = cc_prev_status; - return \"shi %0\"; ") + "" + "* + cc_status = cc_prev_status; + return \"shi %0\"; ") (define_expand "slt" - [(set (match_operand:QI 0 "general_operand" "") + [(set (match_operand:QI 0 "register_operand" "") (lt:QI (cc0) (const_int 0)))] "" " @@ -5802,41 +5772,29 @@ }") (define_insn "" - [(set (match_operand:QI 0 "general_operand" "=dm") - (lt:QI (cc0) (const_int 0)))] - "! TARGET_5200" - "* cc_status = cc_prev_status; - OUTPUT_JUMP (\"slt %0\", \"fslt %0\", \"smi %0\"); ") - -(define_insn "" - [(set (match_operand:QI 0 "general_operand" "=d") + [(set (match_operand:QI 0 "register_operand" "=d") (lt:QI (cc0) (const_int 0)))] - "TARGET_5200" - "* cc_status = cc_prev_status; - OUTPUT_JUMP (\"slt %0\", \"fslt %0\", \"smi %0\"); ") + "" + "* + cc_status = cc_prev_status; + OUTPUT_JUMP (\"slt %0\", \"fslt %0\", \"smi %0\"); ") (define_expand "sltu" - [(set (match_operand:QI 0 "general_operand" "") + [(set (match_operand:QI 0 "register_operand" "") (ltu:QI (cc0) (const_int 0)))] "" "") (define_insn "" - [(set (match_operand:QI 0 "general_operand" "=dm") - (ltu:QI (cc0) (const_int 0)))] - "! TARGET_5200" - "* cc_status = cc_prev_status; - return \"scs %0\"; ") - -(define_insn "" - [(set (match_operand:QI 0 "general_operand" "=d") + [(set (match_operand:QI 0 "register_operand" "=d") (ltu:QI (cc0) (const_int 0)))] - "TARGET_5200" - "* cc_status = cc_prev_status; - return \"scs %0\"; ") + "" + "* + cc_status = cc_prev_status; + return \"scs %0\"; ") (define_expand "sge" - [(set (match_operand:QI 0 "general_operand" "") + [(set (match_operand:QI 0 "register_operand" "") (ge:QI (cc0) (const_int 0)))] "" " @@ -5849,41 +5807,29 @@ }") (define_insn "" - [(set (match_operand:QI 0 "general_operand" "=dm") - (ge:QI (cc0) (const_int 0)))] - "! TARGET_5200" - "* cc_status = cc_prev_status; - OUTPUT_JUMP (\"sge %0\", \"fsge %0\", \"spl %0\"); ") - -(define_insn "" - [(set (match_operand:QI 0 "general_operand" "=d") + [(set (match_operand:QI 0 "register_operand" "=d") (ge:QI (cc0) (const_int 0)))] - "TARGET_5200" - "* cc_status = cc_prev_status; - OUTPUT_JUMP (\"sge %0\", \"fsge %0\", \"spl %0\"); ") + "" + "* + cc_status = cc_prev_status; + OUTPUT_JUMP (\"sge %0\", \"fsge %0\", \"spl %0\"); ") (define_expand "sgeu" - [(set (match_operand:QI 0 "general_operand" "") + [(set (match_operand:QI 0 "register_operand" "") (geu:QI (cc0) (const_int 0)))] "" "") (define_insn "" - [(set (match_operand:QI 0 "general_operand" "=dm") - (geu:QI (cc0) (const_int 0)))] - "! TARGET_5200" - "* cc_status = cc_prev_status; - return \"scc %0\"; ") - -(define_insn "" - [(set (match_operand:QI 0 "general_operand" "=d") + [(set (match_operand:QI 0 "register_operand" "=d") (geu:QI (cc0) (const_int 0)))] - "TARGET_5200" - "* cc_status = cc_prev_status; - return \"scc %0\"; ") + "" + "* + cc_status = cc_prev_status; + return \"scc %0\"; ") (define_expand "sle" - [(set (match_operand:QI 0 "general_operand" "") + [(set (match_operand:QI 0 "register_operand" "") (le:QI (cc0) (const_int 0)))] "" " @@ -5896,42 +5842,27 @@ }") (define_insn "" - [(set (match_operand:QI 0 "general_operand" "=dm") - (le:QI (cc0) (const_int 0)))] - "! TARGET_5200" - "* - cc_status = cc_prev_status; - OUTPUT_JUMP (\"sle %0\", \"fsle %0\", 0); -") - -(define_insn "" - [(set (match_operand:QI 0 "general_operand" "=d") + [(set (match_operand:QI 0 "register_operand" "=d") (le:QI (cc0) (const_int 0)))] - "TARGET_5200" + "" "* cc_status = cc_prev_status; OUTPUT_JUMP (\"sle %0\", \"fsle %0\", 0); ") (define_expand "sleu" - [(set (match_operand:QI 0 "general_operand" "") + [(set (match_operand:QI 0 "register_operand" "") (leu:QI (cc0) (const_int 0)))] "" "") (define_insn "" - [(set (match_operand:QI 0 "general_operand" "=dm") - (leu:QI (cc0) (const_int 0)))] - "! TARGET_5200" - "* cc_status = cc_prev_status; - return \"sls %0\"; ") - -(define_insn "" - [(set (match_operand:QI 0 "general_operand" "=d") + [(set (match_operand:QI 0 "register_operand" "=d") (leu:QI (cc0) (const_int 0)))] - "TARGET_5200" - "* cc_status = cc_prev_status; - return \"sls %0\"; ") + "" + "* + cc_status = cc_prev_status; + return \"sls %0\"; ") ;; Basic conditional jump instructions. @@ -7504,7 +7435,7 @@ (define_insn "extendsfxf2" [(set (match_operand:XF 0 "general_operand" "=fm,f") - (float_extend:XF (match_operand:SF 1 "general_operand" "f,m")))] + (float_extend:XF (match_operand:SF 1 "general_operand" "f,rmF")))] "TARGET_68881" "* { @@ -7521,7 +7452,15 @@ return \"f%$move%.x %1,%0\"; } if (FP_REG_P (operands[0])) - return \"f%$move%.s %f1,%0\"; + { + if (FP_REG_P (operands[1])) + return \"f%$move%.x %1,%0\"; + else if (ADDRESS_REG_P (operands[1])) + return \"move%.l %1,%-\;f%$move%.s %+,%0\"; + else if (GET_CODE (operands[1]) == CONST_DOUBLE) + return output_move_const_single (operands); + return \"f%$move%.s %f1,%0\"; + } return \"fmove%.x %f1,%0\"; }") @@ -7529,7 +7468,7 @@ (define_insn "extenddfxf2" [(set (match_operand:XF 0 "general_operand" "=fm,f") (float_extend:XF - (match_operand:DF 1 "general_operand" "f,m")))] + (match_operand:DF 1 "general_operand" "f,rmE")))] "TARGET_68881" "* { @@ -7546,7 +7485,19 @@ return \"fmove%.x %1,%0\"; } if (FP_REG_P (operands[0])) - return \"f%&move%.d %f1,%0\"; + { + if (REG_P (operands[1])) + { + rtx xoperands[2]; + xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1); + output_asm_insn (\"move%.l %1,%-\", xoperands); + output_asm_insn (\"move%.l %1,%-\", operands); + return \"f%&move%.d %+,%0\"; + } + if (GET_CODE (operands[1]) == CONST_DOUBLE) + return output_move_const_double (operands); + return \"f%&move%.d %f1,%0\"; + } return \"fmove%.x %f1,%0\"; }") diff --git a/gcc/config/m68k/vxm68k.h b/gcc/config/m68k/vxm68k.h index 063ded86a63..86884db9719 100644 --- a/gcc/config/m68k/vxm68k.h +++ b/gcc/config/m68k/vxm68k.h @@ -1,5 +1,5 @@ /* Definitions of target machine for GNU compiler. Vxworks m68k version. - Copyright (C) 1994, 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1994, 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of GNU CC. @@ -82,9 +82,9 @@ Unrecognized value in TARGET_CPU_DEFAULT. #define LIB_SPEC "" -/* Provide required defaults for linker -e. */ +/* Provide required defaults for linker. */ -#define LINK_SPEC "%{!nostdlib:%{!r*:%{!e*:-e start}}}" +#define LINK_SPEC "-r" /* VxWorks provides the functionality of crt0.o and friends itself. */ @@ -99,3 +99,8 @@ Unrecognized value in TARGET_CPU_DEFAULT. /* GCC is the primary compiler for VxWorks, so we don't need this. */ #undef PCC_STATIC_STRUCT_RETURN + +/* Restrict use of 128 bit floating-point by default since VxWorks doesn't + have the proper accuracy routines for that size; this is not done because + the hardware doesn't support it, despite the name. */ +#define WIDEST_HARDWARE_FP_SIZE 64 |