From 587de89e22127341b00d6917d725cd7da09702c4 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 15 Dec 2005 01:29:32 +0000 Subject: [PATCH] bootstrap fix --- TODO.FACTOR.txt | 1 + library/bootstrap/boot-stage1.factor | 7 ++--- library/bootstrap/image.factor | 18 +++++------ library/compiler/amd64/assembler.factor | 33 ++++++++++---------- library/compiler/ppc/stack.factor | 4 +-- library/compiler/x86/assembler.factor | 41 ++++++++++++------------- library/kernel.factor | 2 +- library/test/compiler/optimizer.factor | 4 +-- library/test/kernel.factor | 6 +++- 9 files changed, 59 insertions(+), 57 deletions(-) diff --git a/TODO.FACTOR.txt b/TODO.FACTOR.txt index 9e68303c09..7998f3141b 100644 --- a/TODO.FACTOR.txt +++ b/TODO.FACTOR.txt @@ -1,5 +1,6 @@ + 0.80: +- make-image leaks memory - does parsing cons excessive amounts of bignums with c-streams - -with combinators are awkward - cleanups: diff --git a/library/bootstrap/boot-stage1.factor b/library/bootstrap/boot-stage1.factor index 51324e904a..039776825e 100644 --- a/library/bootstrap/boot-stage1.factor +++ b/library/bootstrap/boot-stage1.factor @@ -201,13 +201,12 @@ vectors words ; [ dup "x86" = ] [ { "/library/compiler/x86/assembler.factor" - "/library/compiler/amd64/assembler.factor" - "/library/compiler/amd64/architecture.factor" + "/library/compiler/x86/architecture.factor" "/library/compiler/x86/generator.factor" "/library/compiler/x86/slots.factor" "/library/compiler/x86/stack.factor" "/library/compiler/x86/fixnum.factor" - "/library/compiler/amd64/alien.factor" + "/library/compiler/x86/alien.factor" } ] } { @@ -236,7 +235,7 @@ vectors words ; } ] } - } cond [ parse-resource % ] each + } cond [ parse-resource % ] each drop [ "/library/bootstrap/boot-stage2.factor" run-resource diff --git a/library/bootstrap/image.factor b/library/bootstrap/image.factor index 578d991a80..b184808f75 100644 --- a/library/bootstrap/image.factor +++ b/library/bootstrap/image.factor @@ -317,13 +317,16 @@ M: hashtable ' ( hashtable -- pointer ) ( Image output ) : (write-image) ( image -- ) - cell swap big-endian get [ + cell get swap big-endian get [ [ swap >be write ] each-with ] [ [ swap >le write ] each-with ] if ; -: write-image ( image file -- ) +: image-name + "boot.image." architecture get append ; + +: write-image ( image -- ) "Writing image to " write dup write "..." print [ (write-image) ] with-stream ; @@ -335,19 +338,16 @@ M: hashtable ' ( hashtable -- pointer ) bootstrapping? on dup architecture set prepare-profile 800000 image set 20000 objects set ; -: ( architecture -- image ) +: make-image ( architecture -- ) + #! Make a bootstrap image for the given architecture + #! (x86, ppc, or amd64). [ prepare-image begin-image "/library/bootstrap/boot-stage1.factor" run-resource end-image - image get + image get image-name write-image ] with-scope ; -: make-image ( architecture -- ) - #! Make a bootstrap image for the given architecture - #! (x86, ppc, or amd64). - dup "boot.image." rot append write-image ; - : make-images ( -- ) "x86" make-image "ppc" make-image "amd64" make-image ; diff --git a/library/compiler/amd64/assembler.factor b/library/compiler/amd64/assembler.factor index 610134d9b0..c51ee8a063 100644 --- a/library/compiler/amd64/assembler.factor +++ b/library/compiler/amd64/assembler.factor @@ -3,20 +3,19 @@ IN: assembler ! AMD64 registers -REGISTER: RAX 0 64 -REGISTER: RCX 1 64 -REGISTER: RDX 2 64 -REGISTER: RBX 3 64 -REGISTER: RSP 4 64 -REGISTER: RBP 5 64 -REGISTER: RSI 6 64 -REGISTER: RDI 7 64 - -REGISTER: R8 8 64 -REGISTER: R9 9 64 -REGISTER: R10 10 64 -REGISTER: R11 11 64 -REGISTER: R12 12 64 -REGISTER: R13 13 64 -REGISTER: R14 14 64 -REGISTER: R15 15 64 +SYMBOL: RAX \ RAX 0 64 define-register +SYMBOL: RCX \ RCX 1 64 define-register +SYMBOL: RDX \ RDX 2 64 define-register +SYMBOL: RBX \ RBX 3 64 define-register +SYMBOL: RSP \ RSP 4 64 define-register +SYMBOL: RBP \ RBP 5 64 define-register +SYMBOL: RSI \ RSI 6 64 define-register +SYMBOL: RDI \ RDI 7 64 define-register +SYMBOL: R8 \ R8 8 64 define-register +SYMBOL: R9 \ R9 9 64 define-register +SYMBOL: R10 \ R10 10 64 define-register +SYMBOL: R11 \ R11 11 64 define-register +SYMBOL: R12 \ R12 12 64 define-register +SYMBOL: R13 \ R13 13 64 define-register +SYMBOL: R14 \ R14 14 64 define-register +SYMBOL: R15 \ R15 15 64 define-register diff --git a/library/compiler/ppc/stack.factor b/library/compiler/ppc/stack.factor index e069f7685b..167b617740 100644 --- a/library/compiler/ppc/stack.factor +++ b/library/compiler/ppc/stack.factor @@ -25,7 +25,7 @@ M: %replace generate-node ( vop -- ) drop 0 input-operand 0 output loc>operand STW ; M: %inc-d generate-node ( vop -- ) - drop 14 14 0 input cell * ADDI ; + drop 14 14 0 input cells ADDI ; M: %inc-r generate-node ( vop -- ) - drop 15 15 0 input cell * ADDI ; + drop 15 15 0 input cells ADDI ; diff --git a/library/compiler/x86/assembler.factor b/library/compiler/x86/assembler.factor index 1734b6e63f..b405802d2a 100644 --- a/library/compiler/x86/assembler.factor +++ b/library/compiler/x86/assembler.factor @@ -2,7 +2,7 @@ ! See http://factor.sf.net/license.txt for BSD license. IN: assembler USING: arrays compiler errors generic kernel kernel-internals -lists math parser sequences words ; +lists math namespaces parser sequences words ; ! A postfix assembler for x86 and AMD64. @@ -23,29 +23,28 @@ M: object extended? drop f ; M: object operand-64? drop cell get 8 = ; ( Register operands -- eg, ECX ) -: REGISTER: - CREATE dup define-symbol - dup scan-word "register" set-word-prop - scan-word "register-size" set-word-prop ; parsing +: define-register ( symbol num size -- ) + >r dupd "register" set-word-prop r> + "register-size" set-word-prop ; ! x86 registers -REGISTER: AX 0 16 -REGISTER: CX 1 16 -REGISTER: DX 2 16 -REGISTER: BX 3 16 -REGISTER: SP 4 16 -REGISTER: BP 5 16 -REGISTER: SI 6 16 -REGISTER: DI 7 16 +SYMBOL: AX \ AX 0 16 define-register +SYMBOL: CX \ CX 1 16 define-register +SYMBOL: DX \ DX 2 16 define-register +SYMBOL: BX \ BX 3 16 define-register +SYMBOL: SP \ SP 4 16 define-register +SYMBOL: BP \ BP 5 16 define-register +SYMBOL: SI \ SI 6 16 define-register +SYMBOL: DI \ DI 7 16 define-register -REGISTER: EAX 0 32 -REGISTER: ECX 1 32 -REGISTER: EDX 2 32 -REGISTER: EBX 3 32 -REGISTER: ESP 4 32 -REGISTER: EBP 5 32 -REGISTER: ESI 6 32 -REGISTER: EDI 7 32 +SYMBOL: EAX \ EAX 0 32 define-register +SYMBOL: ECX \ ECX 1 32 define-register +SYMBOL: EDX \ EDX 2 32 define-register +SYMBOL: EBX \ EBX 3 32 define-register +SYMBOL: ESP \ ESP 4 32 define-register +SYMBOL: EBP \ EBP 5 32 define-register +SYMBOL: ESI \ ESI 6 32 define-register +SYMBOL: EDI \ EDI 7 32 define-register PREDICATE: word register "register" word-prop ; diff --git a/library/kernel.factor b/library/kernel.factor index a05e4fa25b..225f8b39ba 100644 --- a/library/kernel.factor +++ b/library/kernel.factor @@ -139,4 +139,4 @@ IN: kernel-internals : float-tag BIN: 101 ; inline : complex-tag BIN: 110 ; inline -: cell 17 getenv ; inline +SYMBOL: cell diff --git a/library/test/compiler/optimizer.factor b/library/test/compiler/optimizer.factor index c3c8fdf790..badbb8d8f0 100644 --- a/library/test/compiler/optimizer.factor +++ b/library/test/compiler/optimizer.factor @@ -50,11 +50,11 @@ IN: temporary [ t ] [ [ [ 1 ] [ 2 ] ] [ [ 1 ] [ 2 ] if ] kill-set= ] unit-test -: literal-kill-test-1 4 compiled-offset cell 2 * - ; compiled +: literal-kill-test-1 4 compiled-offset 2 cells - ; compiled [ 4 ] [ literal-kill-test-1 drop ] unit-test -: literal-kill-test-2 3 compiled-offset cell 2 * - ; compiled +: literal-kill-test-2 3 compiled-offset 2 cells - ; compiled [ 3 ] [ literal-kill-test-2 drop ] unit-test diff --git a/library/test/kernel.factor b/library/test/kernel.factor index 488541ef20..32f3d81e86 100644 --- a/library/test/kernel.factor +++ b/library/test/kernel.factor @@ -1,8 +1,12 @@ IN: scratchpad -USING: kernel memory namespaces sequences test ; +USING: kernel kernel-internals math memory namespaces sequences +test ; [ 0 ] [ f size ] unit-test [ t ] [ [ \ = \ = ] all-equal? ] unit-test ! (clone) primitive was missing GC check [ ] [ 1000000 [ drop H{ } clone >n n> drop ] each ] unit-test + +[ cell ] [ cell ] unit-test +[ t ] [ cell get integer? ] unit-test