--- gforth/cross.fs 1995/01/24 17:31:17 1.20 +++ gforth/cross.fs 1995/02/23 20:17:16 1.24 @@ -1,5 +1,5 @@ \ CROSS.FS The Cross-Compiler 06oct92py -\ $Id: cross.fs,v 1.20 1995/01/24 17:31:17 pazsan Exp $ +\ $Id: cross.fs,v 1.24 1995/02/23 20:17:16 pazsan Exp $ \ Idea and implementation: Bernd Paysan (py) \ Copyright 1992-94 by the GNU Forth Development Group @@ -23,6 +23,10 @@ \ include other.fs \ ansforth extentions for cross +: string, ( c-addr u -- ) + \ puts down string as cstring + dup c, here swap chars dup allot move ; +' falign Alias cfalign : comment? ( c-addr u -- c-addr u ) 2dup s" (" compare 0= IF postpone ( @@ -39,10 +43,10 @@ decimal VARIABLE GhostNames 0 GhostNames ! : GhostName ( -- addr ) - here GhostNames @ , GhostNames ! here 0 , - bl word count -\ 2dup type space - dup c, here over chars allot swap move align ; + here GhostNames @ , GhostNames ! here 0 , + bl word count + \ 2dup type space + string, cfalign ; hex @@ -116,8 +120,9 @@ H -4 Constant :dovar -5 Constant :douser -6 Constant :dodefer --7 Constant :dodoes --8 Constant :doesjump +-7 Constant :dostruc +-8 Constant :dodoes +-9 Constant :doesjump >CROSS @@ -172,11 +177,18 @@ CREATE Bittable 80 c, 40 c, 20 c, 10 c, : align+ ( taddr -- rest ) cell tuck 1- and - [ cell 1- ] Literal and ; +: cfalign+ ( taddr -- rest ) + \ see kernal.fs:cfaligned + float tuck 1- and - [ float 1- ] Literal and ; >TARGET : aligned ( taddr -- ta-addr ) dup align+ + ; \ assumes cell alignment granularity (as GNU C) +: cfaligned ( taddr1 -- taddr2 ) + \ see kernal.fs + dup cfalign+ + ; + >CROSS : >image ( taddr -- absaddr ) image @ + ; >TARGET @@ -195,6 +207,8 @@ CREATE Bittable 80 c, 40 c, 20 c, 10 c, : , ( w -- ) T here H cell T allot ! H ; : c, ( char -- ) T here 1 allot c! H ; : align ( -- ) T here H align+ 0 ?DO bl T c, H LOOP ; +: cfalign ( -- ) + T here H cfalign+ 0 ?DO bl T c, H LOOP ; : A! dup relon T ! H ; : A, ( w -- ) T here H relon T , H ; @@ -274,7 +288,7 @@ VARIABLE Already UNTIL 2 cells + count cr ." CROSS: Exists: " type 4 spaces drop swap cell+ ! - ELSE true ABORT" CROSS: Ghostnames inconsistent" + ELSE true abort" CROSS: Ghostnames inconsistent " THEN ; : resolve ( ghost tcfa -- ) @@ -344,7 +358,7 @@ VARIABLE ^imm : string, ( addr count -- ) dup T c, H bounds DO I c@ T c, H LOOP ; -: name, ( "name" -- ) bl word count string, T align H ; +: name, ( "name" -- ) bl word count string, T cfalign H ; : view, ( -- ) ( dummy ) ; VARIABLE CreateFlag CreateFlag off @@ -591,6 +605,10 @@ Build: ( n -- ) T A, H ; by Constant Builder AConstant +Build: ( d -- ) T , , H ; +DO: ( ghost -- d ) T dup cell+ @ swap @ H ;DO +Builder 2Constant + Build: T 0 , H ; by Constant Builder Value @@ -600,6 +618,29 @@ DO: ( ghost -- ) ABORT" CROSS: Don't exe Builder Defer by Defer :dodefer resolve +\ Sturctures 23feb95py + +>CROSS +: nalign ( addr1 n -- addr2 ) +\ addr2 is the aligned version of addr1 wrt the alignment size n + 1- tuck + swap invert and ; +>TARGET + +Build: >r rot r@ nalign dup T , H ( align1 size offset ) + + swap r> nalign ; +DO: T @ H + ;DO +Builder Field +by Field :dostruc resolve + +: struct T 0 1 chars H ; +: end-struct T 2Constant H ; + +: cells: ( n -- size align ) + T cells 1 cells H ; + +\ ' 2Constant Alias2 end-struct +\ 0 1 T Chars H 2Constant struct + \ structural conditionals 17dec92py >CROSS