diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3340e062fcb346d176217834e3e2e824ffeb27e1..cee23d33b41bb099eb2063fb804fa379fff8b222 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2004-04-16  Kazuhiro Inaoka <inaoka dot kazuhiro at renesas dot com>
+
+	* config/m32r/m32r.h (BIG_ENDIAN_BIT): Deleted to fix endian
+	bug.
+	(TARGET_LITTLE_ENDIAN, TARGET_BIG_ENDIAN,
+	TARGET_DEFAULT): Changed. Ditto.
+	(LITTLE_ENDIAN_BIT, TARGET_CPU_DEFAULT,
+	TARGET_ENDIAN_DEFAULT): Added. Ditto.
+	* config/m32r/little.h (TARGET_LITTLE_ENDIAN): Deleted.
+	(TARGET_ENDIAN_DEFAULT): Added.
+
 2004-04-15  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
 	* builtins.def (BUILT_IN_ISDIGIT, BUILT_IN_ISXDIGIT): Mark with
diff --git a/gcc/config/m32r/little.h b/gcc/config/m32r/little.h
index 793cf24386324008e6b20949d446e3c1e01232e5..9c1b0b5a72cad99d8c9614c65a79d5f90432ebc1 100644
--- a/gcc/config/m32r/little.h
+++ b/gcc/config/m32r/little.h
@@ -1,5 +1,5 @@
 /* Definitions for Renesas little endian M32R cpu.
-   Copyright (C) 2003
+   Copyright (C) 2003, 2004
    Free Software Foundation, Inc.
 
    This file is part of GCC.
@@ -19,7 +19,7 @@
    Free Software Foundation, 59 Temple Place - Suite 330, Boston,
    MA 02111-1307, USA.  */
 
-#define TARGET_LITTLE_ENDIAN (!TARGET_BIG_ENDIAN)
+#define TARGET_ENDIAN_DEFAULT	LITTLE_ENDIAN_BIT
 
 #define CPP_ENDIAN_SPEC \
   " %{mbe:-D__BIG_ENDIAN__} %{mbig-endian:-D__BIG_ENDIAN__}" \
diff --git a/gcc/config/m32r/m32r.h b/gcc/config/m32r/m32r.h
index f2574ac4dd33b7d821414cdbdcc6b0140ced5662..add59b3c036e5f7c26e49228c75b0c3713b9a1a2 100644
--- a/gcc/config/m32r/m32r.h
+++ b/gcc/config/m32r/m32r.h
@@ -246,14 +246,19 @@ extern int target_flags;
 #undef  TARGET_M32R
 #define TARGET_M32R             (! TARGET_M32RX && ! TARGET_M32R2)
 
-/* Big Endian Flag.  */
-#define BIG_ENDIAN_BIT 		(1 << 7)
-#define TARGET_BIG_ENDIAN       (target_flags & BIG_ENDIAN_BIT)
-
 /* Little Endian Flag.  */
-#define LITTLE_ENDIAN_BIT 	(1 <<  8)
-#ifndef TARGET_LITTLE_ENDIAN 	/* See little.h */
-#define TARGET_LITTLE_ENDIAN    (target_flags & LITTLE_ENDIAN_BIT)
+#define LITTLE_ENDIAN_BIT 	(1 << 7)
+#define TARGET_LITTLE_ENDIAN	(target_flags & LITTLE_ENDIAN_BIT)
+#define TARGET_BIG_ENDIAN       (! TARGET_LITTLE_ENDIAN)
+
+/* This defaults us to big-endian.  */
+#ifndef TARGET_ENDIAN_DEFAULT
+#define TARGET_ENDIAN_DEFAULT 0
+#endif
+
+/* This defaults us to m32r.  */
+#ifndef TARGET_CPU_DEFAULT
+#define TARGET_CPU_DEFAULT 0
 #endif
 
 /* Macro to define tables used to set the flags.
@@ -267,7 +272,7 @@ extern int target_flags;
 #endif
 
 #ifndef TARGET_DEFAULT
-#define TARGET_DEFAULT 0
+#define TARGET_DEFAULT (TARGET_CPU_DEFAULT | TARGET_ENDIAN_DEFAULT)
 #endif
 
 #define TARGET_SWITCHES							\