diff -r d903d4981e33 Modules/_ctypes/libffi/src/powerpc/ffi.c --- a/Modules/_ctypes/libffi/src/powerpc/ffi.c Tue Sep 25 21:57:59 2012 +0300 +++ b/Modules/_ctypes/libffi/src/powerpc/ffi.c Tue Sep 25 16:50:58 2012 -0700 @@ -57,7 +57,7 @@ /* About the SYSV ABI. */ unsigned int NUM_GPR_ARG_REGISTERS = 8; -#ifndef __NO_FPRS__ +#if (!defined(__NO_FPRS__) && !defined(_SOFT_FLOAT)) unsigned int NUM_FPR_ARG_REGISTERS = 8; #else unsigned int NUM_FPR_ARG_REGISTERS = 0; diff -r d903d4981e33 Modules/_ctypes/libffi/src/powerpc/ffitarget.h --- a/Modules/_ctypes/libffi/src/powerpc/ffitarget.h Tue Sep 25 21:57:59 2012 +0300 +++ b/Modules/_ctypes/libffi/src/powerpc/ffitarget.h Tue Sep 25 16:50:58 2012 -0700 @@ -54,7 +54,7 @@ # ifdef POWERPC64 FFI_DEFAULT_ABI = FFI_LINUX64, # else -# if (!defined(__NO_FPRS__) && (__LDBL_MANT_DIG__ == 106)) +# if (!defined(__NO_FPRS__) && !defined(_SOFT_FLOAT) && (__LDBL_MANT_DIG__ == 106)) FFI_DEFAULT_ABI = FFI_LINUX, # else # ifdef __NO_FPRS__ diff -r d903d4981e33 Modules/_ctypes/libffi/src/powerpc/ppc_closure.S --- a/Modules/_ctypes/libffi/src/powerpc/ppc_closure.S Tue Sep 25 21:57:59 2012 +0300 +++ b/Modules/_ctypes/libffi/src/powerpc/ppc_closure.S Tue Sep 25 16:50:58 2012 -0700 @@ -54,7 +54,7 @@ stw %r9, 40(%r1) stw %r10,44(%r1) -#ifndef __NO_FPRS__ +#if (!defined(__NO_FPRS__) && !defined(_SOFT_FLOAT)) # next save fpr 1 to fpr 8 (aligned to 8) stfd %f1, 48(%r1) stfd %f2, 56(%r1)