diff --git a/TODO.FACTOR.txt b/TODO.FACTOR.txt index c64017cb37..dab9b86324 100644 --- a/TODO.FACTOR.txt +++ b/TODO.FACTOR.txt @@ -2,6 +2,9 @@ - x86 SIB addressing modes - "localhost" 50 won't fail - compiled gc check slows things down +- delegating generic words with a non-standard picker + - pass an integer stack pos instead of a quotation +- yield in a loop starves i/o + portability: @@ -13,7 +16,6 @@ - stream server can hang because of exception handler limitations - better i/o scheduler - out of memory error when printing global namespace -- yield in a loop starves i/o + objective C/cocoa: @@ -61,7 +63,5 @@ - code walker & exceptions - slice: if sequence or seq start is changed, abstraction violation -- delegating generic words with a non-standard picker - - pass an integer stack pos instead of a quotation - make 3.4 bits>double an error - colorcoded prettyprinting for vocabularies diff --git a/library/compiler/x86/assembler.factor b/library/compiler/x86/assembler.factor index 5a8451d692..94e11a7f23 100644 --- a/library/compiler/x86/assembler.factor +++ b/library/compiler/x86/assembler.factor @@ -142,9 +142,10 @@ M: register sib-present? drop f ; GENERIC: r/m M: indirect r/m ( indirect -- r/m ) - dup sib-present? [ drop ESP ] [ indirect-base ] if ; + dup sib-present? + [ drop ESP reg-code ] [ indirect-base* ] if ; -M: register r/m ( reg -- r/m ) ; +M: register r/m ( reg -- r/m ) reg-code ; : byte? -128 127 between? ; @@ -160,8 +161,7 @@ M: indirect modifier M: register modifier drop BIN: 11 ; : mod-r/m ( reg# indirect -- byte ) - dup modifier 6 shift rot 3 shift - rot r/m reg-code bitor bitor ; + dup modifier 6 shift rot 3 shift rot r/m bitor bitor ; : sib ( indirect -- byte ) dup sib-present? [ diff --git a/library/compiler/x86/fixnum.factor b/library/compiler/x86/fixnum.factor index 789a7eebad..05a61362c0 100644 --- a/library/compiler/x86/fixnum.factor +++ b/library/compiler/x86/fixnum.factor @@ -25,7 +25,8 @@ math math-internals memory namespaces words ; ! Compute a result, this time it will fit. r> execute ! Create a bignum. - "s48_long_to_bignum" f 0 output-operand [] compile-c-call* + "s48_long_to_bignum" f 0 output-operand + 1array compile-c-call* ! An untagged pointer to the bignum is now in EAX; tag it T{ int-regs } return-reg bignum-tag OR "end" get save-xt ; inline @@ -45,11 +46,11 @@ M: %fixnum* generate-node ( vop -- )