blob: 0ff2a6546bfd4d9e126ef3e81078a825f931b7f2 [file] [log] [blame]
/*
* arch/parisc/syscall.S
*
* %r20 contains the system call number, %r2 contains whence we came
*
*/
.text
.align 64 ; cache-width aligned
.globl __syscall_common
.type __syscall_common,@function
__syscall_common:
ldo 0x40(%sp),%sp
stw %rp,-0x54(%sp) ; save return pointer
ldw -0x74(%sp),%r22 ; %arg4
ldw -0x78(%sp),%r21 ; %arg5
ble 0x100(%sr2, %r0) ; jump to gateway page
nop ; can we move a load here?
ldi -0x1000,%r19 ; %r19 = -4096
sub %r0,%ret0,%r22 ; %r22 = -%ret0
cmpb,>>=,n %r19,%ret0,1f ; if %ret0 >= -4096UL
ldi -1,%ret0 ; nullified on taken forward
/* store %r22 to errno... */
ldil L%errno,%r1
ldo R%errno(%r1),%r1
stw %r22,0(%r1)
1:
ldw -0x54(%sp),%rp ; restore return pointer
bv %r0(%rp) ; jump back
ldo -0x40(%sp),%sp
.size __syscall_common,.-__syscall_common