Szabolcs Nagy 01ef3dd9c5 add aarch64 port
This adds complete aarch64 target support including bigendian subarch.

Some of the long double math functions are known to be broken otherwise
interfaces should be fully functional, but at this point consider this
port experimental.

Initial work on this port was done by Sireesh Tripurari and Kevin Bortis.
2015-03-11 20:12:35 -04:00

30 lines
523 B
ArmAsm

// __clone(func, stack, flags, arg, ptid, tls, ctid)
// x0, x1, w2, x3, x4, x5, x6
// syscall(SYS_clone, flags, stack, ptid, tls, ctid)
// x8, x0, x1, x2, x3, x4
.global __clone
.type __clone,%function
__clone:
// align stack and save func,arg
and x1,x1,#-16
stp x0,x3,[x1,#-16]!
// syscall
uxtw x0,w2
mov x2,x4
mov x3,x5
mov x4,x6
mov x8,#220 // SYS_clone
svc #0
cbz x0,1f
// parent
ret
// child
1: ldp x1,x0,[sp],#16
blr x1
mov x8,#93 // SYS_exit
svc #0