Patchwork Ping: RFA: Fix bootstrap/44335

login
register
mail settings
Submitter Joern Rennecke
Date Nov. 3, 2010, 10:08 a.m.
Message ID <20101103060843.kiz3abo0hhs8840k-nzlynne@webmail.spamcop.net>
Download mbox | patch
Permalink /patch/69963/
State New
Headers show

Comments

Joern Rennecke - Nov. 3, 2010, 10:08 a.m.
Quoting Joern Rennecke <amylaar@spamcop.net>:

> 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.

Ping?
This patch removes a target macro dependency of the java frontend.
The patch still applies, bootstraps and regtests
fine in trunk revision 166174 on i686-pc-linux-gnu.

AFAICT this needs a middle-end and a java review.
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_constant): Use targetm.words_big_endian and
	targetm.float_words_big_endian.
	(get_constant): Use targetm.float_words_big_endian.
Richard Guenther - Nov. 3, 2010, 10:14 a.m.
On Wed, 3 Nov 2010, Joern Rennecke wrote:

> Quoting Joern Rennecke <amylaar@spamcop.net>:
> 
> > 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.
> 
> Ping?
> This patch removes a target macro dependency of the java frontend.
> The patch still applies, bootstraps and regtests
> fine in trunk revision 166174 on i686-pc-linux-gnu.
> 
> AFAICT this needs a middle-end and a java review.

The middle-end changes are ok.  I think the Java changes then
become obvious.

Thanks,
Richard.

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,