[S390] Inline assembly cleanup.
Major cleanup of all s390 inline assemblies. They now have a common coding style. Quite a few have been shortened, mainly by using register asm variables. Use of the EX_TABLE macro helps as well. The atomic ops, bit ops and locking inlines new use the Q-constraint if a newer gcc is used. That results in slightly better code. Thanks to Christian Borntraeger for proof reading the changes. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
@@ -333,22 +333,14 @@ static int diag204(unsigned long subcode, unsigned long size, void *addr)
|
||||
register unsigned long _subcode asm("0") = subcode;
|
||||
register unsigned long _size asm("1") = size;
|
||||
|
||||
asm volatile (" diag %2,%0,0x204\n"
|
||||
"0: \n" ".section __ex_table,\"a\"\n"
|
||||
#ifndef __s390x__
|
||||
" .align 4\n"
|
||||
" .long 0b,0b\n"
|
||||
#else
|
||||
" .align 8\n"
|
||||
" .quad 0b,0b\n"
|
||||
#endif
|
||||
".previous":"+d" (_subcode), "+d"(_size)
|
||||
:"d"(addr)
|
||||
:"memory");
|
||||
asm volatile(
|
||||
" diag %2,%0,0x204\n"
|
||||
"0:\n"
|
||||
EX_TABLE(0b,0b)
|
||||
: "+d" (_subcode), "+d" (_size) : "d" (addr) : "memory");
|
||||
if (_subcode)
|
||||
return -1;
|
||||
else
|
||||
return _size;
|
||||
return _size;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -491,8 +483,7 @@ out:
|
||||
|
||||
static void diag224(void *ptr)
|
||||
{
|
||||
asm volatile(" diag %0,%1,0x224\n"
|
||||
: :"d" (0), "d"(ptr) : "memory");
|
||||
asm volatile("diag %0,%1,0x224" : :"d" (0), "d"(ptr) : "memory");
|
||||
}
|
||||
|
||||
static int diag224_get_name_table(void)
|
||||
|
Reference in New Issue
Block a user