diff options
| author | Rich Felker <dalias@aerifal.cx> | 2012-03-19 23:53:52 -0400 | 
|---|---|---|
| committer | Rich Felker <dalias@aerifal.cx> | 2012-03-19 23:53:52 -0400 | 
| commit | 7513d3ecabb998e2c8c4cb9ed5de48c4b64a166b (patch) | |
| tree | c9851d312fb15b1a5f427605a109f3563e8df0cc | |
| parent | 804fbf0b8c00fd4e2f37ef0769a610614d06138f (diff) | |
| download | musl-7513d3ecabb998e2c8c4cb9ed5de48c4b64a166b.tar.gz | |
remquo asm: return quotient mod 8, as intended by the spec
this is a lot more efficient and also what is generally wanted.
perhaps the bit shuffling could be more efficient...
| -rw-r--r-- | src/math/i386/remquo.s | 43 | 
1 files changed, 26 insertions, 17 deletions
diff --git a/src/math/i386/remquo.s b/src/math/i386/remquo.s index 86ae2dc3..37a24450 100644 --- a/src/math/i386/remquo.s +++ b/src/math/i386/remquo.s @@ -2,40 +2,49 @@  .type remquof,@function  remquof:  	mov 12(%esp),%ecx -	fldl 4(%esp)  	fldl 8(%esp) +	fldl 4(%esp) +	mov 11(%esp),%dh +	xor 7(%esp),%dh  	jmp 1f  .global remquol  .type remquol,@function  remquol:  	mov 28(%esp),%ecx -	fldl 4(%esp)  	fldl 16(%esp) +	fldl 4(%esp) +	mov 25(%esp),%dh +	xor 13(%esp),%dh  	jmp 1f  .global remquo  .type remquo,@function  remquo:  	mov 20(%esp),%ecx -	fldl 4(%esp)  	fldl 12(%esp) -1:	fld %st(1) +	fldl 4(%esp) +	mov 19(%esp),%dh +	xor 11(%esp),%dh  1:      fprem1  	fnstsw %ax  	sahf  	jp 1b -	fsubr %st(0),%st(2) -	fxch %st(2) -	fdivp -	mov $0x4f000000,%eax -	mov %eax,4(%esp) -	flds 4(%esp) -	fxch %st(1) -1:	fprem -	fnstsw %ax -	sahf -	jp 1b -	fistpl (%ecx) -	fstp %st(0) +	fstp %st(1) +	mov %ah,%dl +	shr %dl +	and $1,%dl +	mov %ah,%al +	shr $5,%al +	and $2,%al +	or %al,%dl +	mov %ah,%al +	shl $2,%al +	and $4,%al +	or %al,%dl +	test %dh,%dh +	jns 1f +	neg %dl +1:	movsbl %dl,%edx +	mov %edx,(%ecx)  	ret  | 
