This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: An unreviewed m68k patch
- From: Roman Zippel <zippel at linux-m68k dot org>
- To: Kazu Hirata <kazu at codesourcery dot com>
- Cc: gcc-patches at gcc dot gnu dot org, law at redhat dot com, Andreas Schwab <schwab at suse dot de>
- Date: Sat, 8 Sep 2007 02:13:08 +0200 (CEST)
- Subject: Re: An unreviewed m68k patch
- References: <200709072300.l87N0f1E016963@sparrowhawk.codesourcery.com>
Hi,
[PATCH] Use pseudo opcodes for fp branch instructions
gcc has problems to generate conditional fp jumps in very large
functions, as it always uses the 16bit variant. The easy solution is to
use the pseudo opcodes gas provides as we do with normal jump opcodes
and leave the work to gas.
This removes also many MOTOROLA tests, as the used jump opcodes weren't
really Motorola ops, but all of them are gas pseudo opcodes and this
uses now the officially documented variant.
200x-xx-xx Roman Zippel <zippel@linux-m68k.org>
* config/m68k/m68k.md(beq,bne,bgt,blt,bge,ble,bordered,bunordered,
buneq,bunge,bungt,bunle,bunlt,bltgt,beq_rev,bne_rev,bgt_rev,
blt_rev,bge_rev,ble_rev,bordered_rev,bunordered_rev,buneq_rev,
bunge_rev,bungt_rev,bunle_rev,bunlt_rev, bltgt_rev): replace
all fbcc with fjcc.
---
gcc/config/m68k/m68k.md | 112 ++++++++++++++++--------------------------------
1 file changed, 38 insertions(+), 74 deletions(-)
Index: gcc/gcc/config/m68k/m68k.md
===================================================================
--- gcc.orig/gcc/config/m68k/m68k.md
+++ gcc/gcc/config/m68k/m68k.md
@@ -6081,10 +6081,7 @@
(pc)))]
""
{
- if (MOTOROLA)
- OUTPUT_JUMP ("jbeq %l0", "fbeq %l0", "jbeq %l0");
- else
- OUTPUT_JUMP ("jeq %l0", "fjeq %l0", "jeq %l0");
+ OUTPUT_JUMP ("jeq %l0", "fjeq %l0", "jeq %l0");
})
(define_insn "bne"
@@ -6095,10 +6092,7 @@
(pc)))]
""
{
- if (MOTOROLA)
- OUTPUT_JUMP ("jbne %l0", "fbne %l0", "jbne %l0");
- else
- OUTPUT_JUMP ("jne %l0", "fjne %l0", "jne %l0");
+ OUTPUT_JUMP ("jne %l0", "fjne %l0", "jne %l0");
})
(define_insn "bgt"
@@ -6109,10 +6103,7 @@
(pc)))]
""
{
- if (MOTOROLA)
- OUTPUT_JUMP ("jbgt %l0", "fbgt %l0", 0);
- else
- OUTPUT_JUMP ("jgt %l0", "fjgt %l0", 0);
+ OUTPUT_JUMP ("jgt %l0", "fjgt %l0", 0);
})
(define_insn "bgtu"
@@ -6134,10 +6125,7 @@
(pc)))]
""
{
- if (MOTOROLA)
- OUTPUT_JUMP ("jblt %l0", "fblt %l0", "jbmi %l0");
- else
- OUTPUT_JUMP ("jlt %l0", "fjlt %l0", "jmi %l0");
+ OUTPUT_JUMP ("jlt %l0", "fjlt %l0", "jmi %l0");
})
(define_insn "bltu"
@@ -6159,10 +6147,7 @@
(pc)))]
""
{
- if (MOTOROLA)
- OUTPUT_JUMP ("jbge %l0", "fbge %l0", "jbpl %l0");
- else
- OUTPUT_JUMP ("jge %l0", "fjge %l0", "jpl %l0");
+ OUTPUT_JUMP ("jge %l0", "fjge %l0", "jpl %l0");
})
(define_insn "bgeu"
@@ -6184,10 +6169,7 @@
(pc)))]
""
{
- if (MOTOROLA)
- OUTPUT_JUMP ("jble %l0", "fble %l0", 0);
- else
- OUTPUT_JUMP ("jle %l0", "fjle %l0", 0);
+ OUTPUT_JUMP ("jle %l0", "fjle %l0", 0);
})
(define_insn "bleu"
@@ -6209,7 +6191,7 @@
"TARGET_HARD_FLOAT"
{
gcc_assert (cc_prev_status.flags & CC_IN_68881);
- return MOTOROLA ? "fbor %l0" : "fjor %l0";
+ return "fjor %l0";
})
(define_insn "bunordered"
@@ -6220,7 +6202,7 @@
"TARGET_HARD_FLOAT"
{
gcc_assert (cc_prev_status.flags & CC_IN_68881);
- return MOTOROLA ? "fbun %l0" : "fjun %l0";
+ return "fjun %l0";
})
(define_insn "buneq"
@@ -6231,7 +6213,7 @@
"TARGET_HARD_FLOAT"
{
gcc_assert (cc_prev_status.flags & CC_IN_68881);
- return MOTOROLA ? "fbueq %l0" : "fjueq %l0";
+ return "fjueq %l0";
})
(define_insn "bunge"
@@ -6242,7 +6224,7 @@
"TARGET_HARD_FLOAT"
{
gcc_assert (cc_prev_status.flags & CC_IN_68881);
- return MOTOROLA ? "fbuge %l0" : "fjuge %l0";
+ return "fjuge %l0";
})
(define_insn "bungt"
@@ -6253,7 +6235,7 @@
"TARGET_HARD_FLOAT"
{
gcc_assert (cc_prev_status.flags & CC_IN_68881);
- return MOTOROLA ? "fbugt %l0" : "fjugt %l0";
+ return "fjugt %l0";
})
(define_insn "bunle"
@@ -6264,7 +6246,7 @@
"TARGET_HARD_FLOAT"
{
gcc_assert (cc_prev_status.flags & CC_IN_68881);
- return MOTOROLA ? "fbule %l0" : "fjule %l0";
+ return "fjule %l0";
})
(define_insn "bunlt"
@@ -6275,7 +6257,7 @@
"TARGET_HARD_FLOAT"
{
gcc_assert (cc_prev_status.flags & CC_IN_68881);
- return MOTOROLA ? "fbult %l0" : "fjult %l0";
+ return "fjult %l0";
})
(define_insn "bltgt"
@@ -6286,12 +6268,12 @@
"TARGET_HARD_FLOAT"
{
gcc_assert (cc_prev_status.flags & CC_IN_68881);
- return MOTOROLA ? "fbogl %l0" : "fjogl %l0";
+ return "fjogl %l0";
})
;; Negated conditional jump instructions.
-(define_insn ""
+(define_insn "*beq_rev"
[(set (pc)
(if_then_else (eq (cc0)
(const_int 0))
@@ -6299,13 +6281,10 @@
(label_ref (match_operand 0 "" ""))))]
""
{
- if (MOTOROLA)
- OUTPUT_JUMP ("jbne %l0", "fbne %l0", "jbne %l0");
- else
- OUTPUT_JUMP ("jne %l0", "fjne %l0", "jne %l0");
+ OUTPUT_JUMP ("jne %l0", "fjne %l0", "jne %l0");
})
-(define_insn ""
+(define_insn "*bne_rev"
[(set (pc)
(if_then_else (ne (cc0)
(const_int 0))
@@ -6313,13 +6292,10 @@
(label_ref (match_operand 0 "" ""))))]
""
{
- if (MOTOROLA)
- OUTPUT_JUMP ("jbeq %l0", "fbeq %l0", "jbeq %l0");
- else
- OUTPUT_JUMP ("jeq %l0", "fjeq %l0", "jeq %l0");
+ OUTPUT_JUMP ("jeq %l0", "fjeq %l0", "jeq %l0");
})
-(define_insn ""
+(define_insn "*bgt_rev"
[(set (pc)
(if_then_else (gt (cc0)
(const_int 0))
@@ -6327,13 +6303,10 @@
(label_ref (match_operand 0 "" ""))))]
""
{
- if (MOTOROLA)
- OUTPUT_JUMP ("jble %l0", "fbngt %l0", 0);
- else
- OUTPUT_JUMP ("jle %l0", "fjngt %l0", 0);
+ OUTPUT_JUMP ("jle %l0", "fjngt %l0", 0);
})
-(define_insn ""
+(define_insn ""
[(set (pc)
(if_then_else (gtu (cc0)
(const_int 0))
@@ -6344,7 +6317,7 @@
return MOTOROLA ? "jbls %l0" : "jls %l0";
})
-(define_insn ""
+(define_insn "*blt_rev"
[(set (pc)
(if_then_else (lt (cc0)
(const_int 0))
@@ -6352,13 +6325,10 @@
(label_ref (match_operand 0 "" ""))))]
""
{
- if (MOTOROLA)
- OUTPUT_JUMP ("jbge %l0", "fbnlt %l0", "jbpl %l0");
- else
- OUTPUT_JUMP ("jge %l0", "fjnlt %l0", "jpl %l0");
+ OUTPUT_JUMP ("jge %l0", "fjnlt %l0", "jpl %l0");
})
-(define_insn ""
+(define_insn ""
[(set (pc)
(if_then_else (ltu (cc0)
(const_int 0))
@@ -6369,7 +6339,7 @@
return MOTOROLA ? "jbcc %l0" : "jcc %l0";
})
-(define_insn ""
+(define_insn "*bge_rev"
[(set (pc)
(if_then_else (ge (cc0)
(const_int 0))
@@ -6377,13 +6347,10 @@
(label_ref (match_operand 0 "" ""))))]
""
{
- if (MOTOROLA)
- OUTPUT_JUMP ("jblt %l0", "fbnge %l0", "jbmi %l0");
- else
- OUTPUT_JUMP ("jlt %l0", "fjnge %l0", "jmi %l0");
+ OUTPUT_JUMP ("jlt %l0", "fjnge %l0", "jmi %l0");
})
-(define_insn ""
+(define_insn ""
[(set (pc)
(if_then_else (geu (cc0)
(const_int 0))
@@ -6394,7 +6361,7 @@
return MOTOROLA ? "jbcs %l0" : "jcs %l0";
})
-(define_insn ""
+(define_insn "*ble_rev"
[(set (pc)
(if_then_else (le (cc0)
(const_int 0))
@@ -6402,13 +6369,10 @@
(label_ref (match_operand 0 "" ""))))]
""
{
- if (MOTOROLA)
- OUTPUT_JUMP ("jbgt %l0", "fbnle %l0", 0);
- else
- OUTPUT_JUMP ("jgt %l0", "fjnle %l0", 0);
+ OUTPUT_JUMP ("jgt %l0", "fjnle %l0", 0);
})
-(define_insn ""
+(define_insn ""
[(set (pc)
(if_then_else (leu (cc0)
(const_int 0))
@@ -6427,7 +6391,7 @@
"TARGET_HARD_FLOAT"
{
gcc_assert (cc_prev_status.flags & CC_IN_68881);
- return MOTOROLA ? "fbun %l0" : "fjun %l0";
+ return "fjun %l0";
})
(define_insn "*bunordered_rev"
@@ -6438,7 +6402,7 @@
"TARGET_HARD_FLOAT"
{
gcc_assert (cc_prev_status.flags & CC_IN_68881);
- return MOTOROLA ? "fbor %l0" : "fjor %l0";
+ return "fjor %l0";
})
(define_insn "*buneq_rev"
@@ -6449,7 +6413,7 @@
"TARGET_HARD_FLOAT"
{
gcc_assert (cc_prev_status.flags & CC_IN_68881);
- return MOTOROLA ? "fbogl %l0" : "fjogl %l0";
+ return "fjogl %l0";
})
(define_insn "*bunge_rev"
@@ -6460,7 +6424,7 @@
"TARGET_HARD_FLOAT"
{
gcc_assert (cc_prev_status.flags & CC_IN_68881);
- return MOTOROLA ? "fbolt %l0" : "fjolt %l0";
+ return "fjolt %l0";
})
(define_insn "*bungt_rev"
@@ -6471,7 +6435,7 @@
"TARGET_HARD_FLOAT"
{
gcc_assert (cc_prev_status.flags & CC_IN_68881);
- return MOTOROLA ? "fbole %l0" : "fjole %l0";
+ return "fjole %l0";
})
(define_insn "*bunle_rev"
@@ -6482,7 +6446,7 @@
"TARGET_HARD_FLOAT"
{
gcc_assert (cc_prev_status.flags & CC_IN_68881);
- return MOTOROLA ? "fbogt %l0" : "fjogt %l0";
+ return "fjogt %l0";
})
(define_insn "*bunlt_rev"
@@ -6493,7 +6457,7 @@
"TARGET_HARD_FLOAT"
{
gcc_assert (cc_prev_status.flags & CC_IN_68881);
- return MOTOROLA ? "fboge %l0" : "fjoge %l0";
+ return "fjoge %l0";
})
(define_insn "*bltgt_rev"
@@ -6504,7 +6468,7 @@
"TARGET_HARD_FLOAT"
{
gcc_assert (cc_prev_status.flags & CC_IN_68881);
- return MOTOROLA ? "fbueq %l0" : "fjueq %l0";
+ return "fjueq %l0";
})
;; Unconditional and other jump instructions