commit fa5488c4e90b1efaa95c753e09f47e8b03e2ec05
parent d72293f7a47c406f0b5653fe608c724d4ba667e5
Author: Alexander Burger <abu@software-lab.de>
Date: Tue, 17 Apr 2012 08:54:47 +0200
double/float in 'native' structures
Diffstat:
12 files changed, 260 insertions(+), 165 deletions(-)
diff --git a/CHANGES b/CHANGES
@@ -1,4 +1,5 @@
* DDmmm12 picoLisp-3.1.1
+ double/float in 'native' structures
Allow 'zap' protected symbols outside 'pico' namespace (64-bit)
Bug in 'who'
diff --git a/doc/refN.html b/doc/refN.html
@@ -165,10 +165,10 @@ structures, e.g.
<p>Arguments can be
<ul>
<li>integers (up to 64-bit) or pointers, passed as numbers
+<li>strings, passed as symbols
<li>fixpoint numbers, passed as cons pairs consisting of a the value and the
- scale. If the scale is positive, the number is passed as a
- <code>double</code>, otherwise as a <code>float</code>.
-<li>strings, passed as symbols, or
+ scale (if the scale is positive, the number is passed as a
+ <code>double</code>, otherwise as a <code>float</code>)
<li>structures, passed as lists with
<ul>
<li>a variable in the CAR (to recieve the returned structure data, ignored
@@ -185,6 +185,12 @@ structures, e.g.
a field of '<code>cnt</code>' bytes
<li>a pair <code>(sym . cnt)</code> where '<code>sym</code>' is stored as
a null-terminated string in a field of '<code>cnt</code>' bytes
+ <li>a list <code>(1.0 num ...)</code> where the '<code>num</code>'
+ elements (scaled fixpoint numbers) are stored as a sequence of double
+ precision floating point numbers
+ <li>a list <code>(-1.0 num ...)</code> where the '<code>num</code>'
+ elements (scaled fixpoint numbers) are stored as a sequence of single
+ precision floating point numbers
</ul>
If the last CDR of the initialization sequence is a number, it is used
as a fill-byte value for the remaining space in the structure.
diff --git a/doc64/asm b/doc64/asm
@@ -1,4 +1,4 @@
-# 08apr12abu
+# 16apr12abu
# (c) Software Lab. Alexander Burger
@@ -164,9 +164,12 @@
call adr # Call 'adr'
cc adr(src ..) # C-Call to 'adr' with 'src' arguments
cc adr reg # C-Call to 'adr' with end of stacked args in 'reg'
- dval # Set up double value pointed to by 'C'
- fval # Set up float value pointed to by 'C'
- fnum # Convert double with scale 'E' to fixnum in 'E'
+ ldd # Load double value pointed to by 'C'
+ ldf # Load float value pointed to by 'C'
+ fixnum # Convert double with scale 'E' to fixnum in 'E'
+ float # Convert fixnum with scale 'A' pointed to by 'X'
+ std # Store double value at address 'Z'
+ stf # Store float value at address 'Z'
ret # Return
begin # Called from foreign function
diff --git a/ersatz/picolisp.jar b/ersatz/picolisp.jar
Binary files differ.
diff --git a/lib/map b/lib/map
@@ -32,9 +32,9 @@ and (1613 . "@src64/flow.l")
any (3965 . "@src64/io.l")
append (1338 . "@src64/subr.l")
apply (713 . "@src64/apply.l")
-arg (2304 . "@src64/main.l")
-args (2280 . "@src64/main.l")
-argv (2924 . "@src64/main.l")
+arg (2323 . "@src64/main.l")
+args (2299 . "@src64/main.l")
+argv (2943 . "@src64/main.l")
as (139 . "@src64/flow.l")
asoq (3008 . "@src64/subr.l")
assoc (2973 . "@src64/subr.l")
@@ -65,7 +65,7 @@ call (3079 . "@src64/flow.l")
car (5 . "@src64/subr.l")
case (1954 . "@src64/flow.l")
catch (2456 . "@src64/flow.l")
-cd (2679 . "@src64/main.l")
+cd (2698 . "@src64/main.l")
cdaaar (464 . "@src64/subr.l")
cdaadr (487 . "@src64/subr.l")
cdaar (179 . "@src64/subr.l")
@@ -88,7 +88,7 @@ circ (816 . "@src64/subr.l")
circ? (2402 . "@src64/subr.l")
clip (1799 . "@src64/subr.l")
close (4381 . "@src64/io.l")
-cmd (2906 . "@src64/main.l")
+cmd (2925 . "@src64/main.l")
cnt (1413 . "@src64/apply.l")
co (2537 . "@src64/flow.l")
commit (1498 . "@src64/db.l")
@@ -99,9 +99,9 @@ connect (224 . "@src64/net.l")
cons (747 . "@src64/subr.l")
copy (1225 . "@src64/subr.l")
ctl (4254 . "@src64/io.l")
-ctty (2704 . "@src64/main.l")
+ctty (2723 . "@src64/main.l")
cut (1922 . "@src64/sym.l")
-date (2418 . "@src64/main.l")
+date (2437 . "@src64/main.l")
dbck (2113 . "@src64/db.l")
de (532 . "@src64/flow.l")
dec (2323 . "@src64/big.l")
@@ -111,7 +111,7 @@ del (1977 . "@src64/sym.l")
delete (1401 . "@src64/subr.l")
delq (1452 . "@src64/subr.l")
diff (2589 . "@src64/subr.l")
-dir (2837 . "@src64/main.l")
+dir (2856 . "@src64/main.l")
dm (545 . "@src64/flow.l")
do (2130 . "@src64/flow.l")
e (2911 . "@src64/flow.l")
@@ -128,7 +128,7 @@ extern (1023 . "@src64/sym.l")
extra (1258 . "@src64/flow.l")
extract (1218 . "@src64/apply.l")
fifo (2088 . "@src64/sym.l")
-file (2784 . "@src64/main.l")
+file (2803 . "@src64/main.l")
fill (3243 . "@src64/subr.l")
filter (1161 . "@src64/apply.l")
fin (2033 . "@src64/subr.l")
@@ -166,7 +166,7 @@ ifn (1854 . "@src64/flow.l")
in (4194 . "@src64/io.l")
inc (2256 . "@src64/big.l")
index (2637 . "@src64/subr.l")
-info (2741 . "@src64/main.l")
+info (2760 . "@src64/main.l")
intern (998 . "@src64/sym.l")
ipid (3198 . "@src64/flow.l")
isa (961 . "@src64/flow.l")
@@ -183,7 +183,7 @@ lieu (1157 . "@src64/db.l")
line (3699 . "@src64/io.l")
lines (3852 . "@src64/io.l")
link (1172 . "@src64/subr.l")
-lisp (1976 . "@src64/main.l")
+lisp (1995 . "@src64/main.l")
list (887 . "@src64/subr.l")
listen (157 . "@src64/net.l")
lit (150 . "@src64/flow.l")
@@ -225,7 +225,7 @@ nand (1648 . "@src64/flow.l")
native (1376 . "@src64/main.l")
need (919 . "@src64/subr.l")
new (835 . "@src64/flow.l")
-next (2287 . "@src64/main.l")
+next (2306 . "@src64/main.l")
nil (1731 . "@src64/flow.l")
nond (1931 . "@src64/flow.l")
nor (1669 . "@src64/flow.l")
@@ -239,7 +239,7 @@ onOff (1738 . "@src64/sym.l")
one (1771 . "@src64/sym.l")
open (4338 . "@src64/io.l")
opid (3214 . "@src64/flow.l")
-opt (3027 . "@src64/main.l")
+opt (3046 . "@src64/main.l")
or (1629 . "@src64/flow.l")
out (4214 . "@src64/io.l")
pack (1270 . "@src64/sym.l")
@@ -272,7 +272,7 @@ push (1813 . "@src64/sym.l")
push1 (1849 . "@src64/sym.l")
put (2835 . "@src64/sym.l")
putl (3113 . "@src64/sym.l")
-pwd (2668 . "@src64/main.l")
+pwd (2687 . "@src64/main.l")
queue (2045 . "@src64/sym.l")
quit (1083 . "@src64/main.l")
quote (134 . "@src64/flow.l")
@@ -283,7 +283,7 @@ raw (449 . "@src64/main.l")
rd (5163 . "@src64/io.l")
read (2656 . "@src64/io.l")
replace (1499 . "@src64/subr.l")
-rest (2333 . "@src64/main.l")
+rest (2352 . "@src64/main.l")
reverse (1678 . "@src64/subr.l")
rewind (5129 . "@src64/io.l")
rollback (1898 . "@src64/db.l")
@@ -324,7 +324,7 @@ text (1398 . "@src64/sym.l")
throw (2482 . "@src64/flow.l")
tick (3166 . "@src64/flow.l")
till (3610 . "@src64/io.l")
-time (2551 . "@src64/main.l")
+time (2570 . "@src64/main.l")
touch (1172 . "@src64/sym.l")
trim (1759 . "@src64/subr.l")
try (1168 . "@src64/flow.l")
@@ -337,9 +337,9 @@ up (691 . "@src64/main.l")
upp? (3393 . "@src64/sym.l")
uppc (3460 . "@src64/sym.l")
use (1562 . "@src64/flow.l")
-usec (2656 . "@src64/main.l")
+usec (2675 . "@src64/main.l")
val (1588 . "@src64/sym.l")
-version (3041 . "@src64/main.l")
+version (3060 . "@src64/main.l")
wait (3150 . "@src64/io.l")
when (1873 . "@src64/flow.l")
while (2050 . "@src64/flow.l")
diff --git a/src/vers.h b/src/vers.h
@@ -1 +1 @@
-static byte Version[4] = {3,1,0,1};
+static byte Version[4] = {3,1,0,2};
diff --git a/src64/arch/ppc64.l b/src64/arch/ppc64.l
@@ -1,4 +1,4 @@
-# 08apr12abu
+# 16apr12abu
# (c) Software Lab. Alexander Burger
# Byte order
@@ -1035,13 +1035,13 @@
(("bne" + "cr1" ".+12") ("beq" + ".+8") ("b" NIL @Lbl))
(("bne" + "cr1" ".+8") ("bnectr" NIL)) ) )
-(asm dval ()
+(asm ldd ()
(prinst "lfd" 1 "0(14)") )
-(asm fval ()
+(asm ldf ()
(prinst "lfs" 1 "0(14)") )
-(asm fnum ()
+(asm fixnum ()
(prinst "srdi" 0 15 4) # Normalize scale (ignore sign)
(prinst "std" 0 "-8(1)")
(prinst "lfd" 0 "-8(1)") # Get scale in f13
@@ -1072,6 +1072,15 @@
(prinst "ori" 15 15 2)
(prinl "4:") )
+(asm float ()
+ #{!}# )
+
+(asm std ()
+ (prinst "stfd" 1 "0(14)") )
+
+(asm stf ()
+ (prinst "stfs" 1 "0(14)") )
+
(asm cc (Adr A Arg M)
(let Reg (3 4 5 6 7 8 9 10) # Support only max. 8 parameters
(if (lst? Arg)
diff --git a/src64/arch/x86-64.l b/src64/arch/x86-64.l
@@ -1,4 +1,4 @@
-# 08apr12abu
+# 16apr12abu
# (c) Software Lab. Alexander Burger
# Byte order
@@ -579,13 +579,13 @@
(asm jgt (Adr A)
(_jmp "ja" "jbe") )
-(asm dval ()
+(asm ldd ()
(prinst "movsd" "(%rdx)" "%xmm0") )
-(asm fval ()
+(asm ldf ()
(prinst "movss" "(%rdx)" "%xmm0") )
-(asm fnum ()
+(asm fixnum ()
(prinst "shr" "$4" "%rbx") # Normalize scale
(prinst "jc" "1f") # Jump if negative
(prinst "cvtsi2sd" "%rbx" "%xmm7") # Mulitply double with scale
@@ -616,6 +616,60 @@
(prinst "mov" "$TSym" "%rbx") # Load T
(prinl "5:") )
+(asm float ()
+ (prinst "mov" "%rax" "%r10") # Normalize scale
+ (prinst "shr" "$4" "%r10") # Negative?
+ (prinst "jc" "3f") # Yes: Skip
+ (prinst "testb" "$0x02" "(%r13)") # Short fixnum?
+ (prinst "jz" "2f") # No: Skip
+ (prinst "cvtsi2sd" "%r10" "%xmm7") # Convert scale
+ (prinst "mov" "(%r13)" "%r10") # Normalize fixnum
+ (prinst "shr" "$4" "%r10") # Negative?
+ (prinst "jnc" "1f") # No: Skip
+ (prinst "neg" "%r10") # Else negate
+ (prinl "1:")
+ (prinst "cvtsi2sd" "%r10" "%xmm0") # Convert fixnum to double
+ (prinst "divsd" "%xmm7" "%xmm0") # Divide by scale
+ (prinst "jmp" "4f") # Done
+ (prinl "2:")
+ (prinst "cmpq" "$Nil" "(%r13)") # Minus infinite?
+ (prinst "mov" "$0x7FF0000000000000" "%r10")
+ (prinst "jnz" "1f") # No: Skip
+ (prinst "mov" "$0xFFF0000000000000" "%r10")
+ (prinl "1:")
+ (prinst "push" "%r10")
+ (prinst "movsd" "(%rsp)" "%xmm0")
+ (prinst "add" "$8" "%rsp")
+ (prinst "jmp" "4f") # Done
+ (prinl "3:")
+ (prinst "testb" "$0x02" "(%r13)") # Short fixnum?
+ (prinst "jz" "2f") # No: Skip
+ (prinst "cvtsi2ss" "%r10" "%xmm7") # Convert scale
+ (prinst "mov" "(%r13)" "%r10") # Normalize fixnum
+ (prinst "shr" "$4" "%r10") # Negative?
+ (prinst "jnc" "1f") # No: Skip
+ (prinst "neg" "%r10") # Else negate
+ (prinl "1:")
+ (prinst "cvtsi2ss" "%r10" "%xmm0") # Convert fixnum to float
+ (prinst "divss" "%xmm7" "%xmm0") # Divide by scale
+ (prinst "jmp" "4f") # Done
+ (prinl "2:")
+ (prinst "cmpq" "$Nil" "(%r13)") # Minus infinite?
+ (prinst "mov" "$0x7F800000" "%r10")
+ (prinst "jnz" "1f")
+ (prinst "mov" "$0xFF800000" "%r10")
+ (prinl "1:")
+ (prinst "push" "%r10")
+ (prinst "movss" "(%rsp)" "%xmm0")
+ (prinst "add" "$8" "%rsp")
+ (prinl "4:") )
+
+(asm std ()
+ (prinst "movsd" "%xmm0" "(%r15)") )
+
+(asm stf ()
+ (prinst "movss" "%xmm0" "(%r15)") )
+
(asm cc (Adr A Arg M)
(unless (== 'cc (caar (seek '((L) (== (cadr L) *Statement)) *Program)))
(prinst "mov" "%rdx" "%r12") )
diff --git a/src64/lib/asm.l b/src64/lib/asm.l
@@ -1,4 +1,4 @@
-# 08apr12abu
+# 16apr12abu
# (c) Software Lab. Alexander Burger
# *LittleEndian *AlignedCode *Registers optimize
@@ -431,13 +431,12 @@
(dec (destination) "*Mode")
(div (source) "*Mode")
(drop)
- (dval)
(eval)
(eval+)
(eval/ret)
(exec (reg (read)))
- (fnum)
- (fval)
+ (fixnum)
+ (float)
(hx2 (read))
(inc (destination) "*Mode")
(initCode)
@@ -467,6 +466,8 @@
(ld2 (source) "*Mode")
(ld4 (source) "*Mode")
(ldc (destination) "*Mode" (source) "*Mode")
+ (ldd)
+ (ldf)
(ldnc (destination) "*Mode" (source) "*Mode")
(ldnz (destination) "*Mode" (source) "*Mode")
(ldz (destination) "*Mode" (source) "*Mode")
@@ -506,6 +507,8 @@
(slen (destination) "*Mode" (source) "*Mode")
(st2 (destination) "*Mode")
(st4 (destination) "*Mode")
+ (std)
+ (stf)
(sub (destination) "*Mode" (source) "*Mode")
(subc (destination) "*Mode" (source) "*Mode")
(sym (source) "*Mode")
diff --git a/src64/main.l b/src64/main.l
@@ -1,4 +1,4 @@
-# 08apr12abu
+# 16apr12abu
# (c) Software Lab. Alexander Burger
(code 'Code)
@@ -1499,7 +1499,7 @@
if nz # Yes
push (E) # Pass number or flag
push C # as fixpoint value
- else
+ else # Structure
ld E C # Ignore variable
ld C ((E)) # Get buffer size
shr C 4 # Normalize
@@ -1537,70 +1537,89 @@
add Z 4 # Size of unsigned
sub C 4 # Buffer full?
end
- else
- push C
+ else # (num|sym . cnt) or ([-]1.0 . lst)
push X
- push Y
- ld Y Z # Y on buffer
- ld C (A CDR) # Get length
- shr C 4 # Normalize
- add Z C # Size of buffer
- push C # Save it
- ld A (A) # 'num' or 'sym'
- num A # (num . cnt)?
+ ld X (A CDR) # 'cnt' or 'lst'
+ ld A (A) # 'num', 'sym' or [-]1.0
+ cnt X # 'cnt'?
if nz # Yes
- cnt A # Short?
+ push Y
+ ld Y Z # Y on buffer
+ shr X 4 # Normalize length
+ add Z X # Field width
+ sub C X # New buffer size
+ num A # (num . cnt)?
if nz # Yes
- shr A 4 # Normalize
- if c # Sign?
- neg A # Yes
+ cnt A # Short?
+ if nz # Yes
+ shr A 4 # Normalize
+ if c # Sign?
+ neg A # Yes
+ end
+ else
+ test A SIGN # Sign?
+ if z # No
+ ld A (A DIG)
+ else
+ ld A (A (- DIG SIGN))
+ neg A # Negate
+ end
end
+ ? *LittleEndian
+ do
+ ld (Y) B # Store byte
+ inc Y # Increment pointer
+ shr A 8
+ dec X # Done?
+ until z # Yes
+ =
+ ? (not *LittleEndian)
+ ld Y Z
+ do
+ dec Y # Decrement pointer
+ ld (Y) B # Store byte
+ shr A 8
+ dec X # Done?
+ until z # Yes
+ =
else
- test A SIGN # Sign?
+ sym A # (sym . cnt)?
+ if nz # Yes
+ push C
+ ld X (A TAIL) # Get name
+ call nameX_X
+ ld C 0
+ do
+ call symByteCX_FACX # Next byte
+ while nz
+ ld (Y) B # Store it
+ inc Y # Increment pointer
+ loop
+ set (Y) 0 # Null byte
+ pop C
+ end
+ end
+ pop Y
+ else # ([-]1.0 . lst)
+ do
+ atom X # More fixpoint numbers?
+ while z # Yes
+ float # Convert to floating point
+ test A SIGN # Scale negative?
if z # No
- ld A (A DIG)
+ std # Store double value
+ add Z 8 # Size of double
+ sub C 8 # Decrement buffer size
else
- ld A (A (- DIG SIGN))
- neg A # Negate
+ stf # Store float value
+ add Z 4 # Size of float
+ sub C 4 # Decrement buffer size
end
- end
- ? *LittleEndian
- do
- ld (Y) B # Store byte
- inc Y # Increment pointer
- shr A 8
- dec C # Done?
- until z # Yes
- =
- ? (not *LittleEndian)
- ld Y Z
- do
- dec Y # Decrement pointer
- ld (Y) B # Store byte
- shr A 8
- dec C # Done?
- until z # Yes
- =
- else
- sym A # (sym . cnt)?
- if nz # Yes
- ld X (A TAIL) # Get name
- call nameX_X
- ld C 0
- do
- call symByteCX_FACX # Next byte
- while nz
- ld (Y) B # Store it
- inc Y # Increment pointer
- loop
- set (Y) 0 # Null byte
- end
+ ld X (X CDR)
+ loop
end
- pop A # 'cnt'
- pop Y
pop X
- pop C
- sub C A # Buffer full?
+ null C # Buffer full?
end
until z # Yes
pop Z
@@ -1668,14 +1687,14 @@
if nz # Yes
test E SIGN # Negative?
if z # No
- dval # Get double value
+ ldd # Get double value
add C 8 # Size of double
else
- fval # Get float value
+ ldf # Get float value
add C 4 # Size of float
end
end
- fnum # Get fixpoint number or flg
+ fixnum # Get fixpoint number or flg
else
cmp E ISym # 'I'?
if eq # Yes
diff --git a/src64/tags b/src64/tags
@@ -425,12 +425,12 @@ badFdErrEX err.l 525
badInputErrB err.l 545
balanceCEY sym.l 910
balanceXY sym.l 892
-begString main.l 2242
+begString main.l 2261
binPrintEZ io.l 730
binReadZ_FE io.l 519
blkPeekCEZ db.l 392
blkPokeCEZ db.l 403
-boxE_E main.l 2210
+boxE_E main.l 2229
boxNumA_A gc.l 872
boxNumE_E gc.l 886
boxNum_A gc.l 824
@@ -446,31 +446,31 @@ byteNumBCX_CX io.l 463
byteSymBCX_CX io.l 1291
caseDataA_AC sym.l 3366
caught flow.l 2472
-cbl main.l 1845
-cbl1 main.l 1878
-cbl10 main.l 1914
-cbl11 main.l 1918
-cbl12 main.l 1922
-cbl13 main.l 1926
-cbl14 main.l 1930
-cbl15 main.l 1934
-cbl16 main.l 1938
-cbl17 main.l 1942
-cbl18 main.l 1946
-cbl19 main.l 1950
-cbl2 main.l 1882
-cbl20 main.l 1954
-cbl21 main.l 1958
-cbl22 main.l 1962
-cbl23 main.l 1966
-cbl24 main.l 1970
-cbl3 main.l 1886
-cbl4 main.l 1890
-cbl5 main.l 1894
-cbl6 main.l 1898
-cbl7 main.l 1902
-cbl8 main.l 1906
-cbl9 main.l 1910
+cbl main.l 1864
+cbl1 main.l 1897
+cbl10 main.l 1933
+cbl11 main.l 1937
+cbl12 main.l 1941
+cbl13 main.l 1945
+cbl14 main.l 1949
+cbl15 main.l 1953
+cbl16 main.l 1957
+cbl17 main.l 1961
+cbl18 main.l 1965
+cbl19 main.l 1969
+cbl2 main.l 1901
+cbl20 main.l 1973
+cbl21 main.l 1977
+cbl22 main.l 1981
+cbl23 main.l 1985
+cbl24 main.l 1989
+cbl3 main.l 1905
+cbl4 main.l 1909
+cbl5 main.l 1913
+cbl6 main.l 1917
+cbl7 main.l 1921
+cbl8 main.l 1925
+cbl9 main.l 1929
cellErrAX err.l 438
cellErrEX err.l 440
charSymACX_CX io.l 1256
@@ -534,7 +534,7 @@ ctOpenEXY io.l 1670
currFdX_C io.l 1333
currFd_C io.l 1337
cutLocalCX flow.l 2824
-dateXYZ_E main.l 2357
+dateXYZ_E main.l 2376
dbAEX db.l 1331
dbFetchEX db.l 1319
dbFileBlkY_AC db.l 246
@@ -564,9 +564,9 @@ doAnd flow.l 1613
doAny io.l 3965
doAppend subr.l 1338
doApply apply.l 713
-doArg main.l 2304
-doArgs main.l 2280
-doArgv main.l 2924
+doArg main.l 2323
+doArgs main.l 2299
+doArgv main.l 2943
doArrow subr.l 3916
doAs flow.l 139
doAsoq subr.l 3008
@@ -602,7 +602,7 @@ doCall flow.l 3079
doCar subr.l 5
doCase flow.l 1954
doCatch flow.l 2456
-doCd main.l 2679
+doCd main.l 2698
doCdaaar subr.l 464
doCdaadr subr.l 487
doCdaar subr.l 179
@@ -625,7 +625,7 @@ doCirc subr.l 816
doCircQ subr.l 2402
doClip subr.l 1799
doClose io.l 4381
-doCmd main.l 2906
+doCmd main.l 2925
doCnt apply.l 1413
doCo flow.l 2537
doCol sym.l 3051
@@ -637,9 +637,9 @@ doConnect net.l 224
doCons subr.l 747
doCopy subr.l 1225
doCtl io.l 4254
-doCtty main.l 2704
+doCtty main.l 2723
doCut sym.l 1922
-doDate main.l 2418
+doDate main.l 2437
doDbck db.l 2113
doDe flow.l 532
doDec big.l 2323
@@ -649,7 +649,7 @@ doDel sym.l 1977
doDelete subr.l 1401
doDelq subr.l 1452
doDiff subr.l 2589
-doDir main.l 2837
+doDir main.l 2856
doDiv big.l 2513
doDm flow.l 545
doDo flow.l 2130
@@ -671,7 +671,7 @@ doExtern sym.l 1023
doExtra flow.l 1258
doExtract apply.l 1218
doFifo sym.l 2088
-doFile main.l 2784
+doFile main.l 2803
doFill subr.l 3243
doFilter apply.l 1161
doFin subr.l 2033
@@ -712,7 +712,7 @@ doIfn flow.l 1854
doIn io.l 4194
doInc big.l 2256
doIndex subr.l 2637
-doInfo main.l 2741
+doInfo main.l 2760
doIntern sym.l 998
doIpid flow.l 3198
doIsa flow.l 961
@@ -730,7 +730,7 @@ doLieu db.l 1157
doLine io.l 3699
doLines io.l 3852
doLink subr.l 1172
-doLisp main.l 1976
+doLisp main.l 1995
doList subr.l 887
doListen net.l 157
doLit flow.l 150
@@ -776,7 +776,7 @@ doNand flow.l 1648
doNative main.l 1376
doNeed subr.l 919
doNew flow.l 835
-doNext main.l 2287
+doNext main.l 2306
doNil flow.l 1731
doNond flow.l 1931
doNor flow.l 1669
@@ -790,7 +790,7 @@ doOnOff sym.l 1738
doOne sym.l 1771
doOpen io.l 4338
doOpid flow.l 3214
-doOpt main.l 3027
+doOpt main.l 3046
doOr flow.l 1629
doOut io.l 4214
doPack sym.l 1270
@@ -824,7 +824,7 @@ doPush sym.l 1813
doPush1 sym.l 1849
doPut sym.l 2835
doPutl sym.l 3113
-doPwd main.l 2668
+doPwd main.l 2687
doQueue sym.l 2045
doQuit main.l 1083
doQuote flow.l 134
@@ -836,7 +836,7 @@ doRd io.l 5163
doRead io.l 2656
doRem big.l 2572
doReplace subr.l 1499
-doRest main.l 2333
+doRest main.l 2352
doReverse subr.l 1678
doRewind io.l 5129
doRollback db.l 1898
@@ -881,7 +881,7 @@ doText sym.l 1398
doThrow flow.l 2482
doTick flow.l 3166
doTill io.l 3610
-doTime main.l 2551
+doTime main.l 2570
doTouch sym.l 1172
doTrace flow.l 2950
doTrim subr.l 1759
@@ -895,9 +895,9 @@ doUp main.l 691
doUppQ sym.l 3393
doUppc sym.l 3460
doUse flow.l 1562
-doUsec main.l 2656
+doUsec main.l 2675
doVal sym.l 1588
-doVersion main.l 3041
+doVersion main.l 3060
doWait io.l 3150
doWhen flow.l 1873
doWhile flow.l 2050
@@ -910,7 +910,7 @@ doYield flow.l 2706
doYoke subr.l 1196
doZap sym.l 1186
doZero sym.l 1756
-endString_E main.l 2253
+endString_E main.l 2272
eofErr err.l 534
eolA_F io.l 3684
equalAE_F main.l 770
@@ -919,15 +919,15 @@ errEXYZ err.l 33
errnoC sys/x86-64.linux.code.l 10
errnoEXY err.l 24
errno_A sys/x86-64.linux.code.l 5
-evCntEX_FE main.l 2181
-evCntXY_FE main.l 2179
+evCntEX_FE main.l 2200
+evCntXY_FE main.l 2198
evExprCE_E main.l 1101
evListE_E main.l 1245
evMethodACXYZ_E flow.l 645
-evSymE_E main.l 2156
-evSymX_E main.l 2151
-evSymY_E main.l 2154
-execE main.l 2065
+evSymE_E main.l 2175
+evSymX_E main.l 2170
+evSymY_E main.l 2173
+execE main.l 2084
execErrS main.l 187
extErrEX err.l 434
extNmCE_X db.l 64
@@ -937,7 +937,7 @@ fdRdSetCZL io.l 2718
fdSetCL_X io.l 2706
fdSetC_Y io.l 3309
fdWrSetCZL io.l 2725
-fetchCharC_AC main.l 1810
+fetchCharC_AC main.l 1829
fileObjE_AC db.l 237
fileObjX_AC db.l 211
fillE_FE subr.l 3261
@@ -955,7 +955,7 @@ fmtWordACX_CX big.l 2046
forkErrX err.l 515
forkLispX_FE flow.l 3266
fsyncDB db.l 932
-funqE_FE main.l 2089
+funqE_FE main.l 2108
gc gc.l 65
getAdrZ_A db.l 6
getBinaryZ_FB io.l 447
@@ -997,7 +997,7 @@ isaCE_F flow.l 1012
jnlErrX err.l 618
jnlFileno_A db.l 344
joinLocalCX flow.l 2837
-lisp main.l 2019
+lisp main.l 2038
loadAllX_E main.l 162
loadBEX_E io.l 4072
lockErr err.l 607
@@ -1021,7 +1021,7 @@ methodEY_FCYZ flow.l 791
mkCharA_A sym.l 573
mkStrEZ_A sym.l 650
mkStrE_E sym.l 623
-msec_A main.l 2267
+msec_A main.l 2286
msgErrAX err.l 488
msgErrEX err.l 490
msgErrYX err.l 486
@@ -1030,7 +1030,7 @@ nameA_A sym.l 469
nameE_E sym.l 477
nameX_X sym.l 485
nameY_Y sym.l 493
-natRetACE_CE main.l 1662
+natRetACE_CE main.l 1681
needC gc.l 54
needSymAX err.l 323
needSymEX err.l 335
@@ -1086,7 +1086,7 @@ putACE sym.l 2491
putBlockBZ db.l 612
putSrcEC_E flow.l 25
putStdoutB io.l 4625
-putStringB main.l 2230
+putStringB main.l 2249
putTellBZ io.l 996
putUdpBZ net.l 377
rdAtomBY_E io.l 2117
@@ -1123,7 +1123,7 @@ retnc err.l 710
retnz err.l 716
retz err.l 713
rewindLog db.l 928
-runE_E main.l 2077
+runE_E main.l 2096
rwUnlockDbA db.l 269
s_isdirS_F sys/x86-64.linux.code.l 16
selectErrX err.l 558
@@ -1173,8 +1173,8 @@ tellErr err.l 646
tenfoldA_A big.l 157
testEscA_F io.l 2050
throwErrZX flow.l 2507
-tmDateC_E main.l 2347
-tmTimeY_E main.l 2534
+tmDateC_E main.l 2366
+tmTimeY_E main.l 2553
tokenCE_E io.l 2522
trSyncErrX err.l 602
traceCY flow.l 3022
@@ -1215,10 +1215,10 @@ wrOpenEXY io.l 1495
wrSetCL_F io.l 2737
wrSyncErrX err.l 575
wtermsigS_A sys/x86-64.linux.code.l 34
-xCntAX_FA main.l 2201
-xCntCX_FC main.l 2192
-xCntEX_FE main.l 2183
-xSymE_E main.l 2158
+xCntAX_FA main.l 2220
+xCntCX_FC main.l 2211
+xCntEX_FE main.l 2202
+xSymE_E main.l 2177
xoruAE_A big.l 465
yieldErrEX err.l 482
yieldErrX err.l 480
diff --git a/src64/version.l b/src64/version.l
@@ -1,6 +1,6 @@
-# 10apr12abu
+# 17apr12abu
# (c) Software Lab. Alexander Burger
-(de *Version 3 1 0 1)
+(de *Version 3 1 0 2)
# vi:et:ts=3:sw=3