diff options
Diffstat (limited to 'src')
-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 |
3 files changed, 24 insertions, 11 deletions
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) { |