@@ -240,4 +240,20 @@ static inline void enter_pstate(void)
load_psw_mask(mask);
}
+static inline int stsi(void *addr, int fc, int sel1, int sel2)
+{
+ register int r0 asm("0") = (fc << 28) | sel1;
+ register int r1 asm("1") = sel2;
+ int cc;
+
+ asm volatile(
+ "stsi 0(%3)\n"
+ "ipm %[cc]\n"
+ "srl %[cc],28\n"
+ : "+d" (r0), [cc] "=d" (cc)
+ : "d" (r1), "a" (addr)
+ : "cc", "memory");
+ return cc;
+}
+
#endif
@@ -70,24 +70,6 @@ static void test_set(void)
skey.str.acc == ret.str.acc && skey.str.fp == ret.str.fp);
}
-static inline int stsi(void *addr, int fc, int sel1, int sel2)
-{
- register int r0 asm("0") = (fc << 28) | sel1;
- register int r1 asm("1") = sel2;
- int rc = 0;
-
- asm volatile(
- " stsi 0(%3)\n"
- " jz 0f\n"
- " lhi %1,-1\n"
- "0:\n"
- : "+d" (r0), "+d" (rc)
- : "d" (r1), "a" (addr)
- : "cc", "memory");
-
- return rc;
-}
-
/* Returns true if we are running under z/VM 6.x */
static bool check_for_zvm6(void)
{