Patchwork [PING] : RFA: Fix bootstrap/44335

login
register
mail settings
Submitter Joern Rennecke
Date July 12, 2010, 4:55 a.m.
Message ID <20100712005557.eh2b62mq88go8wo0-nzlynne@webmail.spamcop.net>
Download mbox | patch
Permalink /patch/58569/
State New
Headers show

Comments

Joern Rennecke - July 12, 2010, 4:55 a.m.
----- Forwarded message from amylaar@spamcop.net -----
     Date: Thu, 01 Jul 2010 16:34:21 -0400
     From: Joern Rennecke <amylaar@spamcop.net>
Reply-To: Joern Rennecke <amylaar@spamcop.net>
  Subject: RFA: Fix bootstrap/44335
       To: gcc-patches@gcc.gnu.org

Tested building all-gcc configured with --enable-werror-always on
i686-pc-linux-gnu X arm-eabi with gcc (GCC) 4.6.0 20100630 (experimental).
Currently boostrapping / regtesting on i686-pc-linux-gnu.


----- End forwarded message -----

As expected, there bootstrapping went fine and there were no new regressions.
2010-07-01  Joern Rennecke  <joern.rennecke@embecosm.com>

	PR bootstrap/44335
gcc:
	* targhooks.c (targhook_words_big_endian): New function.
	(targhook_float_words_big_endian): Likewise.
	* targhooks.h (targhook_words_big_endian): Declare.
	(targhook_float_words_big_endian): Likewise.
	* target.def (words_big_endian, float_words_big_endian): New hooks.
gcc/java:
	* jfc-parse.c (target.h): Include.
	(handle_const): Use targetm.words_big_endian and
	targetm.float_words_big_endian.
	(get_constant): Use targetm.float_words_big_endian.

Patch

Index: targhooks.c
===================================================================
--- targhooks.c	(revision 161664)
+++ targhooks.c	(working copy)
@@ -418,6 +418,19 @@  default_scalar_mode_supported_p (enum ma
     }
 }
 
+/* Make some target macros useable by target-independent code.  */
+bool
+targhook_words_big_endian (void)
+{
+  return !!WORDS_BIG_ENDIAN;
+}
+
+bool
+targhook_float_words_big_endian (void)
+{
+  return !!FLOAT_WORDS_BIG_ENDIAN;
+}
+
 /* True if the target supports decimal floating point.  */
 
 bool
Index: targhooks.h
===================================================================
--- targhooks.h	(revision 161664)
+++ targhooks.h	(working copy)
@@ -68,6 +68,8 @@  extern void default_print_operand_addres
 extern bool default_print_operand_punct_valid_p (unsigned char);
 
 extern bool default_scalar_mode_supported_p (enum machine_mode);
+extern bool targhook_words_big_endian (void);
+extern bool targhook_float_words_big_endian (void);
 extern bool default_decimal_float_supported_p (void);
 extern bool default_fixed_point_supported_p (void);
 
Index: java/jcf-parse.c
===================================================================
--- java/jcf-parse.c	(revision 161664)
+++ java/jcf-parse.c	(working copy)
@@ -42,6 +42,7 @@  The Free Software Foundation is independ
 #include "cgraph.h"
 #include "vecprim.h"
 #include "bitmap.h"
+#include "target.h"
 
 #ifdef HAVE_LOCALE_H
 #include <locale.h>
@@ -557,12 +558,12 @@  handle_constant (JCF *jcf, int index, en
 
     case CONSTANT_Long:
       index = handle_long_constant (jcf, cpool, CONSTANT_Long, index,
-				    WORDS_BIG_ENDIAN);
+				    targetm.words_big_endian ());
       break;
       
     case CONSTANT_Double:
       index = handle_long_constant (jcf, cpool, CONSTANT_Double, index,
-				    FLOAT_WORDS_BIG_ENDIAN);
+				    targetm.float_words_big_endian ());
       break;
 
     case CONSTANT_Float:
@@ -1073,7 +1074,7 @@  get_constant (JCF *jcf, int index)
 	hi = JPOOL_UINT (jcf, index);
 	lo = JPOOL_UINT (jcf, index+1);
 
-	if (FLOAT_WORDS_BIG_ENDIAN)
+	if (targetm.float_words_big_endian ())
 	  buf[0] = hi, buf[1] = lo;
 	else
 	  buf[0] = lo, buf[1] = hi;
Index: target.def
===================================================================
--- target.def	(revision 161664)
+++ target.def	(working copy)
@@ -967,6 +967,22 @@  DEFHOOK
  bool, (const_tree record_type),
  hook_bool_const_tree_false)
 
+/* For now this is only an interface to FLOAT_WORDS_BIG_ENDIAN for
+   target-independent code like the front ends, need performance testing
+   before switching completely to the target hook.  */
+DEFHOOK_UNDOC
+(words_big_endian,
+ "",
+ bool, (void),
+ targhook_words_big_endian)
+
+/* Likewise.  */
+DEFHOOK_UNDOC
+(float_words_big_endian,
+ "",
+ bool, (void),
+ targhook_float_words_big_endian)
+
 /* True if the target supports decimal floating point.  */
 DEFHOOK
 (decimal_float_supported_p,