From 4e4be608840d50f152d4f1643c5f06f2b7899a12 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sat, 10 Oct 2009 13:13:53 -0500 Subject: [PATCH] use TEST reg, reg to compare integer equality with zero --- basis/cpu/x86/x86.factor | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/basis/cpu/x86/x86.factor b/basis/cpu/x86/x86.factor index a163ba6482..8612acdcff 100644 --- a/basis/cpu/x86/x86.factor +++ b/basis/cpu/x86/x86.factor @@ -432,8 +432,13 @@ M: x86 %epilogue ( n -- ) cell - incr-stack-reg ; temp 0 MOV \ t rc-absolute-cell rel-immediate dst temp word execute ; inline +: (%compare) ( src1 src2 cc -- ) + 2over [ { cc= cc/= } member? ] [ register? ] [ 0 = ] tri* and and + [ drop dup TEST ] + [ CMP ] if ; + M:: x86 %compare ( dst src1 src2 cc temp -- ) - src1 src2 CMP + src1 src2 cc (%compare) cc order-cc { { cc< [ dst temp \ CMOVL %boolean ] } { cc<= [ dst temp \ CMOVLE %boolean ] } @@ -447,7 +452,7 @@ M: x86 %compare-imm ( dst src1 src2 cc temp -- ) %compare ; M:: x86 %compare-branch ( label src1 src2 cc -- ) - src1 src2 CMP + src1 src2 cc (%compare) cc order-cc { { cc< [ label JL ] } { cc<= [ label JLE ] }