Diff for /gforth/prim between versions 1.145 and 1.148

version 1.145, 2003/10/09 14:15:19 version 1.148, 2003/11/06 09:47:49
Line 138 Line 138
   
 \ Stack caching setup  \ Stack caching setup
   
 \E register IPTOS Cell  ifdef(`M4_ENGINE_FAST', `include(cache1.vmg)', `include(cache0.vmg)')
 \E register spTOS Cell  
 \E register sp1 Cell  
 \E register sp2 Cell  
 \E register sp3 Cell  
   
 \E create IPregs IPTOS ,  
 \E create regs sp2 , sp1 , spTOS ,  
   
 \E IPregs 1 0 stack-state IPss1  
 \E regs 3 cells + 0 0 stack-state ss0  
 \E regs 2 cells + 1  0 stack-state ss1  
 \E regs 1 cells + 2  1 stack-state ss2  
 \E regs 0 cells + 3  2 stack-state ss3  
   
 \ the first of these is the default state  
 \E state S0  
 \E state S1  
 \E state S2  
 \E state S3  
   
 \E ss0 data-stack S0 set-ss  
 \E ss1 data-stack S1 set-ss  
 \E ss2 data-stack S2 set-ss  
 \E ss3 data-stack S3 set-ss  
   
 \E IPss1 inst-stream S0 set-ss  
 \E IPss1 inst-stream S1 set-ss  
 \E IPss1 inst-stream S2 set-ss  
 \E IPss1 inst-stream S3 set-ss  
   
 \E data-stack to cache-stack  
 \E here 4 cache-states 2! s0 , s1 , s2 , s3 ,  
   
 \ !! the following should be automatic  
 \E S0 to state-default  
 \E state-default to state-in  
 \E state-default to state-out  
   
 \ these m4 macros would collide with identifiers  \ these m4 macros would collide with identifiers
 undefine(`index')  undefine(`index')
Line 189  undefine(`symbols') Line 152  undefine(`symbols')
   
 (docol) ( -- R:a_retaddr )      gforth-internal paren_docol  (docol) ( -- R:a_retaddr )      gforth-internal paren_docol
 ""run-time routine for colon definitions""  ""run-time routine for colon definitions""
   #ifdef NO_IP
   a_retaddr = next_code;
   INST_TAIL;
   goto **(Label *)PFA(CFA);
   #else /* !defined(NO_IP) */
 a_retaddr = (Cell *)IP;  a_retaddr = (Cell *)IP;
 SET_IP((Xt *)PFA(CFA));  SET_IP((Xt *)PFA(CFA));
   #endif /* !defined(NO_IP) */
   
 (docon) ( -- w )        gforth-internal paren_docon  (docon) ( -- w )        gforth-internal paren_docon
 ""run-time routine for constants""  ""run-time routine for constants""
 w = *(Cell *)PFA(CFA);  w = *(Cell *)PFA(CFA);
   #ifdef NO_IP
   INST_TAIL;
   goto *next_code;
   #endif /* defined(NO_IP) */
   
 (dovar) ( -- a_body )   gforth-internal paren_dovar  (dovar) ( -- a_body )   gforth-internal paren_dovar
 ""run-time routine for variables and CREATEd words""  ""run-time routine for variables and CREATEd words""
 a_body = PFA(CFA);  a_body = PFA(CFA);
   #ifdef NO_IP
   INST_TAIL;
   goto *next_code;
   #endif /* defined(NO_IP) */
   
 (douser) ( -- a_user )  gforth-internal paren_douser  (douser) ( -- a_user )  gforth-internal paren_douser
 ""run-time routine for constants""  ""run-time routine for constants""
 a_user = (Cell *)(up+*(Cell *)PFA(CFA));  a_user = (Cell *)(up+*(Cell *)PFA(CFA));
   #ifdef NO_IP
   INST_TAIL;
   goto *next_code;
   #endif /* defined(NO_IP) */
   
 (dodefer) ( -- )        gforth-internal paren_dodefer  (dodefer) ( -- )        gforth-internal paren_dodefer
 ""run-time routine for deferred words""  ""run-time routine for deferred words""
   #ifndef NO_IP
 ip=IP; /* undo any ip updating that may have been performed by NEXT_P0 */  ip=IP; /* undo any ip updating that may have been performed by NEXT_P0 */
   #endif /* !defined(NO_IP) */
 SUPER_END; /* !! probably unnecessary and may lead to measurement errors */  SUPER_END; /* !! probably unnecessary and may lead to measurement errors */
 EXEC(*(Xt *)PFA(CFA));  EXEC(*(Xt *)PFA(CFA));
   
 (dofield) ( n1 -- n2 )  gforth-internal paren_field  (dofield) ( n1 -- n2 )  gforth-internal paren_field
 ""run-time routine for fields""  ""run-time routine for fields""
 n2 = n1 + *(Cell *)PFA(CFA);  n2 = n1 + *(Cell *)PFA(CFA);
   #ifdef NO_IP
   INST_TAIL;
   goto *next_code;
   #endif /* defined(NO_IP) */
   
 (dodoes) ( -- a_body R:a_retaddr )      gforth-internal paren_dodoes  (dodoes) ( -- a_body R:a_retaddr )      gforth-internal paren_dodoes
 ""run-time routine for @code{does>}-defined words""  ""run-time routine for @code{does>}-defined words""
   #ifdef NO_IP
   a_retaddr = next_code;
   a_body = PFA(CFA);
   INST_TAIL;
   goto **(Label *)DOES_CODE1(CFA);
   #else /* !defined(NO_IP) */
 a_retaddr = (Cell *)IP;  a_retaddr = (Cell *)IP;
 a_body = PFA(CFA);  a_body = PFA(CFA);
 SET_IP(DOES_CODE1(CFA));  SET_IP(DOES_CODE1(CFA));
   #endif /* !defined(NO_IP) */
   
 (does-handler) ( -- )   gforth-internal paren_does_handler  (does-handler) ( -- )   gforth-internal paren_does_handler
 ""just a slot to have an encoding for the DOESJUMP,   ""just a slot to have an encoding for the DOESJUMP, 
Line 235  noop ( -- )  gforth Line 229  noop ( -- )  gforth
 call    ( #a_callee -- R:a_retaddr )    new  call    ( #a_callee -- R:a_retaddr )    new
 ""Call callee (a variant of docol with inline argument).""  ""Call callee (a variant of docol with inline argument).""
 #ifdef NO_IP  #ifdef NO_IP
   assert(0);
 INST_TAIL;  INST_TAIL;
 JUMP(a_callee);  JUMP(a_callee);
 #else  #else
Line 2566  a_addr = groups; Line 2561  a_addr = groups;
   
 \g static_super  \g static_super
   
 \C #if !defined(GFORTH_DEBUGGING) && !defined(INDIRECT_THREADED) && !defined(DOUBLY_INDIRECT) && !defined(VM_PROFILING)  ifdef(`M4_ENGINE_FAST',
   `include(peeprules.vmg)')
 include(peeprules.vmg)  
   
 \C #endif  
   
 \g end  \g end

Removed from v.1.145  
changed lines
  Added in v.1.148


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>