Index: /branches/reconfiguration/softs/libs/io.h
===================================================================
--- /branches/reconfiguration/softs/libs/io.h	(revision 856)
+++ /branches/reconfiguration/softs/libs/io.h	(revision 857)
@@ -22,10 +22,11 @@
     uint32_t lsb = paddr & ((1ULL << CLUSTER_OFFSET_BITS)-1);
 
-    asm volatile("mtc2   %2,     $24   \n"  /* DATA_PADDR_EXT <= msb */
+    asm volatile("mfc2   $8,     $24   \n"  /* t0 <= DATA_PADDR_EXT  */
+                 "mtc2   %2,     $24   \n"  /* DATA_PADDR_EXT <= msb */
                  "lw     %0,     0(%1) \n"  /* value <= *paddr       */
-                 "mtc2   $0,     $24   \n"  /* DATA_PADDR_EXT <= 0   */
+                 "mtc2   $8,     $24   \n"  /* DATA_PADDR_EXT <= 0   */
                  : "=r"(value)
                  : "r"(lsb), "r"(msb)
-                 : "memory");
+                 : "$8", "memory");
 
     return value;
@@ -42,11 +43,12 @@
     uint32_t lsb = paddr & ((1ULL << CLUSTER_OFFSET_BITS)-1);
 
-    asm volatile("mtc2   %2,     $24   \n"  /* DATA_PADDR_EXT <= msb */
+    asm volatile("mfc2   $8,     $24   \n"  /* t0 <= DATA_PADDR_EXT  */
+                 "mtc2   %2,     $24   \n"  /* DATA_PADDR_EXT <= msb */
                  "sw     %0,     0(%1) \n"  /* value <= *paddr       */
-                 "mtc2   $0,     $24   \n"  /* DATA_PADDR_EXT <= 0   */
+                 "mtc2   $8,     $24   \n"  /* DATA_PADDR_EXT <= 0   */
                  "sync                 \n"
                  : /* no outputs */
                  : "r"(value), "r"(lsb), "r"(msb)
-                 : "memory");
+                 : "$8", "memory");
 }
 
