diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 430f2932c04d2f5984dcd747238e04f69cc9f3c3..7790596163b75fb4fb675962722eed34560be45f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2011-03-22  Nathan Froyd  <froydnj@codesourcery.com>
+
+	* libgcc2.c (__lshrdi3, __ashldi3, __ashrdi3): Use W_TYPE_SIZE.
+	(__ffsDI2): Likewise.
+
 2011-03-22  Richard Henderson  <rth@redhat.com>
 
 	* config/alpha/alpha.c (direct_return): Use TARGET_ABI_OSF instead
@@ -539,6 +544,21 @@
 
 	* dwarf2out.c (dwarf2out_frame_debug_expr) [rule 11]: Handle post_dec.
 
+2011-03-22  Nathan Froyd  <froydnj@codesourcery.com>
+
+	* system.h (FUNCTION_ARG, FUNCTION_INCOMING_ARG): Poison.
+	(FUNCTION_ARG_ADVANCE): Likewise.
+	* tm.texi.in: Change references to them to hook references.
+	* tm.texi: Regenerate.
+	* targhooks.c (default_function_arg): Eliminate check for target
+	macro.
+	(default_function_incoming_arg): Likewise.
+	(default_function_arg_advance): Likewise.
+	* target.def (function_arg, function_incoming_arg): Change to
+	DEFHOOK.
+	(function_arg_advance): Likewise.
+	* target-def.h: Eliminate FUNCTION_INCOMING_ARG check.
+
 2011-03-22  Nathan Froyd  <froydnj@codesourcery.com>
 
 	* tree.c (build_call_1): New function.
diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c
index 78d53f02aee81b8bafb8bd6fe9b4e4414955b6cb..5312a10b11017653bd3376f32d1480a8c033619f 100644
--- a/gcc/libgcc2.c
+++ b/gcc/libgcc2.c
@@ -407,7 +407,7 @@ __lshrdi3 (DWtype u, shift_count_type b)
     return u;
 
   const DWunion uu = {.ll = u};
-  const shift_count_type bm = (sizeof (Wtype) * BITS_PER_UNIT) - b;
+  const shift_count_type bm = W_TYPE_SIZE - b;
   DWunion w;
 
   if (bm <= 0)
@@ -435,7 +435,7 @@ __ashldi3 (DWtype u, shift_count_type b)
     return u;
 
   const DWunion uu = {.ll = u};
-  const shift_count_type bm = (sizeof (Wtype) * BITS_PER_UNIT) - b;
+  const shift_count_type bm = W_TYPE_SIZE - b;
   DWunion w;
 
   if (bm <= 0)
@@ -463,13 +463,13 @@ __ashrdi3 (DWtype u, shift_count_type b)
     return u;
 
   const DWunion uu = {.ll = u};
-  const shift_count_type bm = (sizeof (Wtype) * BITS_PER_UNIT) - b;
+  const shift_count_type bm = W_TYPE_SIZE - b;
   DWunion w;
 
   if (bm <= 0)
     {
       /* w.s.high = 1..1 or 0..0 */
-      w.s.high = uu.s.high >> (sizeof (Wtype) * BITS_PER_UNIT - 1);
+      w.s.high = uu.s.high >> (W_TYPE_SIZE - 1);
       w.s.low = uu.s.high >> -bm;
     }
   else
@@ -534,7 +534,7 @@ __ffsDI2 (DWtype u)
   if (uu.s.low != 0)
     word = uu.s.low, add = 0;
   else if (uu.s.high != 0)
-    word = uu.s.high, add = BITS_PER_UNIT * sizeof (Wtype);
+    word = uu.s.high, add = W_TYPE_SIZE;
   else
     return 0;