Index: soft/giet_vm/giet_common/mips32_registers.h
===================================================================
--- soft/giet_vm/giet_common/mips32_registers.h	(revision 267)
+++ soft/giet_vm/giet_common/mips32_registers.h	(revision 268)
@@ -53,6 +53,5 @@
 #define CP0_EPC        $14
 #define CP0_PROCID     $15,1
-#define CP0_SCHED      $22,0
-#define CP0_SCHED_EXT  $22,1
+#define CP0_SCHED      $4,2
 
 /* CP2 registers */
Index: soft/giet_vm/giet_common/utils.c
===================================================================
--- soft/giet_vm/giet_common/utils.c	(revision 267)
+++ soft/giet_vm/giet_common/utils.c	(revision 268)
@@ -103,5 +103,5 @@
 {
     unsigned int ret;
-    asm volatile( "mfc0    %0,   $22    \n" : "=r"(ret) );
+    asm volatile("mfc0      %0,     $4, 2\n" : "=r"(ret) );
     return ret;
 }
@@ -112,5 +112,5 @@
 {
     unsigned int ret;
-    asm volatile( "mfc2    %0,        $0" : "=r"(ret));
+    asm volatile("mfc2      %0,     $0" : "=r"(ret));
     return ret;
 }
@@ -121,5 +121,5 @@
 {
     unsigned int ret;
-    asm volatile("mfc0    %0,        $14" : "=r"(ret));
+    asm volatile("mfc0      %0,     $14" : "=r"(ret));
     return ret;
 }
@@ -130,5 +130,5 @@
 {
     unsigned int ret;
-    asm volatile( "mfc0    %0,        $8" : "=r"(ret));
+    asm volatile("mfc0      %0,     $8" : "=r"(ret));
     return ret;
 }
@@ -139,5 +139,5 @@
 {
     unsigned int ret;
-    asm volatile("mfc0    %0,        $13" : "=r"(ret));
+    asm volatile("mfc0      %0,     $13" : "=r"(ret));
     return ret;
 }
@@ -148,5 +148,5 @@
 {
     unsigned int ret;
-    asm volatile( "mfc0    %0,        $12" : "=r"(ret));
+    asm volatile("mfc0      %0,     $12" : "=r"(ret));
     return ret;
 }
@@ -156,5 +156,5 @@
 inline void _set_sr(unsigned int val) 
 {
-    asm volatile( "mtc0    %0,        $12" ::"r" (val));
+    asm volatile("mtc0      %0,     $12" ::"r" (val));
 }
 //////////////////////////////////////////////////////////////////////////////////
@@ -164,5 +164,5 @@
 {
     unsigned int ret;
-    asm volatile ("mfc0    %0,       $15, 1":"=r" (ret));
+    asm volatile ("mfc0     %0,     $15, 1":"=r" (ret));
     return (ret & 0x3FF);
 }
@@ -174,5 +174,5 @@
 {
     unsigned int ret;
-    asm volatile ("mfc0   %0,        $9":"=r" (ret));
+    asm volatile ("mfc0     %0,     $9":"=r" (ret));
     return ret;
 }
@@ -216,5 +216,5 @@
 inline void _set_mmu_ptpr(unsigned int val) 
 {
-    asm volatile ("mtc2  %0, $0"::"r" (val));
+    asm volatile ("mtc2     %0,     $0"::"r" (val));
 }
 //////////////////////////////////////////////////////////////////////////////
@@ -223,5 +223,5 @@
 inline void _set_mmu_mode(unsigned int val) 
 {
-    asm volatile ("mtc2  %0, $1"::"r" (val));
+    asm volatile ("mtc2     %0,     $1"::"r" (val));
 }
 //////////////////////////////////////////////////////////////////////////////
@@ -231,5 +231,5 @@
 inline void _set_sched(unsigned int val) 
 {
-    asm volatile ("mtc0  %0, $22"::"r" (val));
+    asm volatile ("mtc0     %0,     $4, 2"::"r" (val));
 }
 
@@ -300,4 +300,6 @@
 {
     register unsigned int delay = ( _get_proctime() ^ _get_procid() << 4) & 0xFF;
+
+    if (delay == 0) delay++;
 
     asm volatile (
@@ -312,6 +314,8 @@
             "_lock_loop:             \n"
             "addi $4,    $4,    -1   \n" /* $4 <= $4 - 1 */
-            "beqz $4,    _lock_loop  \n" /* test end delay */
+            "bnez $4,    _lock_loop  \n" /* test end delay */
+            "nop                     \n"
             "j           _lock_llsc  \n" /* retry */
+            "nop                     \n"
             "_lock_ok:               \n"
             :
Index: soft/giet_vm/giet_common/utils.h
===================================================================
--- soft/giet_vm/giet_common/utils.h	(revision 267)
+++ soft/giet_vm/giet_common/utils.h	(revision 268)
@@ -116,4 +116,5 @@
 extern void         _set_mmu_mode(unsigned int value);
 extern void         _set_sched(unsigned int value);
+extern void         _set_sr(unsigned int value);
 
 ///////////////////////////////////////////////////////////////////////////////////
