-(pLvSys) mov r19=r0 // clear r19 for leave_syscall, no-op otherwise
- mov b0=r21
- mov ar.pfs=r26
-(pUStk) mov ar.bspstore=r23
-(p9) mov cr.ifs=r30
-(pLvSys)mov r16=r0 // clear r16 for leave_syscall, no-op otherwise
- mov cr.ipsr=r29
- mov ar.fpsr=r20
-(pLvSys)mov r17=r0 // clear r17 for leave_syscall, no-op otherwise
- mov cr.iip=r28
- ;;
-(pUStk) mov ar.rnat=r24 // must happen with RSE in lazy mode
-(pLvSys)mov r18=r0 // clear r18 for leave_syscall, no-op otherwise
- mov ar.rsc=r27
- mov ar.unat=r25
- mov pr=r31,-1
- rfi
+ mov ar.unat=r25 // M2
+(pKStk) extr.u r22=r22,21,1 // I0 extract current value of psr.pp from r22
+(pLvSys)mov r19=r0 // A clear r19 for leave_syscall, no-op otherwise
+ ;;
+(pUStk) mov ar.bspstore=r23 // M2
+(pKStk) dep r29=r22,r29,21,1 // I0 update ipsr.pp with psr.pp
+(pLvSys)mov r16=r0 // A clear r16 for leave_syscall, no-op otherwise
+ ;;
+ mov cr.ipsr=r29 // M2
+ mov ar.pfs=r26 // I0
+(pLvSys)mov r17=r0 // A clear r17 for leave_syscall, no-op otherwise
+
+(p9) mov cr.ifs=r30 // M2
+ mov b0=r21 // I0
+(pLvSys)mov r18=r0 // A clear r18 for leave_syscall, no-op otherwise
+
+ mov ar.fpsr=r20 // M2
+ mov cr.iip=r28 // M2
+ nop 0
+ ;;
+(pUStk) mov ar.rnat=r24 // M2 must happen with RSE in lazy mode
+ nop 0
+(pLvSys)mov r2=r0
+
+ mov ar.rsc=r27 // M2
+ mov pr=r31,-1 // I0
+ rfi // B