This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: An unreviewed m68k patch


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]