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]

[m68k 01/13] Use pseudo opcodes for fp branch instructions


Hi,

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.


2007-01-30  Roman Zippel <zippel@linux-m68k.org>

	* config/m68k/m68k.md: replace all fbcc with fjcc

---
 gcc/config/m68k/m68k.md |   92 ++++++++++++++----------------------------------
 1 file changed, 28 insertions(+), 64 deletions(-)

Index: egcs/gcc/config/m68k/m68k.md
===================================================================
--- egcs.orig/gcc/config/m68k/m68k.md
+++ egcs/gcc/config/m68k/m68k.md
@@ -5777,10 +5777,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"
@@ -5791,10 +5788,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"
@@ -5805,10 +5799,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"
@@ -5830,10 +5821,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"
@@ -5855,10 +5843,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"
@@ -5880,10 +5865,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"
@@ -5905,7 +5887,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"
@@ -5916,7 +5898,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"
@@ -5927,7 +5909,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"
@@ -5938,7 +5920,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"
@@ -5949,7 +5931,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"
@@ -5960,7 +5942,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"
@@ -5971,7 +5953,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"
@@ -5982,7 +5964,7 @@
   "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.
@@ -5995,10 +5977,7 @@
 		      (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 ""
@@ -6009,10 +5988,7 @@
 		      (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 ""
@@ -6023,10 +5999,7 @@
 		      (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 ""
@@ -6048,10 +6021,7 @@
 		      (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 ""
@@ -6073,10 +6043,7 @@
 		      (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 ""
@@ -6098,10 +6065,7 @@
 		      (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 ""
@@ -6123,7 +6087,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"
@@ -6134,7 +6098,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"
@@ -6145,7 +6109,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"
@@ -6156,7 +6120,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"
@@ -6167,7 +6131,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"
@@ -6178,7 +6142,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"
@@ -6189,7 +6153,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"
@@ -6200,7 +6164,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]