mend
diff --git a/ChangeLog b/ChangeLog
index 9f7a1a4..cb1ef37 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2013-02-09  Anthony Green <green@moxielogic.com>
+
+	* testsuite/libffi.call/negint.c: Remove forced -O2.
+	* testsuite/libffi.call/many2.c (foo): Remove GCCism.
+	* testsuite/libffi.call/ffitest.h: Add default PRIuPTR definition.
+
+	* src/sparc/v8.S (ffi_closure_v8): Import ancient ulonglong
+	closure return type fix developed by Martin v. Löwis for cpython
+	fork.
+
 2013-02-08  Andreas Tobler  <andreast@fgznet.ch>
 
 	* src/powerpc/ffi.c (ffi_prep_cif_machdep): Fix small struct
diff --git a/README b/README
index 4a47864..f5abd43 100644
--- a/README
+++ b/README
@@ -43,7 +43,7 @@
 For specific configuration details and testing status, please
 refer to the wiki page here:
 
- http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.11
+ http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.12
 
 At the time of release, the following basic configurations have been
 tested:
@@ -61,19 +61,21 @@
 | HPPA            | HPUX             | GCC                     |
 | IA-64           | Linux            | GCC                     |
 | M68K            | FreeMiNT         | GCC                     |
+| M68K            | Linux	     | GCC                     |
 | M68K            | RTEMS            | GCC                     |
 | MicroBlaze      | Linux            | GCC                     |
 | MIPS            | IRIX             | GCC                     |
 | MIPS            | Linux            | GCC                     |
 | MIPS            | RTEMS            | GCC                     |
 | MIPS64          | Linux            | GCC                     |
-| PowerPC 32-bit  | AIX 6.1.0.0      | IBM XL C/C++, V11.1     |
-| PowerPC 32-bit  | AIX 7.1.1.0      | IBM XL C/C++, V11.1     |
+| PowerPC 32-bit  | AIX              | IBM XL C                |
+| PowerPC 64-bit  | AIX              | IBM XL C                |
 | PowerPC         | AMIGA            | GCC                     |
 | PowerPC         | Linux            | GCC                     |
 | PowerPC         | Mac OSX          | GCC                     |
 | PowerPC         | FreeBSD          | GCC                     |
-| PowerPC64       | Linux            | GCC                     |
+| PowerPC 64-bit  | FreeBSD          | GCC                     |
+| PowerPC 64-bit  | Linux            | GCC                     |
 | S390            | Linux            | GCC                     |
 | S390X           | Linux            | GCC                     |
 | SPARC           | Linux            | GCC                     |
@@ -84,6 +86,7 @@
 | SPARC64         | Solaris          | Oracle Solaris Studio C |
 | TILE-Gx/TILEPro | Linux            | GCC                     |
 | X86             | FreeBSD          | GCC                     |
+| X86             | GNU HURD         | GCC                     |
 | X86             | Interix          | GCC                     |
 | X86             | kFreeBSD         | GCC                     |
 | X86             | Linux            | GCC                     |
@@ -145,7 +148,7 @@
 Configure has many other options. Use "configure --help" to see them all.
 
 Once configure has finished, type "make". Note that you must be using
-GNU make.  You can ftp GNU make from prep.ai.mit.edu:/pub/gnu.
+GNU make.  You can ftp GNU make from ftp.gnu.org:/pub/gnu/make .
 
 To ensure that libffi is working as advertised, type "make check".
 This will require that you have DejaGNU installed.
diff --git a/testsuite/libffi.call/cls_ulonglong.c b/testsuite/libffi.call/cls_ulonglong.c
index 235ab44..62f2cae 100644
--- a/testsuite/libffi.call/cls_ulonglong.c
+++ b/testsuite/libffi.call/cls_ulonglong.c
@@ -11,7 +11,7 @@
 static void cls_ret_ulonglong_fn(ffi_cif* cif __UNUSED__, void* resp,
 				 void** args, void* userdata __UNUSED__)
 {
-  *(unsigned long long *)resp=  *(unsigned long long *)args[0];
+  *(unsigned long long *)resp= 0xfffffffffffffffLL ^ *(unsigned long long *)args[0];
 
   printf("%" PRIuLL ": %" PRIuLL "\n",*(unsigned long long *)args[0],
 	 *(unsigned long long *)(resp));
@@ -34,14 +34,14 @@
 		     &ffi_type_uint64, cl_arg_types) == FFI_OK);
   CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_ulonglong_fn, NULL, code)  == FFI_OK);
   res = (*((cls_ret_ulonglong)code))(214LL);
-  /* { dg-output "214: 214" } */
+  /* { dg-output "214: 1152921504606846761" } */
   printf("res: %" PRIdLL "\n", res);
-  /* { dg-output "\nres: 214" } */
+  /* { dg-output "\nres: 1152921504606846761" } */
 
   res = (*((cls_ret_ulonglong)code))(9223372035854775808LL);
-  /* { dg-output "\n9223372035854775808: 9223372035854775808" } */
+  /* { dg-output "\n9223372035854775808: 8070450533247928831" } */
   printf("res: %" PRIdLL "\n", res);
-  /* { dg-output "\nres: 9223372035854775808" } */
+  /* { dg-output "\nres: 8070450533247928831" } */
 
   exit(0);
 }