diff --git a/basis/compiler/cfg/builder/alien/boxing/boxing.factor b/basis/compiler/cfg/builder/alien/boxing/boxing.factor index e0fcc58027..75321ec62d 100644 --- a/basis/compiler/cfg/builder/alien/boxing/boxing.factor +++ b/basis/compiler/cfg/builder/alien/boxing/boxing.factor @@ -12,25 +12,19 @@ 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 ? inc-not-f + first int-rep? int-reg-reps float-reg-reps ? + dup get [ inc ] [ drop ] if ] [ drop ] if ] each ; : unrecord-reg-reps ( reps -- reps ) dup [ dup second not [ ! on-stack?: f - first int-rep? int-reg-reps float-reg-reps ? dec-not-f + first int-rep? int-reg-reps float-reg-reps ? + dup get [ dec ] [ drop ] if ] [ drop ] if ] each ; diff --git a/basis/cpu/x86/64/unix/unix.factor b/basis/cpu/x86/64/unix/unix.factor index 5ebdb8b6d2..ffb287f6e0 100644 --- a/basis/cpu/x86/64/unix/unix.factor +++ b/basis/cpu/x86/64/unix/unix.factor @@ -27,7 +27,8 @@ M: x86.64 reserved-stack-space 0 ; :: flatten-small-struct ( c-type -- seq ) c-type struct-types&offset split-struct [ [ lookup-c-type c-type-rep reg-class-of ] map - int-regs swap member? int-rep double-rep ? f f 3array + int-regs swap member? int-rep double-rep ? + f f 3array ] map :> reps int-reg-reps get float-reg-reps get and [ 0 :> int-mems!