Generate branches in reverse order

db4
Slava Pestov 2008-04-17 03:06:55 -05:00
parent b4ce5c93e8
commit 91e516853a
8 changed files with 35 additions and 35 deletions

View File

@ -56,7 +56,7 @@ HOOK: %call cpu ( word -- )
HOOK: %jump-label cpu ( label -- ) HOOK: %jump-label cpu ( label -- )
! Test if vreg is 'f' or not ! Test if vreg is 'f' or not
HOOK: %jump-t cpu ( label -- ) HOOK: %jump-f cpu ( label -- )
HOOK: %dispatch cpu ( -- ) HOOK: %dispatch cpu ( -- )

View File

@ -106,8 +106,8 @@ M: ppc %call ( label -- ) BL ;
M: ppc %jump-label ( label -- ) B ; M: ppc %jump-label ( label -- ) B ;
M: ppc %jump-t ( label -- ) M: ppc %jump-f ( label -- )
0 "flag" operand f v>operand CMPI BNE ; 0 "flag" operand f v>operand CMPI BE ;
M: ppc %dispatch ( -- ) M: ppc %dispatch ( -- )
[ [

View File

@ -217,11 +217,11 @@ IN: cpu.ppc.intrinsics
2array define-if-intrinsics ; 2array define-if-intrinsics ;
{ {
{ fixnum< BLT } { fixnum< BGE }
{ fixnum<= BLE } { fixnum<= BGT }
{ fixnum> BGT } { fixnum> BLE }
{ fixnum>= BGE } { fixnum>= BLT }
{ eq? BEQ } { eq? BNE }
} [ } [
first2 define-fixnum-jump first2 define-fixnum-jump
] each ] each
@ -356,11 +356,11 @@ IN: cpu.ppc.intrinsics
{ { float "x" } { float "y" } } define-if-intrinsic ; { { float "x" } { float "y" } } define-if-intrinsic ;
{ {
{ float< BLT } { float< BGE }
{ float<= BLE } { float<= BGT }
{ float> BGT } { float> BLE }
{ float>= BGE } { float>= BLT }
{ float= BEQ } { float= BNE }
} [ } [
first2 define-float-jump first2 define-float-jump
] each ] each

View File

@ -267,7 +267,7 @@ os windows? [
EDX 26 SHR EDX 26 SHR
EDX 1 AND EDX 1 AND
{ EAX EBX ECX EDX } [ POP ] each { EAX EBX ECX EDX } [ POP ] each
JNE JE
] { } define-if-intrinsic ] { } define-if-intrinsic
"-no-sse2" cli-args member? [ "-no-sse2" cli-args member? [

View File

@ -47,13 +47,13 @@ M: x86 stack-frame ( n -- i )
3 cells + 16 align cell - ; 3 cells + 16 align cell - ;
M: x86 %save-word-xt ( -- ) M: x86 %save-word-xt ( -- )
xt-reg 0 MOV rc-absolute-cell rel-this ; temp-reg v>operand 0 MOV rc-absolute-cell rel-this ;
: factor-area-size 4 cells ; : factor-area-size 4 cells ;
M: x86 %prologue ( n -- ) M: x86 %prologue ( n -- )
dup cell + PUSH dup cell + PUSH
xt-reg PUSH temp-reg v>operand PUSH
stack-reg swap 2 cells - SUB ; stack-reg swap 2 cells - SUB ;
M: x86 %epilogue ( n -- ) M: x86 %epilogue ( n -- )
@ -76,8 +76,8 @@ M: x86 %call ( label -- ) CALL ;
M: x86 %jump-label ( label -- ) JMP ; M: x86 %jump-label ( label -- ) JMP ;
M: x86 %jump-t ( label -- ) M: x86 %jump-f ( label -- )
"flag" operand f v>operand CMP JNE ; "flag" operand f v>operand CMP JE ;
: code-alignment ( -- n ) : code-alignment ( -- n )
building get length dup cell align swap - ; building get length dup cell align swap - ;

View File

@ -212,11 +212,11 @@ IN: cpu.x86.intrinsics
2array define-if-intrinsics ; 2array define-if-intrinsics ;
{ {
{ fixnum< JL } { fixnum< JGE }
{ fixnum<= JLE } { fixnum<= JG }
{ fixnum> JG } { fixnum> JLE }
{ fixnum>= JGE } { fixnum>= JL }
{ eq? JE } { eq? JNE }
} [ } [
first2 define-fixnum-jump first2 define-fixnum-jump
] each ] each

View File

@ -27,11 +27,11 @@ IN: cpu.x86.sse2
{ { float "x" } { float "y" } } define-if-intrinsic ; { { float "x" } { float "y" } } define-if-intrinsic ;
{ {
{ float< JB } { float< JAE }
{ float<= JBE } { float<= JA }
{ float> JA } { float> JBE }
{ float>= JAE } { float>= JB }
{ float= JE } { float= JNE }
} [ } [
first2 define-float-jump first2 define-float-jump
] each ] each

View File

@ -131,14 +131,14 @@ M: #loop generate-node
: generate-if ( node label -- next ) : generate-if ( node label -- next )
<label> [ <label> [
>r >r node-children first2 generate-branch >r >r node-children first2 swap generate-branch
r> r> end-false-branch resolve-label r> r> end-false-branch resolve-label
generate-branch generate-branch
init-templates init-templates
] keep resolve-label iterate-next ; ] keep resolve-label iterate-next ;
M: #if generate-node M: #if generate-node
[ <label> dup %jump-t ] [ <label> dup %jump-f ]
H{ { +input+ { { f "flag" } } } } H{ { +input+ { { f "flag" } } } }
with-template with-template
generate-if ; generate-if ;
@ -189,13 +189,13 @@ M: #dispatch generate-node
"if-intrinsics" set-word-prop ; "if-intrinsics" set-word-prop ;
: if>boolean-intrinsic ( quot -- ) : if>boolean-intrinsic ( quot -- )
"true" define-label "false" define-label
"end" define-label "end" define-label
"true" get swap call "false" get swap call
f "if-scratch" get load-literal
"end" get %jump-label
"true" resolve-label
t "if-scratch" get load-literal t "if-scratch" get load-literal
"end" get %jump-label
"false" resolve-label
f "if-scratch" get load-literal
"end" resolve-label "end" resolve-label
"if-scratch" get phantom-push ; inline "if-scratch" get phantom-push ; inline