From 10679e4d9848a04694eb99ec7390a6585d1b7ca9 Mon Sep 17 00:00:00 2001
From: Heiko Carstens <hca@linux.ibm.com>
Date: Fri, 24 Mar 2023 15:00:18 +0100
Subject: [PATCH] s390/uaccess: use symbolic names for inline assembly operands

Improve readability of the uaccess inline assemblies by using symbolic
names for all input and output operands.

Except for debug sections the output of "objdump -Dr" of the uaccess object
file is identical before/after this change.

Reviewed-by: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
---
 arch/s390/lib/uaccess.c | 105 +++++++++++++++++++++-------------------
 1 file changed, 54 insertions(+), 51 deletions(-)

diff --git a/arch/s390/lib/uaccess.c b/arch/s390/lib/uaccess.c
index d44214072779e..0ebd522ccd6f6 100644
--- a/arch/s390/lib/uaccess.c
+++ b/arch/s390/lib/uaccess.c
@@ -44,25 +44,26 @@ static unsigned long raw_copy_from_user_key(void *to, const void __user *from,
 
 	tmp1 = -4096UL;
 	asm volatile(
-		"   lr	  0,%[spec]\n"
-		"0: mvcos 0(%2),0(%1),%0\n"
-		"6: jz    4f\n"
-		"1: algr  %0,%3\n"
-		"   slgr  %1,%3\n"
-		"   slgr  %2,%3\n"
-		"   j     0b\n"
-		"2: la    %4,4095(%1)\n"/* %4 = ptr + 4095 */
-		"   nr    %4,%3\n"	/* %4 = (ptr + 4095) & -4096 */
-		"   slgr  %4,%1\n"
-		"   clgr  %0,%4\n"	/* copy crosses next page boundary? */
-		"   jnh   5f\n"
-		"3: mvcos 0(%2),0(%1),%4\n"
-		"7: slgr  %0,%4\n"
-		"   j     5f\n"
-		"4: slgr  %0,%0\n"
+		"	lr	0,%[spec]\n"
+		"0:	mvcos	0(%[to]),0(%[from]),%[size]\n"
+		"6:	jz	4f\n"
+		"1:	algr	%[size],%[tmp1]\n"
+		"	slgr	%[from],%[tmp1]\n"
+		"	slgr	%[to],%[tmp1]\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? */
+		"	jnh	5f\n"
+		"3:	mvcos	0(%[to]),0(%[from]),%[tmp2]\n"
+		"7:	slgr	%[size],%[tmp2]\n"
+		"	j	5f\n"
+		"4:	slgr	%[size],%[size]\n"
 		"5:\n"
 		EX_TABLE(0b,2b) EX_TABLE(3b,5b) EX_TABLE(6b,2b) EX_TABLE(7b,5b)
-		: "+a" (size), "+a" (from), "+a" (to), "+a" (tmp1), "=a" (tmp2)
+		: [size] "+a" (size), [from] "+a" (from), [to] "+a" (to),
+		  [tmp1] "+a" (tmp1), [tmp2] "=a" (tmp2)
 		: [spec] "d" (spec.val)
 		: "cc", "memory", "0");
 	return size;
@@ -104,25 +105,26 @@ static unsigned long raw_copy_to_user_key(void __user *to, const void *from,
 
 	tmp1 = -4096UL;
 	asm volatile(
-		"   lr	  0,%[spec]\n"
-		"0: mvcos 0(%1),0(%2),%0\n"
-		"6: jz    4f\n"
-		"1: algr  %0,%3\n"
-		"   slgr  %1,%3\n"
-		"   slgr  %2,%3\n"
-		"   j     0b\n"
-		"2: la    %4,4095(%1)\n"/* %4 = ptr + 4095 */
-		"   nr    %4,%3\n"	/* %4 = (ptr + 4095) & -4096 */
-		"   slgr  %4,%1\n"
-		"   clgr  %0,%4\n"	/* copy crosses next page boundary? */
-		"   jnh   5f\n"
-		"3: mvcos 0(%1),0(%2),%4\n"
-		"7: slgr  %0,%4\n"
-		"   j     5f\n"
-		"4: slgr  %0,%0\n"
+		"	lr	0,%[spec]\n"
+		"0:	mvcos	0(%[to]),0(%[from]),%[size]\n"
+		"6:	jz	4f\n"
+		"1:	algr	%[size],%[tmp1]\n"
+		"	slgr	%[to],%[tmp1]\n"
+		"	slgr	%[from],%[tmp1]\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? */
+		"	jnh	5f\n"
+		"3:	mvcos	0(%[to]),0(%[from]),%[tmp2]\n"
+		"7:	slgr	%[size],%[tmp2]\n"
+		"	j	5f\n"
+		"4:	slgr	%[size],%[size]\n"
 		"5:\n"
 		EX_TABLE(0b,2b) EX_TABLE(3b,5b) EX_TABLE(6b,2b) EX_TABLE(7b,5b)
-		: "+a" (size), "+a" (to), "+a" (from), "+a" (tmp1), "=a" (tmp2)
+		: [size] "+a" (size), [to] "+a" (to), [from] "+a" (from),
+		  [tmp1] "+a" (tmp1), [tmp2] "=a" (tmp2)
 		: [spec] "d" (spec.val)
 		: "cc", "memory", "0");
 	return size;
@@ -155,25 +157,26 @@ unsigned long __clear_user(void __user *to, unsigned long size)
 
 	tmp1 = -4096UL;
 	asm volatile(
-		"   lr	  0,%[spec]\n"
-		"0: mvcos 0(%1),0(%4),%0\n"
-		"6: jz	  4f\n"
-		"1: algr  %0,%2\n"
-		"   slgr  %1,%2\n"
-		"   j	  0b\n"
-		"2: la	  %3,4095(%1)\n"/* %4 = to + 4095 */
-		"   nr	  %3,%2\n"	/* %4 = (to + 4095) & -4096 */
-		"   slgr  %3,%1\n"
-		"   clgr  %0,%3\n"	/* copy crosses next page boundary? */
-		"   jnh	  5f\n"
-		"3: mvcos 0(%1),0(%4),%3\n"
-		"7: slgr  %0,%3\n"
-		"   j	  5f\n"
-		"4: slgr  %0,%0\n"
+		"	lr	0,%[spec]\n"
+		"0:	mvcos	0(%[to]),0(%[zeropg]),%[size]\n"
+		"6:	jz	4f\n"
+		"1:	algr	%[size],%[tmp1]\n"
+		"	slgr	%[to],%[tmp1]\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? */
+		"	jnh	5f\n"
+		"3:	mvcos	0(%[to]),0(%[zeropg]),%[tmp2]\n"
+		"7:	slgr	%[size],%[tmp2]\n"
+		"	j	5f\n"
+		"4:	slgr	%[size],%[size]\n"
 		"5:\n"
 		EX_TABLE(0b,2b) EX_TABLE(6b,2b) EX_TABLE(3b,5b) EX_TABLE(7b,5b)
-		: "+&a" (size), "+&a" (to), "+a" (tmp1), "=&a" (tmp2)
-		: "a" (empty_zero_page), [spec] "d" (spec.val)
+		: [size] "+&a" (size), [to] "+&a" (to),
+		  [tmp1] "+a" (tmp1), [tmp2] "=&a" (tmp2)
+		: [zeropg] "a" (empty_zero_page), [spec] "d" (spec.val)
 		: "cc", "memory", "0");
 	return size;
 }
-- 
GitLab