Merge branch 'master' of git://factorcode.org/git/factor
commit
405a1591e3
|
@ -335,6 +335,24 @@ big-endian on
|
||||||
7 ds-reg 0 STW
|
7 ds-reg 0 STW
|
||||||
] f f f \ fixnum-mod define-sub-primitive
|
] f f f \ fixnum-mod define-sub-primitive
|
||||||
|
|
||||||
|
[
|
||||||
|
3 ds-reg 0 LWZ
|
||||||
|
ds-reg ds-reg 4 SUBI
|
||||||
|
4 ds-reg 0 LWZ
|
||||||
|
5 4 3 DIVW
|
||||||
|
5 ds-reg 0 STW
|
||||||
|
] f f f \ fixnum/i-fast define-sub-primitive
|
||||||
|
|
||||||
|
[
|
||||||
|
3 ds-reg 0 LWZ
|
||||||
|
4 ds-reg -4 LWZ
|
||||||
|
5 4 3 DIVW
|
||||||
|
6 5 3 MULLW
|
||||||
|
7 6 4 SUBF
|
||||||
|
5 ds-reg -4 STW
|
||||||
|
7 ds-reg 0 STW
|
||||||
|
] f f f \ fixnum-/mod-fast define-sub-primitive
|
||||||
|
|
||||||
[
|
[
|
||||||
3 ds-reg 0 LWZ
|
3 ds-reg 0 LWZ
|
||||||
3 3 1 SRAWI
|
3 3 1 SRAWI
|
||||||
|
|
|
@ -305,16 +305,33 @@ big-endian off
|
||||||
ds-reg [] arg1 MOV ! push to stack
|
ds-reg [] arg1 MOV ! push to stack
|
||||||
] f f f \ fixnum-shift-fast define-sub-primitive
|
] f f f \ fixnum-shift-fast define-sub-primitive
|
||||||
|
|
||||||
[
|
: jit-fixnum-/mod
|
||||||
temp-reg ds-reg [] MOV ! load second parameter
|
temp-reg ds-reg [] MOV ! load second parameter
|
||||||
ds-reg bootstrap-cell SUB ! adjust stack pointer
|
div-arg ds-reg bootstrap-cell neg [+] MOV ! load first parameter
|
||||||
div-arg ds-reg [] MOV ! load first parameter
|
|
||||||
mod-arg div-arg MOV ! make a copy
|
mod-arg div-arg MOV ! make a copy
|
||||||
mod-arg bootstrap-cell-bits 1- SAR ! sign-extend
|
mod-arg bootstrap-cell-bits 1- SAR ! sign-extend
|
||||||
temp-reg IDIV ! divide
|
temp-reg IDIV ; ! divide
|
||||||
|
|
||||||
|
[
|
||||||
|
jit-fixnum-/mod
|
||||||
|
ds-reg bootstrap-cell SUB ! adjust stack pointer
|
||||||
ds-reg [] mod-arg MOV ! push to stack
|
ds-reg [] mod-arg MOV ! push to stack
|
||||||
] f f f \ fixnum-mod define-sub-primitive
|
] f f f \ fixnum-mod define-sub-primitive
|
||||||
|
|
||||||
|
[
|
||||||
|
jit-fixnum-/mod
|
||||||
|
ds-reg bootstrap-cell SUB ! adjust stack pointer
|
||||||
|
div-arg tag-bits get SHL ! tag it
|
||||||
|
ds-reg [] div-arg MOV ! push to stack
|
||||||
|
] f f f \ fixnum/i-fast define-sub-primitive
|
||||||
|
|
||||||
|
[
|
||||||
|
jit-fixnum-/mod
|
||||||
|
div-arg tag-bits get SHL ! tag it
|
||||||
|
ds-reg [] mod-arg MOV ! push to stack
|
||||||
|
ds-reg bootstrap-cell neg [+] div-arg MOV
|
||||||
|
] f f f \ fixnum/mod-fast define-sub-primitive
|
||||||
|
|
||||||
[
|
[
|
||||||
arg0 ds-reg [] MOV ! load local number
|
arg0 ds-reg [] MOV ! load local number
|
||||||
fixnum>slot@ ! turn local number into offset
|
fixnum>slot@ ! turn local number into offset
|
||||||
|
|
|
@ -29,6 +29,8 @@ M: word integer-op-input-classes
|
||||||
{ fixnum- fixnum-fast }
|
{ fixnum- fixnum-fast }
|
||||||
{ fixnum* fixnum*fast }
|
{ fixnum* fixnum*fast }
|
||||||
{ fixnum-shift fixnum-shift-fast }
|
{ fixnum-shift fixnum-shift-fast }
|
||||||
|
{ fixnum/i fixnum/i-fast }
|
||||||
|
{ fixnum/mod fixnum/mod-fast }
|
||||||
} at ;
|
} at ;
|
||||||
|
|
||||||
: modular-variant ( op -- fast-op )
|
: modular-variant ( op -- fast-op )
|
||||||
|
|
|
@ -341,6 +341,8 @@ tuple
|
||||||
{ "fixnum-bitnot" "math.private" }
|
{ "fixnum-bitnot" "math.private" }
|
||||||
{ "fixnum-mod" "math.private" }
|
{ "fixnum-mod" "math.private" }
|
||||||
{ "fixnum-shift-fast" "math.private" }
|
{ "fixnum-shift-fast" "math.private" }
|
||||||
|
{ "fixnum/i-fast" "math.private" }
|
||||||
|
{ "fixnum/mod-fast" "math.private" }
|
||||||
{ "fixnum<" "math.private" }
|
{ "fixnum<" "math.private" }
|
||||||
{ "fixnum<=" "math.private" }
|
{ "fixnum<=" "math.private" }
|
||||||
{ "fixnum>" "math.private" }
|
{ "fixnum>" "math.private" }
|
||||||
|
|
Loading…
Reference in New Issue