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]

[PATCH]: Fix HC11/HC12 on 64-bit hosts (PR 16925)


Hi!

This patch fixes the HC11/HC12 target on 64-bit hosts.
Committed on 3_4, 4_0 and mainline.

Stephane

2005-05-08  Stephane Carrez  <stcarrez@nerim.fr>

	PR target/16925
	* config/m68hc11/m68hc11.c (m68hc11_gen_highpart): Handle split of
	64-bit constants on 64-bit hosts.
	(m68hc11_split_logical): Simplify.
	(m68hc11_split_move): Likewise.
Index: config/m68hc11/m68hc11.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/m68hc11/m68hc11.c,v
retrieving revision 1.114
diff -u -p -r1.114 m68hc11.c
--- config/m68hc11/m68hc11.c	23 Apr 2005 21:28:27 -0000	1.114
+++ config/m68hc11/m68hc11.c	8 May 2005 10:15:41 -0000
@@ -1929,6 +1929,10 @@ m68hc11_gen_highpart (enum machine_mode 
 	{
 	  return gen_int_mode (val >> 16, HImode);
 	}
+      else if (mode == SImode)
+       {
+         return gen_int_mode (val >> 32, SImode);
+       }
     }
   if (mode == QImode && D_REG_P (x))
     return gen_rtx_REG (mode, HARD_A_REGNUM);
@@ -2814,15 +2818,7 @@ m68hc11_split_move (rtx to, rtx from, rt
   high_to = m68hc11_gen_highpart (mode, to);
 
   low_from = m68hc11_gen_lowpart (mode, from);
-  if (mode == SImode && GET_CODE (from) == CONST_INT)
-    {
-      if (INTVAL (from) >= 0)
-	high_from = const0_rtx;
-      else
-	high_from = constm1_rtx;
-    }
-  else
-    high_from = m68hc11_gen_highpart (mode, from);
+  high_from = m68hc11_gen_highpart (mode, from);
 
   if (offset)
     {
@@ -3006,26 +3002,8 @@ m68hc11_split_logical (enum machine_mode
   low[2] = m68hc11_gen_lowpart (mode, operands[2]);
 
   high[0] = m68hc11_gen_highpart (mode, operands[0]);
-
-  if (mode == SImode && GET_CODE (operands[1]) == CONST_INT)
-    {
-      if (INTVAL (operands[1]) >= 0)
-	high[1] = const0_rtx;
-      else
-	high[1] = constm1_rtx;
-    }
-  else
-    high[1] = m68hc11_gen_highpart (mode, operands[1]);
-
-  if (mode == SImode && GET_CODE (operands[2]) == CONST_INT)
-    {
-      if (INTVAL (operands[2]) >= 0)
-	high[2] = const0_rtx;
-      else
-	high[2] = constm1_rtx;
-    }
-  else
-    high[2] = m68hc11_gen_highpart (mode, operands[2]);
+  high[1] = m68hc11_gen_highpart (mode, operands[1]);
+  high[2] = m68hc11_gen_highpart (mode, operands[2]);
 
   low[3] = operands[3];
   high[3] = operands[3];

Attachment: signature.asc
Description: OpenPGP digital signature


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