static unsigned long raw_copy_from_user_key(void *to, const void __user *from,
unsigned long size, unsigned long key)
{
- unsigned long tmp1, tmp2;
+ unsigned long val, rem;
union oac spec = {
.oac2.key = key,
.oac2.as = PSW_BITS_AS_SECONDARY,
.oac2.a = 1,
};
- tmp1 = -4096UL;
+ val = -4096UL;
asm volatile(
" lr 0,%[spec]\n"
"0: mvcos 0(%[to]),0(%[from]),%[size]\n"
"1: jz 5f\n"
- " algr %[size],%[tmp1]\n"
- " slgr %[from],%[tmp1]\n"
- " slgr %[to],%[tmp1]\n"
+ " algr %[size],%[val]\n"
+ " slgr %[from],%[val]\n"
+ " slgr %[to],%[val]\n"
" j 0b\n"
- "2: la %[tmp2],4095(%[from])\n"/* tmp2 = from + 4095 */
- " nr %[tmp2],%[tmp1]\n" /* tmp2 = (from + 4095) & -4096 */
- " slgr %[tmp2],%[from]\n"
- " clgr %[size],%[tmp2]\n" /* copy crosses next page boundary? */
+ "2: la %[rem],4095(%[from])\n" /* rem = from + 4095 */
+ " nr %[rem],%[val]\n" /* rem = (from + 4095) & -4096 */
+ " slgr %[rem],%[from]\n"
+ " clgr %[size],%[rem]\n" /* copy crosses next page boundary? */
" jnh 6f\n"
- "3: mvcos 0(%[to]),0(%[from]),%[tmp2]\n"
- "4: slgr %[size],%[tmp2]\n"
+ "3: mvcos 0(%[to]),0(%[from]),%[rem]\n"
+ "4: slgr %[size],%[rem]\n"
" j 6f\n"
"5: slgr %[size],%[size]\n"
"6:\n"
EX_TABLE(3b, 6b)
EX_TABLE(4b, 6b)
: [size] "+a" (size), [from] "+a" (from), [to] "+a" (to),
- [tmp1] "+a" (tmp1), [tmp2] "=a" (tmp2)
+ [val] "+a" (val), [rem] "=a" (rem)
: [spec] "d" (spec.val)
: "cc", "memory", "0");
return size;
static unsigned long raw_copy_to_user_key(void __user *to, const void *from,
unsigned long size, unsigned long key)
{
- unsigned long tmp1, tmp2;
+ unsigned long val, rem;
union oac spec = {
.oac1.key = key,
.oac1.as = PSW_BITS_AS_SECONDARY,
.oac1.a = 1,
};
- tmp1 = -4096UL;
+ val = -4096UL;
asm volatile(
" lr 0,%[spec]\n"
"0: mvcos 0(%[to]),0(%[from]),%[size]\n"
"1: jz 5f\n"
- " algr %[size],%[tmp1]\n"
- " slgr %[to],%[tmp1]\n"
- " slgr %[from],%[tmp1]\n"
+ " algr %[size],%[val]\n"
+ " slgr %[to],%[val]\n"
+ " slgr %[from],%[val]\n"
" j 0b\n"
- "2: la %[tmp2],4095(%[to])\n" /* tmp2 = to + 4095 */
- " nr %[tmp2],%[tmp1]\n" /* tmp2 = (to + 4095) & -4096 */
- " slgr %[tmp2],%[to]\n"
- " clgr %[size],%[tmp2]\n" /* copy crosses next page boundary? */
+ "2: la %[rem],4095(%[to])\n" /* rem = to + 4095 */
+ " nr %[rem],%[val]\n" /* rem = (to + 4095) & -4096 */
+ " slgr %[rem],%[to]\n"
+ " clgr %[size],%[rem]\n" /* copy crosses next page boundary? */
" jnh 6f\n"
- "3: mvcos 0(%[to]),0(%[from]),%[tmp2]\n"
- "4: slgr %[size],%[tmp2]\n"
+ "3: mvcos 0(%[to]),0(%[from]),%[rem]\n"
+ "4: slgr %[size],%[rem]\n"
" j 6f\n"
"5: slgr %[size],%[size]\n"
"6:\n"
EX_TABLE(3b, 6b)
EX_TABLE(4b, 6b)
: [size] "+a" (size), [to] "+a" (to), [from] "+a" (from),
- [tmp1] "+a" (tmp1), [tmp2] "=a" (tmp2)
+ [val] "+a" (val), [rem] "=a" (rem)
: [spec] "d" (spec.val)
: "cc", "memory", "0");
return size;
unsigned long __clear_user(void __user *to, unsigned long size)
{
- unsigned long tmp1, tmp2;
+ unsigned long val, rem;
union oac spec = {
.oac1.as = PSW_BITS_AS_SECONDARY,
.oac1.a = 1,
};
- tmp1 = -4096UL;
+ val = -4096UL;
asm volatile(
" lr 0,%[spec]\n"
"0: mvcos 0(%[to]),0(%[zeropg]),%[size]\n"
"1: jz 5f\n"
- " algr %[size],%[tmp1]\n"
- " slgr %[to],%[tmp1]\n"
+ " algr %[size],%[val]\n"
+ " slgr %[to],%[val]\n"
" j 0b\n"
- "2: la %[tmp2],4095(%[to])\n" /* tmp2 = to + 4095 */
- " nr %[tmp2],%[tmp1]\n" /* tmp2 = (to + 4095) & -4096 */
- " slgr %[tmp2],%[to]\n"
- " clgr %[size],%[tmp2]\n" /* copy crosses next page boundary? */
+ "2: la %[rem],4095(%[to])\n" /* rem = to + 4095 */
+ " nr %[rem],%[val]\n" /* rem = (to + 4095) & -4096 */
+ " slgr %[rem],%[to]\n"
+ " clgr %[size],%[rem]\n" /* copy crosses next page boundary? */
" jnh 6f\n"
- "3: mvcos 0(%[to]),0(%[zeropg]),%[tmp2]\n"
- "4: slgr %[size],%[tmp2]\n"
+ "3: mvcos 0(%[to]),0(%[zeropg]),%[rem]\n"
+ "4: slgr %[size],%[rem]\n"
" j 6f\n"
"5: slgr %[size],%[size]\n"
"6:\n"
EX_TABLE(3b, 6b)
EX_TABLE(4b, 6b)
: [size] "+&a" (size), [to] "+&a" (to),
- [tmp1] "+a" (tmp1), [tmp2] "=&a" (tmp2)
+ [val] "+a" (val), [rem] "=&a" (rem)
: [zeropg] "a" (empty_zero_page), [spec] "d" (spec.val)
: "cc", "memory", "0");
return size;