From 63a5131f99035a5e8136cea00d548f14599b3edb Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Sat, 22 Jan 2022 13:05:41 -0800 Subject: [PATCH] math: faster math iteration when operating on fixnums --- core/math/math.factor | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/core/math/math.factor b/core/math/math.factor index de463a3579..f0a7bcb257 100644 --- a/core/math/math.factor +++ b/core/math/math.factor @@ -247,32 +247,45 @@ GENERIC: prev-float ( m -- n ) : align ( m w -- n ) 1 - [ + ] keep bitnot bitand ; inline -: (each-integer) ( ... i n quot: ( ... i -- ... ) -- ... ) + + +: (each-integer) ( ... i n quot: ( ... i -- ... ) -- ... ) + 2over both-fixnums? [ ((each-integer)) ] [ ((each-integer)) ] if ; inline + +: (find-integer) ( ... i n quot: ( ... i -- ... ? ) -- ... i/f ) + 2over both-fixnums? [ ((find-integer)) ] [ ((find-integer)) ] if ; inline + +: (all-integers?) ( ... i n quot: ( ... i -- ... ? ) -- ... ? ) + 2over both-fixnums? [ ((all-integers?)) ] [ ((all-integers?)) ] if ; inline + : each-integer ( ... n quot: ( ... i -- ... ) -- ... ) [ 0 ] 2dip (each-integer) ; inline @@ -285,13 +298,21 @@ GENERIC: prev-float ( m -- n ) : all-integers? ( ... n quot: ( ... i -- ... ? ) -- ... ? ) [ 0 ] 2dip (all-integers?) ; inline -: find-last-integer ( ... n quot: ( ... i -- ... ? ) -- ... i/f ) + + + +: find-last-integer ( ... n quot: ( ... i -- ... ? ) -- ... i/f ) + over fixnum? [ (find-last-integer) ] [ (find-last-integer) ] if ; inline -- 2.34.1