bellard | 0d33019 | 2003-04-29 21:10:09 +0000 | [diff] [blame] | 1 | /* derived from glibc sysdeps/unix/sysv/linux/ia64/sysdep.S */ |
| 2 | |
| 3 | #define __ASSEMBLY__ |
| 4 | |
| 5 | #include <asm/asmmacro.h> |
| 6 | #include <asm/unistd.h> |
| 7 | |
| 8 | ENTRY(__syscall_error) |
| 9 | .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(0) |
| 10 | alloc r33=ar.pfs, 0, 4, 0, 0 |
| 11 | mov r32=rp |
| 12 | .body |
| 13 | mov r35=r8 |
| 14 | mov r34=r1 |
| 15 | ;; |
| 16 | br.call.sptk.many b0 = __errno_location |
| 17 | .Lret0: /* force new bundle */ |
| 18 | st4 [r8]=r35 |
| 19 | mov r1=r34 |
| 20 | mov rp=r32 |
| 21 | mov r8=-1 |
| 22 | mov ar.pfs=r33 |
| 23 | br.ret.sptk.few b0 |
| 24 | END(__syscall_error) |
| 25 | |
| 26 | GLOBAL_ENTRY(__ia64_syscall) |
| 27 | mov r15=r37 /* syscall number */ |
| 28 | break __BREAK_SYSCALL |
| 29 | cmp.eq p6,p0=-1,r10 /* r10 = -1 on error */ |
| 30 | (p6) br.cond.spnt.few __syscall_error |
| 31 | br.ret.sptk.few b0 |
| 32 | .endp __ia64_syscall |