diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2003-04-29 21:10:09 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2003-04-29 21:10:09 +0000 |
commit | 0d3301964df6d36c72dfa95ba5ae5e3b789cd1f8 (patch) | |
tree | cbf681930f4cae73619ef1571a421d6ad2e9fa9d /ia64-syscall.S | |
parent | fe1e3ce3e97f08d9b18b3444831a69b4666eb6b5 (diff) |
ia64 support
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@115 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'ia64-syscall.S')
-rw-r--r-- | ia64-syscall.S | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/ia64-syscall.S b/ia64-syscall.S new file mode 100644 index 0000000000..ab073f22b9 --- /dev/null +++ b/ia64-syscall.S @@ -0,0 +1,32 @@ +/* derived from glibc sysdeps/unix/sysv/linux/ia64/sysdep.S */ + +#define __ASSEMBLY__ + +#include <asm/asmmacro.h> +#include <asm/unistd.h> + +ENTRY(__syscall_error) + .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(0) + alloc r33=ar.pfs, 0, 4, 0, 0 + mov r32=rp + .body + mov r35=r8 + mov r34=r1 + ;; + br.call.sptk.many b0 = __errno_location +.Lret0: /* force new bundle */ + st4 [r8]=r35 + mov r1=r34 + mov rp=r32 + mov r8=-1 + mov ar.pfs=r33 + br.ret.sptk.few b0 +END(__syscall_error) + +GLOBAL_ENTRY(__ia64_syscall) + mov r15=r37 /* syscall number */ + break __BREAK_SYSCALL + cmp.eq p6,p0=-1,r10 /* r10 = -1 on error */ +(p6) br.cond.spnt.few __syscall_error + br.ret.sptk.few b0 +.endp __ia64_syscall |