diff -ru a/debian/lib64ffi5.symbols.powerpc b/debian/lib64ffi5.symbols.powerpc
--- a/debian/lib64ffi5.symbols.powerpc	2011-10-12 12:56:57.000000000 -0400
+++ b/debian/lib64ffi5.symbols.powerpc	2011-10-12 13:02:34.316107066 -0400
@@ -1,6 +1,4 @@
 libffi.so.5 lib64ffi5 #MINVER#
- NUM_FPR_ARG_REGISTERS@Base 3.0.4
- NUM_GPR_ARG_REGISTERS@Base 3.0.4
  ffi_assert@Base 3.0.4
  ffi_call@Base 3.0.4
  ffi_closure_alloc@Base 3.0.4
diff -ru a/debian/libffi5.symbols.powerpc b/debian/libffi5.symbols.powerpc
--- a/debian/libffi5.symbols.powerpc	2011-10-12 12:56:57.000000000 -0400
+++ b/debian/libffi5.symbols.powerpc	2011-10-12 13:02:08.171319475 -0400
@@ -1,6 +1,4 @@
 libffi.so.5 libffi5 #MINVER#
- NUM_FPR_ARG_REGISTERS@Base 3.0.4
- NUM_GPR_ARG_REGISTERS@Base 3.0.4
  ffi_assert@Base 3.0.4
  ffi_call@Base 3.0.4
  ffi_call_SYSV@Base 3.0.4
diff -ru a/debian/libffi5.symbols.powerpcspe b/debian/libffi5.symbols.powerpcspe
--- a/debian/libffi5.symbols.powerpcspe	1969-12-31 19:00:00.000000000 -0500
+++ b/debian/libffi5.symbols.powerpcspe	2011-10-12 13:02:48.956548274 -0400
@@ -0,0 +1,41 @@
+libffi.so.5 libffi5 #MINVER#
+ ffi_assert@Base 3.0.4
+ ffi_call@Base 3.0.4
+ ffi_call_SYSV@Base 3.0.4
+ ffi_closure_SYSV@Base 3.0.4
+ ffi_closure_alloc@Base 3.0.4
+ ffi_closure_free@Base 3.0.4
+ ffi_closure_helper_SYSV@Base 3.0.4
+ ffi_java_ptrarray_to_raw@Base 3.0.4
+ ffi_java_raw_call@Base 3.0.4
+ ffi_java_raw_size@Base 3.0.4
+ ffi_java_raw_to_ptrarray@Base 3.0.4
+ ffi_prep_args_SYSV@Base 3.0.4
+ ffi_prep_cif@Base 3.0.4
+ ffi_prep_cif_machdep@Base 3.0.4
+ ffi_prep_cif_var@Base 3.0.10~rc10
+ ffi_prep_closure@Base 3.0.4
+ ffi_prep_closure_loc@Base 3.0.4
+ ffi_prep_java_raw_closure@Base 3.0.4
+ ffi_prep_java_raw_closure_loc@Base 3.0.4
+ ffi_prep_raw_closure@Base 3.0.4
+ ffi_prep_raw_closure_loc@Base 3.0.4
+ ffi_ptrarray_to_raw@Base 3.0.4
+ ffi_raw_call@Base 3.0.4
+ ffi_raw_size@Base 3.0.4
+ ffi_raw_to_ptrarray@Base 3.0.4
+ ffi_stop_here@Base 3.0.4
+ ffi_type_double@Base 3.0.4
+ ffi_type_float@Base 3.0.4
+ ffi_type_longdouble@Base 3.0.4
+ ffi_type_pointer@Base 3.0.4
+ ffi_type_sint16@Base 3.0.4
+ ffi_type_sint32@Base 3.0.4
+ ffi_type_sint64@Base 3.0.4
+ ffi_type_sint8@Base 3.0.4
+ ffi_type_test@Base 3.0.4
+ ffi_type_uint16@Base 3.0.4
+ ffi_type_uint32@Base 3.0.4
+ ffi_type_uint64@Base 3.0.4
+ ffi_type_uint8@Base 3.0.4
+ ffi_type_void@Base 3.0.4
diff -ru a/src/powerpc/ffi.c b/src/powerpc/ffi.c
--- a/src/powerpc/ffi.c	2011-10-12 12:56:57.000000000 -0400
+++ b/src/powerpc/ffi.c	2011-10-12 12:55:49.075894970 -0400
@@ -197,6 +197,7 @@
 
       /* Now test the translated value */
       switch (typenum) {
+        double double_tmp;
 #ifndef __NO_FPRS__
 	case FFI_TYPE_FLOAT:
 	  /* With FFI_LINUX_SOFT_FLOAT floats are handled like UINT32.  */
@@ -215,8 +216,6 @@
 
 	case FFI_TYPE_DOUBLE:
 	  /* With FFI_LINUX_SOFT_FLOAT doubles are handled like UINT64.  */
-	  if (ecif->cif->abi == FFI_LINUX_SOFT_FLOAT)
-	    goto soft_double_prep;
 	  double_tmp = **p_argv.d;
 
 	  if (fparg_count >= NUM_FPR_ARG_REGISTERS)
@@ -1137,7 +1136,7 @@
 
 	  if (nf < 8)
 	    {
-	      temp = pfr->d;
+	      double temp = pfr->d;
 	      pfr->f = (float) temp;
 	      avalue[i] = pfr;
 	      nf++;
