commit d499ad17e4f3cd5f06e4415569c614a75bd2e8b9
parent c03b796e09e4052826ba3ee6f5034078c0bfd50e
Author: Alexander Burger <abu@software-lab.de>
Date: Mon, 30 Apr 2012 11:36:40 +0200
Stack alignments (64-bit)
Diffstat:
10 files changed, 158 insertions(+), 146 deletions(-)
diff --git a/CHANGES b/CHANGES
@@ -1,4 +1,5 @@
* DDmmm12 picoLisp-3.1.1
+ Stack alignments (64-bit)
Native 'struct' function (64-bit)
double/float in 'native' structures (64-bit)
Allow 'zap' protected symbols outside 'pico' namespace (64-bit)
diff --git a/doc64/asm b/doc64/asm
@@ -1,4 +1,4 @@
-# 16apr12abu
+# 30apr12abu
# (c) Software Lab. Alexander Burger
@@ -163,7 +163,7 @@
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'
+ cc adr reg # C-Call to 'adr' with top of stacked args in 'reg'
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'
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 (2372 . "@src64/main.l")
-args (2348 . "@src64/main.l")
-argv (2992 . "@src64/main.l")
+arg (2365 . "@src64/main.l")
+args (2341 . "@src64/main.l")
+argv (2985 . "@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 (2747 . "@src64/main.l")
+cd (2740 . "@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 (2974 . "@src64/main.l")
+cmd (2967 . "@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 (2772 . "@src64/main.l")
+ctty (2765 . "@src64/main.l")
cut (1922 . "@src64/sym.l")
-date (2486 . "@src64/main.l")
+date (2479 . "@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 (2905 . "@src64/main.l")
+dir (2898 . "@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 (2852 . "@src64/main.l")
+file (2845 . "@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 (2809 . "@src64/main.l")
+info (2802 . "@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 (2044 . "@src64/main.l")
+lisp (2037 . "@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 (2355 . "@src64/main.l")
+next (2348 . "@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 (3095 . "@src64/main.l")
+opt (3088 . "@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 (2736 . "@src64/main.l")
+pwd (2729 . "@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 (2401 . "@src64/main.l")
+rest (2394 . "@src64/main.l")
reverse (1678 . "@src64/subr.l")
rewind (5129 . "@src64/io.l")
rollback (1898 . "@src64/db.l")
@@ -309,7 +309,7 @@ stem (1989 . "@src64/subr.l")
str (4019 . "@src64/io.l")
str? (1136 . "@src64/sym.l")
strip (1576 . "@src64/subr.l")
-struct (1835 . "@src64/main.l")
+struct (1828 . "@src64/main.l")
sub? (1569 . "@src64/sym.l")
sum (1460 . "@src64/apply.l")
super (1214 . "@src64/flow.l")
@@ -325,7 +325,7 @@ text (1398 . "@src64/sym.l")
throw (2482 . "@src64/flow.l")
tick (3166 . "@src64/flow.l")
till (3610 . "@src64/io.l")
-time (2619 . "@src64/main.l")
+time (2612 . "@src64/main.l")
touch (1172 . "@src64/sym.l")
trim (1759 . "@src64/subr.l")
try (1168 . "@src64/flow.l")
@@ -338,9 +338,9 @@ up (691 . "@src64/main.l")
upp? (3393 . "@src64/sym.l")
uppc (3460 . "@src64/sym.l")
use (1562 . "@src64/flow.l")
-usec (2724 . "@src64/main.l")
+usec (2717 . "@src64/main.l")
val (1588 . "@src64/sym.l")
-version (3109 . "@src64/main.l")
+version (3102 . "@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,3};
+static byte Version[4] = {3,1,0,4};
diff --git a/src64/arch/ppc64.l b/src64/arch/ppc64.l
@@ -1,4 +1,4 @@
-# 16apr12abu
+# 30apr12abu
# (c) Software Lab. Alexander Burger
# Byte order
@@ -1109,7 +1109,7 @@
(off Lea) ) )
Arg
M ) )
- (let Lim 27
+ (let Lim 27 #{MADA}#
(prinst "mr" Lim Arg)
(prinst "ld" 11 "flt1@got(2)")
(for R Reg
diff --git a/src64/arch/x86-64.l b/src64/arch/x86-64.l
@@ -1,4 +1,4 @@
-# 16apr12abu
+# 30apr12abu
# (c) Software Lab. Alexander Burger
# Byte order
@@ -676,10 +676,6 @@
(let Reg '("%rdi" "%rsi" "%rdx" "%rcx" "%r8" "%r9")
(if (lst? Arg)
(let Lea NIL
- (when (nth Arg 7)
- (setq # Maximally 6 args in registers
- Arg (append (head 6 Arg) (reverse (tail -6 Arg)))
- M (append (head 6 M) (reverse (tail -6 M))) ) )
(mapc
'((Src S)
(if (== '& Src)
@@ -694,43 +690,70 @@
(T (cons (recurse (car Src)) (recurse (cdr Src)))) ) )
S ) ) )
(cond
- ((not Reg) # 'Src' not stack-relative here!
- (ifn Lea
- (prinst "pushq" Src)
- (prinst "lea" Src "%rax")
- (prinst "pushq" "%rax") ) )
((and (=0 S) (= "0" Src))
(prinst "xor" (car Reg) (pop 'Reg)) )
((= "$pop" Src)
(prinst "pop" (pop 'Reg)) )
(T (prinst (if Lea "lea" "mov") Src (pop 'Reg))) )
(off Lea) ) )
- Arg
- M )
+ (head 6 Arg)
+ (head 6 M) )
+ (prinst "push" "%rbp")
+ (prinst "mov" "%rsp" "%rbp")
+ (when (nth Arg 7) # Maximally 6 args in registers
+ (prinst "sub" (pack "$" (* 8 (length @))) "%rsp") )
+ (prinst "andb" "$~15" "%spl") # Align stack
+ (let Ofs 0
+ (mapc # 'Src' not lea or stack-relative here!
+ '((Src S)
+ (unless (and (=0 S) (= "0" Src)) # Keep for 'xor' later
+ (setq Src
+ (src
+ (recur (Src)
+ (cond
+ ((= "%rdx" Src) "%r12")
+ ((atom Src) Src)
+ (T (cons (recurse (car Src)) (recurse (cdr Src)))) ) )
+ S ) ) )
+ (ifn (and (=0 S) (= "0" Src))
+ (prinst "movq" Src (pack Ofs "(%rsp)"))
+ (prinst "xor" "%rax" "%rax")
+ (prinst "movq" "%rax" (pack Ofs "(%rsp)")) )
+ (inc 'Ofs 8) )
+ (nth Arg 7)
+ (nth M 7) ) )
# Don't use SSE registers in varargs for static calls
(when (member Adr '("printf" "fprintf" "sprintf" "open" "fcntl"))
(prinst "xor" "%al" "%al") ) )
+ (prinst "mov" "%rsp" "%rax") # A on arguments
+ (prinst "push" "%rbp")
+ (prinst "mov" "%rsp" "%rbp")
+ (prinst "mov" Arg "%rbx")
+ (prinst "sub" "%rax" "%rbx") # Size of arguments
+ (prinst "sub" "%rbx" "%rsp") # Allocate space
+ (prinst "andb" "$~15" "%spl") # Align stack
+ (prinst "mov" "%rsp" "%rbx") # E on stack space
(prinst "lea" "5f(%rip)" "%r11")
(mapc
'((R X)
(prinl "1:")
- (prinst "cmp" "%rsp" Arg)
+ (prinst "cmp" "%rax" Arg)
(prinst "jz" "9f")
- (prinst "pop" "%r10")
+ (prinst "mov" "(%rax)" "%r10")
+ (prinst "add" "$16" "%rax")
(prinst "or" "%r10" "%r10")
(prinst "jz" "7f")
(prinst "call" "*%r11")
- (prinst "add" "$8" "%rsp")
(prinst "jmp" "1b")
(prinl "5:")
(unless (= R "%r9")
(prinst "lea" "(5f-5b)(%r11)" "%r11") )
(prinst "shr" "$4" "%r10")
(prinst "jc" "3f")
- (prinst "testb" "$0x02" "8(%rsp)")
+ (prinst "testb" "$0x02" "-8(%rax)")
(prinst "jz" "2f")
(prinst "cvtsi2sd" "%r10" "%xmm7")
- (prinst "mov" "8(%rsp)" "%r10")
+ (prinst "mov" "-8(%rax)" "%r10")
(prinst "shr" "$4" "%r10")
(prinst "jnc" "1f")
(prinst "neg" "%r10")
@@ -739,19 +762,19 @@
(prinst "divsd" "%xmm7" X)
(prinst "ret")
(prinl "2:")
- (prinst "cmpq" "$Nil" "8(%rsp)")
+ (prinst "cmpq" "$Nil" "-8(%rax)")
(prinst "mov" "$0x7FF0000000000000" "%r10")
(prinst "jnz" "1f")
(prinst "mov" "$0xFFF0000000000000" "%r10")
(prinl "1:")
- (prinst "mov" "%r10" "8(%rsp)")
- (prinst "movsd" "8(%rsp)" X)
+ (prinst "mov" "%r10" "-8(%rax)")
+ (prinst "movsd" "-8(%rax)" X)
(prinst "ret")
(prinl "3:")
- (prinst "testb" "$0x02" "8(%rsp)")
+ (prinst "testb" "$0x02" "-8(%rax)")
(prinst "jz" "2f")
(prinst "cvtsi2ss" "%r10" "%xmm7")
- (prinst "mov" "8(%rsp)" "%r10")
+ (prinst "mov" "-8(%rax)" "%r10")
(prinst "shr" "$4" "%r10")
(prinst "jnc" "1f")
(prinst "neg" "%r10")
@@ -760,37 +783,32 @@
(prinst "divss" "%xmm7" X)
(prinst "ret")
(prinl "2:")
- (prinst "cmpq" "$Nil" "8(%rsp)")
+ (prinst "cmpq" "$Nil" "-8(%rax)")
(prinst "mov" "$0x7F800000" "%r10")
(prinst "jnz" "1f")
(prinst "mov" "$0xFF800000" "%r10")
(prinl "1:")
- (prinst "mov" "%r10" "8(%rsp)")
- (prinst "movss" "8(%rsp)" X)
+ (prinst "mov" "%r10" "-8(%rax)")
+ (prinst "movss" "-8(%rax)" X)
(prinst "ret")
(prinl "7:")
- (prinst "pop" R) )
+ (prinst "mov" "-8(%rax)" R) )
Reg
'("%xmm0" "%xmm1" "%xmm2" "%xmm3" "%xmm4" "%xmm5") )
- (prinst "mov" Arg "%r11")
(prinl "1:")
- (prinst "cmp" "%rsp" Arg)
- (prinst "jz" "1f")
- (prinst "sub" "$16" Arg)
- (prinst "sub" "$8" "%r11")
- (prinst "mov" (pack "8(" Arg ")") "%r10")
- (prinst "or" "%r10" "(%r11)")
+ (prinst "cmp" "%rax" Arg)
+ (prinst "jz" "9f")
+ (prinst "mov" "8(%rax)" "%r10")
+ (prinst "add" "$16" "%rax")
+ (prinst "mov" "%r10" "(%rbx)")
+ (prinst "add" "$8" "%rbx")
(prinst "jmp 1b")
- (prinl "1:")
- (prinst "mov" "%r11" "%rsp")
(prinl "9:")
# Maximally 6 SSE registers in varargs for dynamic calls
(prinst "mov" "$6" "%al") ) )
((get 'call 'asm) Adr A)
- (and
- (lst? Arg)
- (gt0 (- (length Arg) 6))
- (prinst "lea" (pack (* @ 8) "(%rsp)") "%rsp") )
+ (prinst "mov" "%rbp" "%rsp")
+ (prinst "pop" "%rbp")
(unless (== 'cc (caadr (memq *Statement *Program)))
(prinst "mov" "%r12" "%rdx")
(prinst "xor" "%r12" "%r12") ) )
diff --git a/src64/main.l b/src64/main.l
@@ -1,4 +1,4 @@
-# 23apr12abu
+# 30apr12abu
# (c) Software Lab. Alexander Burger
(code 'Code)
@@ -1459,6 +1459,8 @@
loop
ld X S # X on last argument
link
+ push (Link) # Save Link
+ ld (Link) L
lea Y (Z -II) # Limit
do
cmp X Y # More args?
@@ -1534,22 +1536,13 @@
end
add X I # Next arg
loop
- ld X S # Start of args in X
- off S 15 # Align stack to cell boundary
- ld A S # Keep end of duplicated args in A
- ld C L # Top of args
- sub C X # Bytes
- sub S C # Space for args
- movm (S) (X) (L) # Duplicate args
+ lea X (L -I) # Top of arguments
ld Y (Z) # Get function pointer
- cc (Y) A # Call C-function
- ld S X # Drop duplicated args
+ cc (Y) X # Call C-function
+ ld (Link) (L -I) # Restore Link
ld E (Z -II) # Get result specification
ld C 0 # No pointer yet
- push (Link) # Save L
- ld (Link) L
call natRetACE_CE # Extract return value
- pop (Link)
ld (Z -II) E # Save result
lea Y (Z -III) # Clean up allocated C args
do
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 2310
+begString main.l 2303
binPrintEZ io.l 730
binReadZ_FE io.l 519
blkPeekCEZ db.l 392
blkPokeCEZ db.l 403
-boxE_E main.l 2278
+boxE_E main.l 2271
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 1913
-cbl1 main.l 1946
-cbl10 main.l 1982
-cbl11 main.l 1986
-cbl12 main.l 1990
-cbl13 main.l 1994
-cbl14 main.l 1998
-cbl15 main.l 2002
-cbl16 main.l 2006
-cbl17 main.l 2010
-cbl18 main.l 2014
-cbl19 main.l 2018
-cbl2 main.l 1950
-cbl20 main.l 2022
-cbl21 main.l 2026
-cbl22 main.l 2030
-cbl23 main.l 2034
-cbl24 main.l 2038
-cbl3 main.l 1954
-cbl4 main.l 1958
-cbl5 main.l 1962
-cbl6 main.l 1966
-cbl7 main.l 1970
-cbl8 main.l 1974
-cbl9 main.l 1978
+cbl main.l 1906
+cbl1 main.l 1939
+cbl10 main.l 1975
+cbl11 main.l 1979
+cbl12 main.l 1983
+cbl13 main.l 1987
+cbl14 main.l 1991
+cbl15 main.l 1995
+cbl16 main.l 1999
+cbl17 main.l 2003
+cbl18 main.l 2007
+cbl19 main.l 2011
+cbl2 main.l 1943
+cbl20 main.l 2015
+cbl21 main.l 2019
+cbl22 main.l 2023
+cbl23 main.l 2027
+cbl24 main.l 2031
+cbl3 main.l 1947
+cbl4 main.l 1951
+cbl5 main.l 1955
+cbl6 main.l 1959
+cbl7 main.l 1963
+cbl8 main.l 1967
+cbl9 main.l 1971
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 2425
+dateXYZ_E main.l 2418
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 2372
-doArgs main.l 2348
-doArgv main.l 2992
+doArg main.l 2365
+doArgs main.l 2341
+doArgv main.l 2985
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 2747
+doCd main.l 2740
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 2974
+doCmd main.l 2967
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 2772
+doCtty main.l 2765
doCut sym.l 1922
-doDate main.l 2486
+doDate main.l 2479
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 2905
+doDir main.l 2898
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 2852
+doFile main.l 2845
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 2809
+doInfo main.l 2802
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 2044
+doLisp main.l 2037
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 2355
+doNext main.l 2348
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 3095
+doOpt main.l 3088
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 2736
+doPwd main.l 2729
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 2401
+doRest main.l 2394
doReverse subr.l 1678
doRewind io.l 5129
doRollback db.l 1898
@@ -865,7 +865,7 @@ doStem subr.l 1989
doStr io.l 4019
doStrQ sym.l 1136
doStrip subr.l 1576
-doStruct main.l 1835
+doStruct main.l 1828
doSub big.l 2209
doSubQ sym.l 1569
doSum apply.l 1460
@@ -882,7 +882,7 @@ doText sym.l 1398
doThrow flow.l 2482
doTick flow.l 3166
doTill io.l 3610
-doTime main.l 2619
+doTime main.l 2612
doTouch sym.l 1172
doTrace flow.l 2950
doTrim subr.l 1759
@@ -896,9 +896,9 @@ doUp main.l 691
doUppQ sym.l 3393
doUppc sym.l 3460
doUse flow.l 1562
-doUsec main.l 2724
+doUsec main.l 2717
doVal sym.l 1588
-doVersion main.l 3109
+doVersion main.l 3102
doWait io.l 3150
doWhen flow.l 1873
doWhile flow.l 2050
@@ -911,7 +911,7 @@ doYield flow.l 2706
doYoke subr.l 1196
doZap sym.l 1186
doZero sym.l 1756
-endString_E main.l 2321
+endString_E main.l 2314
eofErr err.l 534
eolA_F io.l 3684
equalAE_F main.l 770
@@ -920,15 +920,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 2249
-evCntXY_FE main.l 2247
+evCntEX_FE main.l 2242
+evCntXY_FE main.l 2240
evExprCE_E main.l 1101
evListE_E main.l 1245
evMethodACXYZ_E flow.l 645
-evSymE_E main.l 2224
-evSymX_E main.l 2219
-evSymY_E main.l 2222
-execE main.l 2133
+evSymE_E main.l 2217
+evSymX_E main.l 2212
+evSymY_E main.l 2215
+execE main.l 2126
execErrS main.l 187
extErrEX err.l 434
extNmCE_X db.l 64
@@ -938,7 +938,7 @@ fdRdSetCZL io.l 2718
fdSetCL_X io.l 2706
fdSetC_Y io.l 3309
fdWrSetCZL io.l 2725
-fetchCharC_AC main.l 1878
+fetchCharC_AC main.l 1871
fileObjE_AC db.l 237
fileObjX_AC db.l 211
fillE_FE subr.l 3261
@@ -956,7 +956,7 @@ fmtWordACX_CX big.l 2046
forkErrX err.l 515
forkLispX_FE flow.l 3266
fsyncDB db.l 932
-funqE_FE main.l 2157
+funqE_FE main.l 2150
gc gc.l 65
getAdrZ_A db.l 6
getBinaryZ_FB io.l 447
@@ -998,7 +998,7 @@ isaCE_F flow.l 1012
jnlErrX err.l 618
jnlFileno_A db.l 344
joinLocalCX flow.l 2837
-lisp main.l 2087
+lisp main.l 2080
loadAllX_E main.l 162
loadBEX_E io.l 4072
lockErr err.l 607
@@ -1022,7 +1022,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 2335
+msec_A main.l 2328
msgErrAX err.l 488
msgErrEX err.l 490
msgErrYX err.l 486
@@ -1031,8 +1031,8 @@ nameA_A sym.l 469
nameE_E sym.l 477
nameX_X sym.l 485
nameY_Y sym.l 493
-natBufACZ_CZ main.l 1587
-natRetACE_CE main.l 1686
+natBufACZ_CZ main.l 1580
+natRetACE_CE main.l 1679
needC gc.l 54
needSymAX err.l 323
needSymEX err.l 335
@@ -1088,7 +1088,7 @@ putACE sym.l 2491
putBlockBZ db.l 612
putSrcEC_E flow.l 25
putStdoutB io.l 4625
-putStringB main.l 2298
+putStringB main.l 2291
putTellBZ io.l 996
putUdpBZ net.l 377
rdAtomBY_E io.l 2117
@@ -1125,7 +1125,7 @@ retnc err.l 710
retnz err.l 716
retz err.l 713
rewindLog db.l 928
-runE_E main.l 2145
+runE_E main.l 2138
rwUnlockDbA db.l 269
s_isdirS_F sys/x86-64.linux.code.l 16
selectErrX err.l 558
@@ -1175,8 +1175,8 @@ tellErr err.l 646
tenfoldA_A big.l 157
testEscA_F io.l 2050
throwErrZX flow.l 2507
-tmDateC_E main.l 2415
-tmTimeY_E main.l 2602
+tmDateC_E main.l 2408
+tmTimeY_E main.l 2595
tokenCE_E io.l 2522
trSyncErrX err.l 602
traceCY flow.l 3022
@@ -1217,10 +1217,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 2269
-xCntCX_FC main.l 2260
-xCntEX_FE main.l 2251
-xSymE_E main.l 2226
+xCntAX_FA main.l 2262
+xCntCX_FC main.l 2253
+xCntEX_FE main.l 2244
+xSymE_E main.l 2219
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 @@
-# 23apr12abu
+# 30apr12abu
# (c) Software Lab. Alexander Burger
-(de *Version 3 1 0 3)
+(de *Version 3 1 0 4)
# vi:et:ts=3:sw=3