From 4b43ddef39d5472f9e00eeb0ab6f2dfd3e40c5ef Mon Sep 17 00:00:00 2001 From: Oliver Lehmann Date: Sat, 29 Aug 2009 16:22:01 +0000 Subject: [PATCH] more work --- WEGA/src/lib/libc/TODO | 3 - WEGA/src/lib/libc/TODO.done | 3 + WEGA/src/lib/libc/gen/TODO | 1 + WEGA/src/lib/libc/gen/atof.s | 291 ++++++++++++++++++++++++++++++++++ WEGA/src/lib/libc/gen/pow10.s | 105 ++++++++++++ WEGA/src/lib/libc/gen/stfl.s | 12 ++ 6 files changed, 412 insertions(+), 3 deletions(-) create mode 100644 WEGA/src/lib/libc/gen/atof.s create mode 100644 WEGA/src/lib/libc/gen/pow10.s create mode 100644 WEGA/src/lib/libc/gen/stfl.s diff --git a/WEGA/src/lib/libc/TODO b/WEGA/src/lib/libc/TODO index ef056b0..b06c579 100644 --- a/WEGA/src/lib/libc/TODO +++ b/WEGA/src/lib/libc/TODO @@ -1,9 +1,6 @@ -atof.o atof.s ASM cnvt.o cnvt.c C doprnt.o doprnt.c C ecvt.o ecvt.s ASM fltioc.o fltioc.c C -pow10.o pow10.s ASM -stfl.o ??? swap.o swap.c C symscan.o symscan.c C diff --git a/WEGA/src/lib/libc/TODO.done b/WEGA/src/lib/libc/TODO.done index 5daee48..d951fc3 100644 --- a/WEGA/src/lib/libc/TODO.done +++ b/WEGA/src/lib/libc/TODO.done @@ -169,3 +169,6 @@ setret.o setret.s ASM decimal.o decimal.s ASM readsym.o readsym.c C goodmagic.o goodmagic.c C +stfl.o ??? +pow10.o pow10.s ASM +atof.o atof.s ASM diff --git a/WEGA/src/lib/libc/gen/TODO b/WEGA/src/lib/libc/gen/TODO index 00b1afc..e14a3d1 100644 --- a/WEGA/src/lib/libc/gen/TODO +++ b/WEGA/src/lib/libc/gen/TODO @@ -3,3 +3,4 @@ malloc.o /z/src/libc/orig_obj/malloc.o differ: char 5, line 1 nlist.o /z/src/libc/orig_obj/nlist.o differ: char 5, line 1 length.o readsym.o +atof.o diff --git a/WEGA/src/lib/libc/gen/atof.s b/WEGA/src/lib/libc/gen/atof.s new file mode 100644 index 0000000..320b4c0 --- /dev/null +++ b/WEGA/src/lib/libc/gen/atof.s @@ -0,0 +1,291 @@ +! @[$] atof.s 2.1 09/12/83 11:19:34 - 87wega3.2 ! + +atof module + + external + _pow10 procedure + + internal + str1: + WORD := %008c + WORD := %0054 + WORD := %0088 + WORD := %0094 + WORD := %0098 + WORD := %009a + WORD := %009e + WORD := %00ac + WORD := %00b6 + WORD := %00ba + WORD := %00be + WORD := %00c4 + WORD := %00ce + WORD := %00d0 + WORD := %00d4 + WORD := %0114 + WORD := %004e + WORD := %4965 + WORD := %452e + WORD := %2b2d + WORD := %3938 + WORD := %3736 + WORD := %3534 + WORD := %3332 + BYTE := %31 + str2: + BYTE := %30 + WORD := %0002 + WORD := %0400 + WORD := %0006 + WORD := %0a08 + WORD := %0e0e + WORD := %0e0e + WORD := %0e0e + WORD := %0e0e + WORD := %0e0c + WORD := %0002 + WORD := %0400 + WORD := %0006 + WORD := %0000 + WORD := %0e0e + WORD := %0e0e + WORD := %0e0e + WORD := %0e0e + WORD := %0e0c + WORD := %1e1e + WORD := %1e12 + WORD := %1210 + WORD := %1e1e + WORD := %0e0e + WORD := %0e0e + WORD := %0e0e + WORD := %0e0e + WORD := %0e0e + WORD := %1e1e + WORD := %1e1e + WORD := %1e1e + WORD := %1e1e + WORD := %1616 + WORD := %1616 + WORD := %1616 + WORD := %1616 + WORD := %1614 + WORD := %1e1e + WORD := %1e12 + WORD := %121e + WORD := %1e1e + WORD := %1616 + WORD := %1616 + WORD := %1616 + WORD := %1616 + WORD := %1616 + WORD := %1e1e + WORD := %1e1e + WORD := %1e1e + WORD := %1a18 + WORD := %1c1c + WORD := %1c1c + WORD := %1c1c + WORD := %1c1c + WORD := %1c1c + WORD := %1e1e + WORD := %1e1e + WORD := %1e1e + WORD := %1e1e + WORD := %1c1c + WORD := %1c1c + WORD := %1c1c + WORD := %1c1c + WORD := %1c1c + str3: + WORD := %414e + WORD := %2800 + global + _atof LABEL + + _atofs procedure + entry + calr __atof + flds r6,f0 + ret + end _atofs + + _atofd procedure + entry +_atof: + calr __atof + fldd r4,f0 + ret + end _atofd + + __atof procedure + entry + dec r15,#12 + ldm @r15,r8,#6 + ldl rr12,rr6 + subl rr0,rr0 + ldl rr2,rr0 + ldl rr4,rr2 + ldl rr6,rr4 + ldl rr8,rr6 + ldb rh2,#%13 + dec r13 +L1: + inc r13 + ldb rl0,@r13 + cpb rl0,#%20 + jr z,L1 + cpb rl0,#%09 + jr z,L1 + ld r1,#%0013 +L6: + ldb rl0,@r13 + inc r13 + lda r11,str2 !%026d! + ld r8,#%0012 + cpdrb rl0,@r11,r8,z + ldb rl1,r11(r1) + ld r11,str1(r1) !%023c! + jp @r11 + ldk r8,#3 + lda r11,str3 !%02ec! + cpsirb @r13,@r11,r8,nz + jr z,L3 +L4: + ldb rl0,@r13 + inc r13 + orb rl0,rl0 + jr z,L3 + cpb rl0,#%29 + jr z,L3 + rldb rh6,rl6 + rldb rl6,rh7 + rldb rh7,rl7 + bitb rl0,#6 + jr z,L2 + incb rl0,#9 +L2: + andb rl0,#%0f + orb rl7,rl0 + jr L4 +L3: + testl rr6 + jr nz,L5 + set r6,#6 +L5: + or r6,#%7f80 + or r6,r3 + flds f0,r6 + jr L10 + ldb rl1,#%49 + jr L6 + setb rh3,#7 + ldb rl1,#%25 + jr L6 + ldb rl1,#%25 +L7: + ldb rl0,@r13 + cpb rl0,#%30 + jr nz,L6 + inc r13 + jr L7 + ldb rl1,#%37 + decb rh2 + jr ge,L8 + incb rl2 + jr L6 + ldb rl1,#%5b + jr L6 + ldb rl1,#%6d + jr L6 + decb rl2 + ldb rl1,#%49 + jr L6 + ldb rl1,#%5b + decb rh2 + jr lt,L6 + decb rl2 + jr L8 + setb rh3,#6 + ldb rl1,#%7f + jr L6 + mult rr8,#%000a + and r0,#%000f + add r9,r0 + ldb rl1,#%7f + jr L6 +L8: + calr L9 + andb rl0,#%0f + orb rl7,rl0 + jr L6 +L9: + rldb rh3,rl3 + rldb rl3,rh4 + rldb rh4,rl4 + rldb rl4,rh5 + rldb rh5,rl5 + rldb rl5,rh6 + rldb rh6,rl6 + rldb rl6,rh7 + rldb rh7,rl7 + ret +L14: + rrdb rh7,rl7 + rrdb rl6,rh7 + rrdb rh6,rl6 + rrdb rl5,rh6 + rrdb rh5,rl5 + rrdb rl4,rh5 + rrdb rh4,rl4 + rrdb rl3,rh4 + rrdb rh3,rl3 + ret + bitb rh3,#6 + resb rh3,#6 + jr z,L11 + neg r9 +L11: + extsb r2 + add r9,r2 + jr z,L12 + jr mi,L13 +L17: + ldb rl0,#%0f + andb rl0,rh3 + jr nz,L12 + calr L9 + dec r9 + jr nz,L17 + jr L12 +L13: + ldb rl0,#%0f + andb rl0,rl7 + jr nz,L12 + calr L14 + inc r9 + jr nz,L13 +L12: + dec r15,#10 + ldm @r15,r3,#5 + ld r7,r9 + bit r7,#15 + jr z,L15 + neg r7 +L15: + call _pow10 + fldbcd f1,@r15 + inc r15,#10 + bit r9,#15 + jr z,L16 + fdiv f1,f0 + fld f0,f1 + jr L10 +L16: + fmul f0,f1 +L10: + ldm r8,@r15,#6 + inc r15,#12 + ret + end __atof +end atof diff --git a/WEGA/src/lib/libc/gen/pow10.s b/WEGA/src/lib/libc/gen/pow10.s new file mode 100644 index 0000000..974da50 --- /dev/null +++ b/WEGA/src/lib/libc/gen/pow10.s @@ -0,0 +1,105 @@ +! @[$] pow10.s 2.2 09/12/83 11:29:05 - 87wega3.2 ! + +pow10 module + INTERNAL + MAP: + WORD := %0d80 + WORD := %6cd7 + WORD := %bfce + WORD := %0f5a + WORD := %b8a6 + WORD := %761e + WORD := %06c0 + WORD := %555d + WORD := %9cb0 + WORD := %0bfd + WORD := %6f02 + WORD := %5339 + WORD := %0360 + WORD := %4b25 + WORD := %8d9e + WORD := %89d1 + WORD := %1346 + WORD := %bda5 + WORD := %01b0 + WORD := %459a + WORD := %86a3 + WORD := %364e + WORD := %a62c + WORD := %672d + WORD := %00d8 + WORD := %42cc + WORD := %b9a7 + WORD := %4a06 + WORD := %37ce + WORD := %2ee1 + WORD := %006c + WORD := %4165 + WORD := %da01 + WORD := %ee64 + WORD := %1a70 + WORD := %8dea + WORD := %0036 + WORD := %40b2 + WORD := %a70c + WORD := %3c40 + WORD := %a64e + WORD := %6c52 + WORD := %001b + WORD := %4058 + WORD := %cecb + WORD := %8f27 + WORD := %f420 + WORD := %0f3a + + global + __pow10 procedure + entry + dec r15,#4 + fldctl @r15,fflags + fsetmode rn + ldl rr2,#%3f800000 + cp r7,#%1388 + jr c,L1 + set r2,#14 + flds f0,r2 + inc r15,#4 + ret +L1: + flds f0,r2 + cp r7,#%001b + jr le,L4 + lda r3,MAP + ldk r1,#8 +L2: + pop r0,@r3 + cp r7,r0 + jr ult,L3 + fmul f0,@r3 + sub r7,r0 +L3: + inc r3,#10 + djnz r1,L2 +L4: + ldl rr2,#%3f800000 + flds f1,r2 + ld r2,#%4120 + flds f2,r2 + or r7,r7 + jr eq,L7 +L5: + bit r7,#0 + jr eq,L6 + fmul f1,f2 +L6: + fmul f2,f2 + res r7,#0 + rr r7 + jr ne,L5 +L7: + fldctl fflags,@r15 + inc r15,#4 + fmul f0,f1 + ret + end __pow10 +end pow10 diff --git a/WEGA/src/lib/libc/gen/stfl.s b/WEGA/src/lib/libc/gen/stfl.s new file mode 100644 index 0000000..e06c495 --- /dev/null +++ b/WEGA/src/lib/libc/gen/stfl.s @@ -0,0 +1,12 @@ +.code +__stfl:: +{ + fldd @r7,f3 + inc r7,#8 + fldd @r7,f2 + inc r7,#8 + fldd @r7,f1 + inc r7,#8 + fldd @r7,f0 + ret +}