diff options
-rw-r--r-- | COPYRIGHT | 2 | ||||
-rw-r--r-- | src/math/i386/sqrt.s | 16 | ||||
-rw-r--r-- | src/math/i386/sqrtf.s | 2 | ||||
-rw-r--r-- | src/stdio/__scanf.c | 17 |
4 files changed, 25 insertions, 12 deletions
@@ -37,7 +37,7 @@ The x86_64 port was written by Nicholas J. Kain. See individual files for their copyright status. All files which have no copyright comments are original works -Copyright © 2005-2011 Rich Felker, the main author of this library. +Copyright © 2005-2012 Rich Felker, the main author of this library. The decision to exclude such comments is intentional, as it should be possible to carry around the complete source code on tiny storage media. All public header files (include/*) should be treated as Public diff --git a/src/math/i386/sqrt.s b/src/math/i386/sqrt.s index c6e55303..8289d094 100644 --- a/src/math/i386/sqrt.s +++ b/src/math/i386/sqrt.s @@ -2,4 +2,20 @@ .type sqrt,@function sqrt: fldl 4(%esp) fsqrt + fstsw %ax + sub $12,%esp + fld %st(0) + fstpt (%esp) + mov (%esp),%ecx + and $0x7ff,%ecx + cmp $0x400,%ecx + jnz 1f + and $0x200,%eax + sub $0x100,%eax + sub %eax,(%esp) + fstp %st(0) + fldt (%esp) +1: add $12,%esp + fstpl 4(%esp) + fldl 4(%esp) ret diff --git a/src/math/i386/sqrtf.s b/src/math/i386/sqrtf.s index b79bd949..9e944f45 100644 --- a/src/math/i386/sqrtf.s +++ b/src/math/i386/sqrtf.s @@ -2,4 +2,6 @@ .type sqrtf,@function sqrtf: flds 4(%esp) fsqrt + fstps 4(%esp) + flds 4(%esp) ret diff --git a/src/stdio/__scanf.c b/src/stdio/__scanf.c index 062327d7..7c82cca4 100644 --- a/src/stdio/__scanf.c +++ b/src/stdio/__scanf.c @@ -319,34 +319,29 @@ int __scanf(rctx_t *r, const wchar_t *fmt, va_list ap) unread(r); break; } + m = 1; if (((c=read(r))|0x20) != 'x') { - if (t == 'i') { - t = 'o'; - /* lone 0 is valid octal */ - if ((unsigned)(c-'0') >= 8) { - m = 1; - goto int_finish; - } - } + if (t == 'i') t = 'o'; unread(r); break; } t = 'x'; + m = 0; } } switch (t) { case 'd': case 'u': - for (m=0; isdigit(c=read(r)); m=1) + for (; isdigit(c=read(r)); m=1) i = 10*i + c-'0'; goto int_finish; case 'o': - for (m=0; (unsigned)(c=read(r))-'0' < 8; m=1) + for (; (unsigned)(c=read(r))-'0' < 8; m=1) i = (i<<3) + c-'0'; goto int_finish; case 'x': - for (m=0; ; m=1) { + for (; ; m=1) { if (isdigit(c=read(r))) { i = (i<<4) + c-'0'; } else if ((unsigned)(c|0x20)-'a' < 6) { |