diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/fenv/x32/fenv.s | 52 | ||||
| -rw-r--r-- | src/ldso/x32/start.s | 22 | ||||
| -rw-r--r-- | src/math/x32/acosl.s | 2 | ||||
| -rw-r--r-- | src/math/x32/asinl.s | 2 | ||||
| -rw-r--r-- | src/math/x32/atan2l.s | 4 | ||||
| -rw-r--r-- | src/math/x32/atanl.s | 2 | ||||
| -rw-r--r-- | src/math/x32/exp2l.s | 42 | ||||
| -rw-r--r-- | src/math/x32/expl.s | 32 | ||||
| -rw-r--r-- | src/math/x32/fabsl.s | 2 | ||||
| -rw-r--r-- | src/math/x32/floorl.s | 18 | ||||
| -rw-r--r-- | src/math/x32/fmodl.s | 4 | ||||
| -rw-r--r-- | src/math/x32/llrintl.s | 6 | ||||
| -rw-r--r-- | src/math/x32/log10l.s | 2 | ||||
| -rw-r--r-- | src/math/x32/log1pl.s | 4 | ||||
| -rw-r--r-- | src/math/x32/log2l.s | 2 | ||||
| -rw-r--r-- | src/math/x32/logl.s | 2 | ||||
| -rw-r--r-- | src/math/x32/lrintl.s | 6 | ||||
| -rw-r--r-- | src/math/x32/remainderl.s | 4 | ||||
| -rw-r--r-- | src/math/x32/rintl.s | 2 | ||||
| -rw-r--r-- | src/math/x32/sqrtl.s | 2 | ||||
| -rw-r--r-- | src/process/x32/vfork.s | 2 | ||||
| -rw-r--r-- | src/signal/x32/restore.s | 2 | ||||
| -rw-r--r-- | src/thread/x32/__set_thread_area.s | 2 | ||||
| -rw-r--r-- | src/thread/x32/__unmapself.s | 4 | ||||
| -rw-r--r-- | src/thread/x32/clone.s | 6 | ||||
| -rw-r--r-- | src/thread/x32/syscall_cp.s | 6 | 
26 files changed, 120 insertions, 114 deletions
| diff --git a/src/fenv/x32/fenv.s b/src/fenv/x32/fenv.s index b5aeaf4f..45310465 100644 --- a/src/fenv/x32/fenv.s +++ b/src/fenv/x32/fenv.s @@ -8,14 +8,14 @@ feclearexcept:  	test %eax,%ecx  	jz 1f  	fnclex -1:	stmxcsr -8(%rsp) +1:	stmxcsr -8(%esp)  	and $0x3f,%eax -	or %eax,-8(%rsp) -	test %ecx,-8(%rsp) +	or %eax,-8(%esp) +	test %ecx,-8(%esp)  	jz 1f  	not %ecx -	and %ecx,-8(%rsp) -	ldmxcsr -8(%rsp) +	and %ecx,-8(%esp) +	ldmxcsr -8(%esp)  1:	xor %eax,%eax  	ret @@ -23,9 +23,9 @@ feclearexcept:  .type feraiseexcept,@function  feraiseexcept:  	and $0x3f,%edi -	stmxcsr -8(%rsp) -	or %edi,-8(%rsp) -	ldmxcsr -8(%rsp) +	stmxcsr -8(%esp) +	or %edi,-8(%esp) +	ldmxcsr -8(%esp)  	xor %eax,%eax  	ret @@ -35,15 +35,15 @@ __fesetround:  	push %rax  	xor %eax,%eax  	mov %edi,%ecx -	fnstcw (%rsp) -	andb $0xf3,1(%rsp) -	or %ch,1(%rsp) -	fldcw (%rsp) -	stmxcsr (%rsp) +	fnstcw (%esp) +	andb $0xf3,1(%esp) +	or %ch,1(%esp) +	fldcw (%esp) +	stmxcsr (%esp)  	shl $3,%ch -	andb $0x9f,1(%rsp) -	or %ch,1(%rsp) -	ldmxcsr (%rsp) +	andb $0x9f,1(%esp) +	or %ch,1(%esp) +	ldmxcsr (%esp)  	pop %rcx  	ret @@ -51,7 +51,7 @@ __fesetround:  .type fegetround,@function  fegetround:  	push %rax -	stmxcsr (%rsp) +	stmxcsr (%esp)  	pop %rax  	shr $3,%eax  	and $0xc00,%eax @@ -61,27 +61,27 @@ fegetround:  .type fegetenv,@function  fegetenv:  	xor %eax,%eax -	fnstenv (%rdi) -	stmxcsr 28(%rdi) +	fnstenv (%edi) +	stmxcsr 28(%edi)  	ret  .global fesetenv  .type fesetenv,@function  fesetenv:  	xor %eax,%eax -	inc %rdi +	inc %edi  	jz 1f -	fldenv -1(%rdi) -	ldmxcsr 27(%rdi) +	fldenv -1(%edi) +	ldmxcsr 27(%edi)  	ret  1:	push %rax  	push %rax  	pushq $0xffff  	pushq $0x37f -	fldenv (%rsp) +	fldenv (%esp)  	pushq $0x1f80 -	ldmxcsr (%rsp) -	add $40,%rsp +	ldmxcsr (%esp) +	add $40,%esp  	ret  .global fetestexcept @@ -89,7 +89,7 @@ fesetenv:  fetestexcept:  	and $0x3f,%edi  	push %rax -	stmxcsr (%rsp) +	stmxcsr (%esp)  	pop %rsi  	fnstsw %ax  	or %esi,%eax diff --git a/src/ldso/x32/start.s b/src/ldso/x32/start.s index 80c1d08d..0fcf46dc 100644 --- a/src/ldso/x32/start.s +++ b/src/ldso/x32/start.s @@ -1,16 +1,24 @@  .text  .global _start  _start: -	mov (%rsp),%rdi -	lea 8(%rsp),%rsi +	mov (%rsp),%rdi  /* move argc into 1st argument slot */ +	lea 4(%rsp),%rsi /* move argv into 2nd argument slot */  	call __dynlink -	pop %rdi +	/* in case the dynlinker was called directly, it sets the "consumed" +	   argv values to -1. so we must loop over the array as long as -1 +	   is in the top argv slot, decrement argc, and then set the stackpointer +	   to the new argc as well as argc's new value. +	   as the x32 abi has longs in the argv array, we cannot use push/pop.*/ +	movl (%rsp),%edi /* copy argc into edi */ +	xor %rdx,%rdx /* we use rdx as an offset to the current argv member */  1:	dec %edi -	pop %rsi -	cmp $-1,%rsi +	addl $4, %edx +	movl (%rsp, %rdx), %esi +	cmp $-1,%esi  	jz 1b  	inc %edi -	push %rsi -	push %rdi +	subl $4, %edx +	lea (%rsp, %rdx), %rsp /* set rsp to new argv[-1] */ +	movl %edi, (%rsp)      /* write new argc there */  	xor %edx,%edx  	jmp *%rax diff --git a/src/math/x32/acosl.s b/src/math/x32/acosl.s index 88e01b49..1abca12e 100644 --- a/src/math/x32/acosl.s +++ b/src/math/x32/acosl.s @@ -3,7 +3,7 @@  .global acosl  .type acosl,@function  acosl: -	fldt 8(%rsp) +	fldt 8(%esp)  1:	fld %st(0)  	fld1  	fsub %st(0),%st(1) diff --git a/src/math/x32/asinl.s b/src/math/x32/asinl.s index ed212d9a..7fe9f127 100644 --- a/src/math/x32/asinl.s +++ b/src/math/x32/asinl.s @@ -1,7 +1,7 @@  .global asinl  .type asinl,@function  asinl: -	fldt 8(%rsp) +	fldt 8(%esp)  1:	fld %st(0)  	fld1  	fsub %st(0),%st(1) diff --git a/src/math/x32/atan2l.s b/src/math/x32/atan2l.s index e5f0a3de..1ead0788 100644 --- a/src/math/x32/atan2l.s +++ b/src/math/x32/atan2l.s @@ -1,7 +1,7 @@  .global atan2l  .type atan2l,@function  atan2l: -	fldt 8(%rsp) -	fldt 24(%rsp) +	fldt 8(%esp) +	fldt 24(%esp)  	fpatan  	ret diff --git a/src/math/x32/atanl.s b/src/math/x32/atanl.s index df76de5d..f475fe0e 100644 --- a/src/math/x32/atanl.s +++ b/src/math/x32/atanl.s @@ -1,7 +1,7 @@  .global atanl  .type atanl,@function  atanl: -	fldt 8(%rsp) +	fldt 8(%esp)  	fld1  	fpatan  	ret diff --git a/src/math/x32/exp2l.s b/src/math/x32/exp2l.s index 0d6cd563..d9f4d6ed 100644 --- a/src/math/x32/exp2l.s +++ b/src/math/x32/exp2l.s @@ -1,11 +1,11 @@  .global expm1l  .type expm1l,@function  expm1l: -	fldt 8(%rsp) +	fldt 8(%esp)  	fldl2e  	fmulp -	movl $0xc2820000,-4(%rsp) -	flds -4(%rsp) +	movl $0xc2820000,-4(%esp) +	flds -4(%esp)  	fucomp %st(1)  	fnstsw %ax  	sahf @@ -35,21 +35,21 @@ expm1l:  .global exp2l  .type exp2l,@function  exp2l: -	fldt 8(%rsp) +	fldt 8(%esp)  1:	fld %st(0) -	sub $16,%rsp -	fstpt (%rsp) -	mov 8(%rsp),%ax +	sub $16,%esp +	fstpt (%esp) +	mov 8(%esp),%ax  	and $0x7fff,%ax  	cmp $0x3fff+13,%ax  	jb 4f             # |x| < 8192  	cmp $0x3fff+15,%ax  	jae 3f            # |x| >= 32768 -	fsts (%rsp) -	cmpl $0xc67ff800,(%rsp) +	fsts (%esp) +	cmpl $0xc67ff800,(%esp)  	jb 2f             # x > -16382 -	movl $0x5f000000,(%rsp) -	flds (%rsp)       # 0x1p63 +	movl $0x5f000000,(%esp) +	flds (%esp)       # 0x1p63  	fld %st(1)  	fsub %st(1)  	faddp @@ -57,10 +57,10 @@ exp2l:  	fnstsw  	sahf  	je 2f             # x - 0x1p63 + 0x1p63 == x -	movl $1,(%rsp) -	flds (%rsp)       # 0x1p-149 +	movl $1,(%esp) +	flds (%esp)       # 0x1p-149  	fdiv %st(1) -	fstps (%rsp)      # raise underflow +	fstps (%esp)      # raise underflow  2:	fld1  	fld %st(1)  	frndint @@ -70,21 +70,21 @@ exp2l:  	faddp             # 2^(x-rint(x))  1:	fscale  	fstp %st(1) -	add $16,%rsp +	add $16,%esp  	ret  3:	xor %eax,%eax  4:	cmp $0x3fff-64,%ax  	fld1  	jb 1b             # |x| < 0x1p-64 -	fstpt (%rsp) -	fistl 8(%rsp) -	fildl 8(%rsp) +	fstpt (%esp) +	fistl 8(%esp) +	fildl 8(%esp)  	fsubrp %st(1) -	addl $0x3fff,8(%rsp) +	addl $0x3fff,8(%esp)  	f2xm1  	fld1  	faddp             # 2^(x-rint(x)) -	fldt (%rsp)       # 2^rint(x) +	fldt (%esp)       # 2^rint(x)  	fmulp -	add $16,%rsp +	add $16,%esp  	ret diff --git a/src/math/x32/expl.s b/src/math/x32/expl.s index 3add810d..aabea45e 100644 --- a/src/math/x32/expl.s +++ b/src/math/x32/expl.s @@ -6,11 +6,11 @@  .global expl  .type expl,@function  expl: -	fldt 8(%rsp) +	fldt 8(%esp)  		# interesting case: 0x1p-32 <= |x| < 16384  		# check if (exponent|0x8000) is in [0xbfff-32, 0xbfff+13] -	mov 16(%rsp), %ax +	mov 16(%esp), %ax  	or $0x8000, %ax  	sub $0xbfdf, %ax  	cmp $45, %ax @@ -29,29 +29,29 @@ expl:  		# should be 0x1.71547652b82fe178p0L == 0x3fff b8aa3b29 5c17f0bc  		# it will be wrong on non-nearest rounding mode  2:	fldl2e -	subq $48, %rsp +	sub $48, %esp  		# hi = log2e_hi*x  		# 2^hi = exp2l(hi)  	fmul %st(1),%st  	fld %st(0) -	fstpt (%rsp) -	fstpt 16(%rsp) -	fstpt 32(%rsp) +	fstpt (%esp) +	fstpt 16(%esp) +	fstpt 32(%esp)  	call exp2l  		# if 2^hi == inf return 2^hi  	fld %st(0) -	fstpt (%rsp) -	cmpw $0x7fff, 8(%rsp) +	fstpt (%esp) +	cmpw $0x7fff, 8(%esp)  	je 1f -	fldt 32(%rsp) -	fldt 16(%rsp) +	fldt 32(%esp) +	fldt 16(%esp)  		# fpu stack: 2^hi x hi  		# exact mult: x*log2e  	fld %st(1)  		# c = 0x1p32+1  	movq $0x41f0000000100000,%rax  	pushq %rax -	fldl (%rsp) +	fldl (%esp)  		# xh = x - c*x + c*x  		# xl = x - xh  	fmulp @@ -63,7 +63,7 @@ expl:  		# yh = log2e_hi - c*log2e_hi + c*log2e_hi  	movq $0x3ff7154765200000,%rax  	pushq %rax -	fldl (%rsp) +	fldl (%esp)  		# fpu stack: 2^hi x hi xh xl yh  		# lo = hi - xh*yh + xl*yh  	fld %st(2) @@ -74,7 +74,7 @@ expl:  		# yl = log2e_hi - yh  	movq $0x3de705fc2f000000,%rax  	pushq %rax -	fldl (%rsp) +	fldl (%esp)  		# fpu stack: 2^hi x lo xh xl yl  		# lo += xh*yl + xl*yl  	fmul %st, %st(2) @@ -87,8 +87,8 @@ expl:  	pushq %rax  	movq $0x82f0025f2dc582ee,%rax  	pushq %rax -	fldt (%rsp) -	addq $40,%rsp +	fldt (%esp) +	add $40,%esp  		# fpu stack: 2^hi x lo log2e_lo  		# lo += log2e_lo*x  		# return 2^hi + 2^hi (2^lo - 1) @@ -97,5 +97,5 @@ expl:  	f2xm1  	fmul %st(1), %st  	faddp -1:	addq $48, %rsp +1:	add $48, %esp  	ret diff --git a/src/math/x32/fabsl.s b/src/math/x32/fabsl.s index 4e7ab525..4f215df5 100644 --- a/src/math/x32/fabsl.s +++ b/src/math/x32/fabsl.s @@ -1,6 +1,6 @@  .global fabsl  .type fabsl,@function  fabsl: -	fldt 8(%rsp) +	fldt 8(%esp)  	fabs  	ret diff --git a/src/math/x32/floorl.s b/src/math/x32/floorl.s index 80da4660..78dcb6da 100644 --- a/src/math/x32/floorl.s +++ b/src/math/x32/floorl.s @@ -1,27 +1,27 @@  .global floorl  .type floorl,@function  floorl: -	fldt 8(%rsp) +	fldt 8(%esp)  1:	mov $0x7,%al -1:	fstcw 8(%rsp) -	mov 9(%rsp),%ah -	mov %al,9(%rsp) -	fldcw 8(%rsp) +1:	fstcw 8(%esp) +	mov 9(%esp),%ah +	mov %al,9(%esp) +	fldcw 8(%esp)  	frndint -	mov %ah,9(%rsp) -	fldcw 8(%rsp) +	mov %ah,9(%esp) +	fldcw 8(%esp)  	ret  .global ceill  .type ceill,@function  ceill: -	fldt 8(%rsp) +	fldt 8(%esp)  	mov $0xb,%al  	jmp 1b  .global truncl  .type truncl,@function  truncl: -	fldt 8(%rsp) +	fldt 8(%esp)  	mov $0xf,%al  	jmp 1b diff --git a/src/math/x32/fmodl.s b/src/math/x32/fmodl.s index ca81e60c..9e4378ab 100644 --- a/src/math/x32/fmodl.s +++ b/src/math/x32/fmodl.s @@ -1,8 +1,8 @@  .global fmodl  .type fmodl,@function  fmodl: -	fldt 24(%rsp) -	fldt 8(%rsp) +	fldt 24(%esp) +	fldt 8(%esp)  1:	fprem  	fstsw %ax  	sahf diff --git a/src/math/x32/llrintl.s b/src/math/x32/llrintl.s index 1ec0817d..09386079 100644 --- a/src/math/x32/llrintl.s +++ b/src/math/x32/llrintl.s @@ -1,7 +1,7 @@  .global llrintl  .type llrintl,@function  llrintl: -	fldt 8(%rsp) -	fistpll 8(%rsp) -	mov 8(%rsp),%rax +	fldt 8(%esp) +	fistpll 8(%esp) +	mov 8(%esp),%rax  	ret diff --git a/src/math/x32/log10l.s b/src/math/x32/log10l.s index 48ea4af7..ef5bea3f 100644 --- a/src/math/x32/log10l.s +++ b/src/math/x32/log10l.s @@ -2,6 +2,6 @@  .type log10l,@function  log10l:  	fldlg2 -	fldt 8(%rsp) +	fldt 8(%esp)  	fyl2x  	ret diff --git a/src/math/x32/log1pl.s b/src/math/x32/log1pl.s index 955c9dbf..2e64fd4b 100644 --- a/src/math/x32/log1pl.s +++ b/src/math/x32/log1pl.s @@ -1,10 +1,10 @@  .global log1pl  .type log1pl,@function  log1pl: -	mov 14(%rsp),%eax +	mov 14(%esp),%eax  	fldln2  	and $0x7fffffff,%eax -	fldt 8(%rsp) +	fldt 8(%esp)  	cmp $0x3ffd9400,%eax  	ja 1f  	fyl2xp1 diff --git a/src/math/x32/log2l.s b/src/math/x32/log2l.s index ba08b9fb..bf88e8e2 100644 --- a/src/math/x32/log2l.s +++ b/src/math/x32/log2l.s @@ -2,6 +2,6 @@  .type log2l,@function  log2l:  	fld1 -	fldt 8(%rsp) +	fldt 8(%esp)  	fyl2x  	ret diff --git a/src/math/x32/logl.s b/src/math/x32/logl.s index 20dd1f81..eff64506 100644 --- a/src/math/x32/logl.s +++ b/src/math/x32/logl.s @@ -2,6 +2,6 @@  .type logl,@function  logl:  	fldln2 -	fldt 8(%rsp) +	fldt 8(%esp)  	fyl2x  	ret diff --git a/src/math/x32/lrintl.s b/src/math/x32/lrintl.s index d587b12b..ee97d1cf 100644 --- a/src/math/x32/lrintl.s +++ b/src/math/x32/lrintl.s @@ -1,7 +1,7 @@  .global lrintl  .type lrintl,@function  lrintl: -	fldt 8(%rsp) -	fistpll 8(%rsp) -	mov 8(%rsp),%rax +	fldt 8(%esp) +	fistpll 8(%esp) +	mov 8(%esp),%rax  	ret diff --git a/src/math/x32/remainderl.s b/src/math/x32/remainderl.s index 75c12374..c97f68ad 100644 --- a/src/math/x32/remainderl.s +++ b/src/math/x32/remainderl.s @@ -1,8 +1,8 @@  .global remainderl  .type remainderl,@function  remainderl: -	fldt 24(%rsp) -	fldt 8(%rsp) +	fldt 24(%esp) +	fldt 8(%esp)  1:	fprem1  	fstsw %ax  	sahf diff --git a/src/math/x32/rintl.s b/src/math/x32/rintl.s index 64e663cd..be1d2fa7 100644 --- a/src/math/x32/rintl.s +++ b/src/math/x32/rintl.s @@ -1,6 +1,6 @@  .global rintl  .type rintl,@function  rintl: -	fldt 8(%rsp) +	fldt 8(%esp)  	frndint  	ret diff --git a/src/math/x32/sqrtl.s b/src/math/x32/sqrtl.s index 23cd687d..8d70856e 100644 --- a/src/math/x32/sqrtl.s +++ b/src/math/x32/sqrtl.s @@ -1,5 +1,5 @@  .global sqrtl  .type sqrtl,@function -sqrtl:	fldt 8(%rsp) +sqrtl:	fldt 8(%esp)  	fsqrt  	ret diff --git a/src/process/x32/vfork.s b/src/process/x32/vfork.s index 27af46f5..1039f0f2 100644 --- a/src/process/x32/vfork.s +++ b/src/process/x32/vfork.s @@ -5,7 +5,7 @@  __vfork:  vfork:  	pop %rdx -	mov $58,%eax +	mov $0x4000003a,%eax /* SYS_vfork */  	syscall  	push %rdx  	mov %rax,%rdi diff --git a/src/signal/x32/restore.s b/src/signal/x32/restore.s index 682af2dd..27cd3cef 100644 --- a/src/signal/x32/restore.s +++ b/src/signal/x32/restore.s @@ -4,5 +4,5 @@  .type __restore,@function  __restore_rt:  __restore: -	movl $15, %eax +	movl $0x40000201, %eax /* SYS_rt_sigreturn */  	syscall diff --git a/src/thread/x32/__set_thread_area.s b/src/thread/x32/__set_thread_area.s index f3ff4f61..94bc3630 100644 --- a/src/thread/x32/__set_thread_area.s +++ b/src/thread/x32/__set_thread_area.s @@ -5,6 +5,6 @@  __set_thread_area:  	mov %rdi,%rsi           /* shift for syscall */  	movl $0x1002,%edi       /* SET_FS register */ -	movl $158,%eax          /* set fs segment to */ +	movl $0x4000009e,%eax          /* set fs segment to */  	syscall                 /* arch_prctl(SET_FS, arg)*/  	ret diff --git a/src/thread/x32/__unmapself.s b/src/thread/x32/__unmapself.s index e2689e65..d9254601 100644 --- a/src/thread/x32/__unmapself.s +++ b/src/thread/x32/__unmapself.s @@ -3,8 +3,8 @@  .global __unmapself  .type   __unmapself,@function  __unmapself: -	movl $11,%eax   /* SYS_munmap */ +	movl $0x4000000b,%eax   /* SYS_munmap */  	syscall         /* munmap(arg2,arg3) */  	xor %rdi,%rdi   /* exit() args: always return success */ -	movl $60,%eax   /* SYS_exit */ +	movl $0x4000003c,%eax   /* SYS_exit */  	syscall         /* exit(0) */ diff --git a/src/thread/x32/clone.s b/src/thread/x32/clone.s index ee59903a..eed46151 100644 --- a/src/thread/x32/clone.s +++ b/src/thread/x32/clone.s @@ -2,8 +2,7 @@  .global __clone  .type   __clone,@function  __clone: -	xor %eax,%eax -	mov $56,%al +	movl $0x40000038,%eax /* SYS_clone */  	mov %rdi,%r11  	mov %rdx,%rdi  	mov %r8,%rdx @@ -20,8 +19,7 @@ __clone:  	pop %rdi  	call *%r9  	mov %eax,%edi -	xor %eax,%eax -	mov $60,%al +	movl $0x4000003c,%eax /* SYS_exit */  	syscall  	hlt  1:	ret diff --git a/src/thread/x32/syscall_cp.s b/src/thread/x32/syscall_cp.s index 788c53cc..70605c19 100644 --- a/src/thread/x32/syscall_cp.s +++ b/src/thread/x32/syscall_cp.s @@ -1,7 +1,7 @@  .text -.global __syscall_cp_asm -.type   __syscall_cp_asm,@function -__syscall_cp_asm: +.global __syscall_cp_internal +.type   __syscall_cp_internal,@function +__syscall_cp_internal:  .global __cp_begin  __cp_begin: | 
