From bdd78ad160b255e2f2cfb3a83e3aca80c6ae9e1a Mon Sep 17 00:00:00 2001 From: slava Date: Tue, 2 May 2006 03:30:24 +0000 Subject: [PATCH] Generate if-intrinsics in more cases --- library/compiler/generator/generator.factor | 45 +++++++++++++++------ library/compiler/generator/templates.factor | 7 +++- library/compiler/ppc/intrinsics.factor | 3 +- 3 files changed, 38 insertions(+), 17 deletions(-) diff --git a/library/compiler/generator/generator.factor b/library/compiler/generator/generator.factor index 1d3e3a66d8..d52eb6f959 100644 --- a/library/compiler/generator/generator.factor +++ b/library/compiler/generator/generator.factor @@ -12,16 +12,19 @@ M: object stack-reserve* drop 0 ; : stack-reserve ( node -- n ) 0 swap [ stack-reserve* max ] each-node ; +: intrinsic ( #call -- quot ) + node-param "intrinsic" word-prop ; + : if-intrinsic ( #call -- quot ) - dup node-successor #if? - [ node-param "if-intrinsic" word-prop ] [ drop f ] if ; + node-param "if-intrinsic" word-prop ; DEFER: #terminal? PREDICATE: #merge #terminal-merge node-successor #terminal? ; PREDICATE: #call #terminal-call - dup node-successor node-successor #terminal? + dup node-successor #if? + over node-successor node-successor #terminal? and swap if-intrinsic and ; UNION: #terminal @@ -108,10 +111,13 @@ M: #label generate-node ( node -- next ) swap node-child generate-word r> ; ! #if +: end-false-branch ( label -- ) + tail-call? [ %return drop ] [ %jump-label ] if ; + : generate-if ( node label -- next )