diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7366aaa65f11043e5ac7c1691232d2c7629ec7d3..ad2449dc2af1b1db2328759f0332c51cd18219a5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,16 @@
+2004-03-10  David Edelsohn  <edelsohn@gnu.org>
+
+	* config/rs6000/aix.h (TARGET_OS_CPP_BUILTINS): Rename to ...
+	(TARGET_OS_AIX_CPP_BUILTINS): this.  Conditionally define
+	__LONGDOUBLE128.
+	* config/rs6000/aix41.h (TARGET_OS_CPP_BUILTINS): Use
+	TARGET_OS_AIX_CPP_BUILTINS.
+	* config/rs6000/aix43.h (TARGET_OS_CPP_BUILTINS): Same.
+	* config/rs6000/aix51.h (TARGET_OS_CPP_BUILTINS): Same.
+	* config/rs6000/aix52.h (TARGET_OS_CPP_BUILTINS): Same.
+	* config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Revert
+	previous change.
+
 2004-03-10  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
 	* fold-const.c (tree_expr_nonnegative_p): Add more builtin cases.
diff --git a/gcc/config/rs6000/aix.h b/gcc/config/rs6000/aix.h
index f189407b3f48102cd1c5fc9ee9e6970d061d97c1..c530f988e2511fc58e5dd7bd4d8ad3f7adfb3898 100644
--- a/gcc/config/rs6000/aix.h
+++ b/gcc/config/rs6000/aix.h
@@ -58,19 +58,20 @@
 #define LINK_LIBGCC_SPECIAL_1
 
 /* Names to predefine in the preprocessor for this target machine.  */
-#define TARGET_OS_CPP_BUILTINS()         \
-  do                                     \
-    {                                    \
-      builtin_define ("_IBMR2");         \
-      builtin_define ("_POWER");         \
-      builtin_define ("_AIX");           \
-      builtin_define ("_AIX32");         \
-      builtin_define ("_LONG_LONG");     \
-      builtin_assert ("system=unix");    \
-      builtin_assert ("system=aix");     \
-      builtin_assert ("cpu=rs6000");     \
-      builtin_assert ("machine=rs6000"); \
-    }                                    \
+#define TARGET_OS_AIX_CPP_BUILTINS()		\
+  do						\
+    {						\
+      builtin_define ("_IBMR2");		\
+      builtin_define ("_POWER");		\
+      builtin_define ("_AIX");			\
+      builtin_define ("_AIX32");		\
+      builtin_define ("_AIX41");		\
+      builtin_define ("_LONG_LONG");		\
+      if (TARGET_LONG_DOUBLE_128)		\
+        builtin_define ("__LONGDOUBLE128");	\
+      builtin_assert ("system=unix");		\
+      builtin_assert ("system=aix");		\
+    }						\
   while (0)
 
 /* Define appropriate architecture macros for preprocessor depending on
diff --git a/gcc/config/rs6000/aix41.h b/gcc/config/rs6000/aix41.h
index 373c10c22ffaca7f48c9b0fd1f9539ad341510fe..b362e531bc2a9aa1423ae5f6577b7f4d36fbbf2c 100644
--- a/gcc/config/rs6000/aix41.h
+++ b/gcc/config/rs6000/aix41.h
@@ -33,18 +33,11 @@
 #define ASM_DEFAULT_SPEC "-mcom"
 
 #undef TARGET_OS_CPP_BUILTINS
-#define TARGET_OS_CPP_BUILTINS()      \
-  do                                  \
-    {                                 \
-      builtin_define ("_IBMR2");      \
-      builtin_define ("_POWER");      \
-      builtin_define ("_AIX");        \
-      builtin_define ("_AIX32");      \
-      builtin_define ("_AIX41");      \
-      builtin_define ("_LONG_LONG");  \
-      builtin_assert ("system=unix"); \
-      builtin_assert ("system=aix");  \
-    }                                 \
+#define TARGET_OS_CPP_BUILTINS()     \
+  do                                 \
+    {                                \
+      TARGET_OS_AIX_CPP_BUILTINS (); \
+    }                                \
   while (0)
 
 #undef CPP_SPEC
diff --git a/gcc/config/rs6000/aix43.h b/gcc/config/rs6000/aix43.h
index a76e694c1ee71dca295c44f9d7acb890da4f0e8b..3602bcbe081a7034bf36fb654d9099682d2c12fb 100644
--- a/gcc/config/rs6000/aix43.h
+++ b/gcc/config/rs6000/aix43.h
@@ -96,19 +96,12 @@ do {									\
 #define ASM_DEFAULT_SPEC "-mcom"
 
 #undef TARGET_OS_CPP_BUILTINS
-#define TARGET_OS_CPP_BUILTINS()      \
-  do                                  \
-    {                                 \
-      builtin_define ("_IBMR2");      \
-      builtin_define ("_POWER");      \
-      builtin_define ("_AIX");        \
-      builtin_define ("_AIX32");      \
-      builtin_define ("_AIX41");      \
-      builtin_define ("_AIX43");      \
-      builtin_define ("_LONG_LONG");  \
-      builtin_assert ("system=unix"); \
-      builtin_assert ("system=aix");  \
-    }                                 \
+#define TARGET_OS_CPP_BUILTINS()     \
+  do                                 \
+    {                                \
+      builtin_define ("_AIX43");     \
+      TARGET_OS_AIX_CPP_BUILTINS (); \
+    }                                \
   while (0)
 
 #undef CPP_SPEC
diff --git a/gcc/config/rs6000/aix51.h b/gcc/config/rs6000/aix51.h
index f5bcfd339ab49b44dd64ea8d7cb042aebd00db02..266dc699c3be8506706b0e367a3218b7689f7b47 100644
--- a/gcc/config/rs6000/aix51.h
+++ b/gcc/config/rs6000/aix51.h
@@ -96,20 +96,13 @@ do {									\
 #define ASM_DEFAULT_SPEC "-mcom"
 
 #undef TARGET_OS_CPP_BUILTINS
-#define TARGET_OS_CPP_BUILTINS()      \
-  do                                  \
-    {                                 \
-      builtin_define ("_IBMR2");      \
-      builtin_define ("_POWER");      \
-      builtin_define ("_LONG_LONG");  \
-      builtin_define ("_AIX");        \
-      builtin_define ("_AIX32");      \
-      builtin_define ("_AIX41");      \
-      builtin_define ("_AIX43");      \
-      builtin_define ("_AIX51");      \
-      builtin_assert ("system=unix"); \
-      builtin_assert ("system=aix");  \
-    }                                 \
+#define TARGET_OS_CPP_BUILTINS()     \
+  do                                 \
+    {                                \
+      builtin_define ("_AIX43");     \
+      builtin_define ("_AIX51");     \
+      TARGET_OS_AIX_CPP_BUILTINS (); \
+    }                                \
   while (0)
 
 #undef CPP_SPEC
diff --git a/gcc/config/rs6000/aix52.h b/gcc/config/rs6000/aix52.h
index 485151cd61e1bd67a5a3982e17a059128b181887..196854652d08cab0bc03e398faee5bffb3967f5d 100644
--- a/gcc/config/rs6000/aix52.h
+++ b/gcc/config/rs6000/aix52.h
@@ -83,21 +83,14 @@ do {									\
 #define ASM_DEFAULT_SPEC "-mppc"
 
 #undef TARGET_OS_CPP_BUILTINS
-#define TARGET_OS_CPP_BUILTINS()      \
-  do                                  \
-    {                                 \
-      builtin_define ("_IBMR2");      \
-      builtin_define ("_POWER");      \
-      builtin_define ("_LONG_LONG");  \
-      builtin_define ("_AIX");        \
-      builtin_define ("_AIX32");      \
-      builtin_define ("_AIX41");      \
-      builtin_define ("_AIX43");      \
-      builtin_define ("_AIX51");      \
-      builtin_define ("_AIX52");      \
-      builtin_assert ("system=unix"); \
-      builtin_assert ("system=aix");  \
-    }                                 \
+#define TARGET_OS_CPP_BUILTINS()     \
+  do                                 \
+    {                                \
+      builtin_define ("_AIX43");     \
+      builtin_define ("_AIX51");     \
+      builtin_define ("_AIX52");     \
+      TARGET_OS_AIX_CPP_BUILTINS (); \
+    }                                \
   while (0)
 
 #undef CPP_SPEC
diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
index 646b0c2e5853bd9c22ff977cfde956d0732f69c4..5d36d5d28b378d6e9b1c5484c91681e2c83db5b2 100644
--- a/gcc/config/rs6000/rs6000-c.c
+++ b/gcc/config/rs6000/rs6000-c.c
@@ -113,11 +113,7 @@ rs6000_cpu_cpp_builtins (cpp_reader *pfile)
   RS6000_CPU_CPP_ENDIAN_BUILTINS();
 
   if (TARGET_LONG_DOUBLE_128)
-    {
-      builtin_define ("__LONG_DOUBLE_128__");
-      if (TARGET_AIX && TARGET_XCOFF)
-	builtin_define ("__LONGDOUBLE128");
-    }
+    builtin_define ("__LONG_DOUBLE_128__");
 
   switch (rs6000_current_abi)
     {