diff mbox series

[09/12] s390: make __load_psw_mask work with clang

Message ID 20190408212648.2407234-9-arnd@arndb.de
State Accepted
Commit 0a113efc3b48e9a8952e3c6e19dfdcc48b62226f
Headers show
Series [01/12] s390: remove -fno-strength-reduce flag | expand

Commit Message

Arnd Bergmann April 8, 2019, 9:26 p.m. UTC
clang fails to use the %O and %R inline assembly modifiers
the same way as gcc, leading to build failures with every use
of __load_psw_mask():

/tmp/nmi-4a9f80.s: Assembler messages:
/tmp/nmi-4a9f80.s:571: Error: junk at end of line: `+8(160(%r11))'
/tmp/nmi-4a9f80.s:626: Error: junk at end of line: `+8(160(%r11))'

Replace these with a more conventional way of passing the addresses
that should work with both clang and gcc.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>

---
 arch/s390/include/asm/processor.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

-- 
2.20.0

Comments

Martin Schwidefsky April 10, 2019, 4:01 p.m. UTC | #1
On Mon,  8 Apr 2019 23:26:22 +0200
Arnd Bergmann <arnd@arndb.de> wrote:

> clang fails to use the %O and %R inline assembly modifiers

> the same way as gcc, leading to build failures with every use

> of __load_psw_mask():

> 

> /tmp/nmi-4a9f80.s: Assembler messages:

> /tmp/nmi-4a9f80.s:571: Error: junk at end of line: `+8(160(%r11))'

> /tmp/nmi-4a9f80.s:626: Error: junk at end of line: `+8(160(%r11))'

> 

> Replace these with a more conventional way of passing the addresses

> that should work with both clang and gcc.

> 

> Signed-off-by: Arnd Bergmann <arnd@arndb.de>


Added to s390/linux:features for the next merge window. Thanks.

-- 
blue skies,
   Martin.

"Reality continues to ruin my life." - Calvin.
diff mbox series

Patch

diff --git a/arch/s390/include/asm/processor.h b/arch/s390/include/asm/processor.h
index 81038ab357ce..700c650ffd4f 100644
--- a/arch/s390/include/asm/processor.h
+++ b/arch/s390/include/asm/processor.h
@@ -339,10 +339,10 @@  static __no_kasan_or_inline void __load_psw_mask(unsigned long mask)
 
 	asm volatile(
 		"	larl	%0,1f\n"
-		"	stg	%0,%O1+8(%R1)\n"
-		"	lpswe	%1\n"
+		"	stg	%0,%1\n"
+		"	lpswe	%2\n"
 		"1:"
-		: "=&d" (addr), "=Q" (psw) : "Q" (psw) : "memory", "cc");
+		: "=&d" (addr), "=Q" (psw.addr) : "Q" (psw) : "memory", "cc");
 }
 
 /*