From dd6a82eb651aa0ae21009ad34082382eb23b8ba7 Mon Sep 17 00:00:00 2001 From: kusumotonorio <47816570+kusumotonorio@users.noreply.github.com> Date: Mon, 20 Jan 2020 20:38:43 +0900 Subject: [PATCH] boxing.factor: Use count --- .../cfg/builder/alien/boxing/boxing.factor | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/basis/compiler/cfg/builder/alien/boxing/boxing.factor b/basis/compiler/cfg/builder/alien/boxing/boxing.factor index 75321ec62d..05406653a1 100644 --- a/basis/compiler/cfg/builder/alien/boxing/boxing.factor +++ b/basis/compiler/cfg/builder/alien/boxing/boxing.factor @@ -13,21 +13,17 @@ SYMBOL: struct-return-area SYMBOLS: int-reg-reps float-reg-reps ; : record-reg-reps ( reps -- reps ) - dup [ - dup second not [ ! on-stack?: f - first int-rep? int-reg-reps float-reg-reps ? - dup get [ inc ] [ drop ] if - ] [ drop ] if - ] each ; + dup ! reps: { { reg-rep on-stack? odd-register? } ... } + [ [ [ second not ] [ first int-rep? ] bi and ] count int-reg-reps +@ ] + [ [ [ second not ] [ first int-rep? not ] bi and ] count float-reg-reps +@ ] + bi ; : unrecord-reg-reps ( reps -- reps ) - dup [ - dup second not [ ! on-stack?: f - first int-rep? int-reg-reps float-reg-reps ? - dup get [ dec ] [ drop ] if - ] [ drop ] if - ] each ; - + dup + [ [ [ second not ] [ first int-rep? ] bi and ] count -1 * int-reg-reps +@ ] + [ [ [ second not ] [ first int-rep? not ] bi and ] count -1 * float-reg-reps +@ ] + bi ; + GENERIC: flatten-c-type ( c-type -- pairs ) M: c-type flatten-c-type