compiler.cfg: nuke ##bignum>integer and ##integer>bignum since they were unused
parent
66071f45a3
commit
59fbe85c9b
|
@ -190,17 +190,6 @@ PURE-INSN: ##log2
|
||||||
def: dst/int-rep
|
def: dst/int-rep
|
||||||
use: src/int-rep ;
|
use: src/int-rep ;
|
||||||
|
|
||||||
! Bignum/integer conversion
|
|
||||||
PURE-INSN: ##integer>bignum
|
|
||||||
def: dst/int-rep
|
|
||||||
use: src/int-rep
|
|
||||||
temp: temp/int-rep ;
|
|
||||||
|
|
||||||
PURE-INSN: ##bignum>integer
|
|
||||||
def: dst/int-rep
|
|
||||||
use: src/int-rep
|
|
||||||
temp: temp/int-rep ;
|
|
||||||
|
|
||||||
! Float arithmetic
|
! Float arithmetic
|
||||||
PURE-INSN: ##unbox-float
|
PURE-INSN: ##unbox-float
|
||||||
def: dst/double-rep
|
def: dst/double-rep
|
||||||
|
@ -682,8 +671,7 @@ UNION: ##allocation
|
||||||
##box-float
|
##box-float
|
||||||
##box-vector
|
##box-vector
|
||||||
##box-alien
|
##box-alien
|
||||||
##box-displaced-alien
|
##box-displaced-alien ;
|
||||||
##integer>bignum ;
|
|
||||||
|
|
||||||
! For alias analysis
|
! For alias analysis
|
||||||
UNION: ##read ##slot ##slot-imm ;
|
UNION: ##read ##slot ##slot-imm ;
|
||||||
|
@ -706,8 +694,6 @@ UNION: kill-vreg-insn
|
||||||
! Instructions that have complex expansions and require that the
|
! Instructions that have complex expansions and require that the
|
||||||
! output registers are not equal to any of the input registers
|
! output registers are not equal to any of the input registers
|
||||||
UNION: def-is-use-insn
|
UNION: def-is-use-insn
|
||||||
##integer>bignum
|
|
||||||
##bignum>integer
|
|
||||||
##box-alien
|
##box-alien
|
||||||
##box-displaced-alien
|
##box-displaced-alien
|
||||||
##string-nth
|
##string-nth
|
||||||
|
|
|
@ -57,12 +57,6 @@ IN: compiler.cfg.intrinsics.fixnum
|
||||||
: emit-fixnum-comparison ( cc -- )
|
: emit-fixnum-comparison ( cc -- )
|
||||||
'[ _ ^^compare ] emit-fixnum-op ;
|
'[ _ ^^compare ] emit-fixnum-op ;
|
||||||
|
|
||||||
: emit-bignum>fixnum ( -- )
|
|
||||||
ds-pop ^^bignum>integer ^^tag-fixnum ds-push ;
|
|
||||||
|
|
||||||
: emit-fixnum>bignum ( -- )
|
|
||||||
ds-pop ^^untag-fixnum ^^integer>bignum ds-push ;
|
|
||||||
|
|
||||||
: emit-no-overflow-case ( dst -- final-bb )
|
: emit-no-overflow-case ( dst -- final-bb )
|
||||||
[ ds-drop ds-drop ds-push ] with-branch ;
|
[ ds-drop ds-drop ds-push ] with-branch ;
|
||||||
|
|
||||||
|
|
|
@ -144,8 +144,6 @@ CODEGEN: ##max %max
|
||||||
CODEGEN: ##not %not
|
CODEGEN: ##not %not
|
||||||
CODEGEN: ##log2 %log2
|
CODEGEN: ##log2 %log2
|
||||||
CODEGEN: ##copy %copy
|
CODEGEN: ##copy %copy
|
||||||
CODEGEN: ##integer>bignum %integer>bignum
|
|
||||||
CODEGEN: ##bignum>integer %bignum>integer
|
|
||||||
CODEGEN: ##unbox-float %unbox-float
|
CODEGEN: ##unbox-float %unbox-float
|
||||||
CODEGEN: ##box-float %box-float
|
CODEGEN: ##box-float %box-float
|
||||||
CODEGEN: ##add-float %add-float
|
CODEGEN: ##add-float %add-float
|
||||||
|
|
|
@ -44,8 +44,11 @@ SYMBOL: compiled
|
||||||
dup recompile-callers?
|
dup recompile-callers?
|
||||||
[ compiled-usage keys [ queue-compile ] each ] [ drop ] if ;
|
[ compiled-usage keys [ queue-compile ] each ] [ drop ] if ;
|
||||||
|
|
||||||
|
: compiler-message ( string -- )
|
||||||
|
"trace-compilation" get [ global [ print flush ] bind ] [ drop ] if ;
|
||||||
|
|
||||||
: start ( word -- )
|
: start ( word -- )
|
||||||
"trace-compilation" get [ dup name>> print flush ] when
|
dup name>> compiler-message
|
||||||
H{ } clone dependencies set
|
H{ } clone dependencies set
|
||||||
H{ } clone generic-dependencies set
|
H{ } clone generic-dependencies set
|
||||||
clear-compiler-error ;
|
clear-compiler-error ;
|
||||||
|
@ -194,7 +197,7 @@ M: optimizing-compiler recompile ( words -- alist )
|
||||||
compile-queue get compile-loop
|
compile-queue get compile-loop
|
||||||
compiled get >alist
|
compiled get >alist
|
||||||
] with-scope
|
] with-scope
|
||||||
"trace-compilation" get [ "--- compile done" print flush ] when ;
|
"--- compile done" compiler-message ;
|
||||||
|
|
||||||
: with-optimizer ( quot -- )
|
: with-optimizer ( quot -- )
|
||||||
[ optimizing-compiler compiler-impl ] dip with-variable ; inline
|
[ optimizing-compiler compiler-impl ] dip with-variable ; inline
|
||||||
|
|
|
@ -132,24 +132,3 @@ IN: compiler.tests.low-level-ir
|
||||||
T{ ##add-imm f 0 0 -8 }
|
T{ ##add-imm f 0 0 -8 }
|
||||||
} compile-test-bb
|
} compile-test-bb
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
! These are def-is-use-insns
|
|
||||||
USE: multiline
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
[ 100 ] [
|
|
||||||
V{
|
|
||||||
T{ ##load-immediate f 0 100 }
|
|
||||||
T{ ##integer>bignum f 0 0 1 }
|
|
||||||
} compile-test-bb
|
|
||||||
] unit-test
|
|
||||||
|
|
||||||
[ 1 ] [
|
|
||||||
V{
|
|
||||||
T{ ##load-reference f 0 ALIEN: 8 }
|
|
||||||
T{ ##unbox-any-c-ptr f 0 0 1 }
|
|
||||||
} compile-test-bb
|
|
||||||
] unit-test
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
|
@ -188,9 +188,6 @@ HOOK: %fixnum-add cpu ( label dst src1 src2 -- )
|
||||||
HOOK: %fixnum-sub cpu ( label dst src1 src2 -- )
|
HOOK: %fixnum-sub cpu ( label dst src1 src2 -- )
|
||||||
HOOK: %fixnum-mul cpu ( label dst src1 src2 -- )
|
HOOK: %fixnum-mul cpu ( label dst src1 src2 -- )
|
||||||
|
|
||||||
HOOK: %integer>bignum cpu ( dst src temp -- )
|
|
||||||
HOOK: %bignum>integer cpu ( dst src temp -- )
|
|
||||||
|
|
||||||
HOOK: %unbox-float cpu ( dst src -- )
|
HOOK: %unbox-float cpu ( dst src -- )
|
||||||
HOOK: %box-float cpu ( dst src temp -- )
|
HOOK: %box-float cpu ( dst src temp -- )
|
||||||
|
|
||||||
|
|
|
@ -200,59 +200,6 @@ M: ppc %fixnum-sub ( label dst src1 src2 -- )
|
||||||
M: ppc %fixnum-mul ( label dst src1 src2 -- )
|
M: ppc %fixnum-mul ( label dst src1 src2 -- )
|
||||||
[ MULLWO. ] overflow-template ;
|
[ MULLWO. ] overflow-template ;
|
||||||
|
|
||||||
: bignum@ ( n -- offset ) cells bignum tag-number - ; inline
|
|
||||||
|
|
||||||
M:: ppc %integer>bignum ( dst src temp -- )
|
|
||||||
[
|
|
||||||
"end" define-label
|
|
||||||
dst 0 >bignum %load-reference
|
|
||||||
! Is it zero? Then just go to the end and return this zero
|
|
||||||
0 src 0 CMPI
|
|
||||||
"end" get BEQ
|
|
||||||
! Allocate a bignum
|
|
||||||
dst 4 cells bignum temp %allot
|
|
||||||
! Write length
|
|
||||||
2 tag-fixnum temp LI
|
|
||||||
temp dst 1 bignum@ STW
|
|
||||||
! Compute sign
|
|
||||||
temp src MR
|
|
||||||
temp temp cell-bits 1 - SRAWI
|
|
||||||
temp temp 1 ANDI
|
|
||||||
! Store sign
|
|
||||||
temp dst 2 bignum@ STW
|
|
||||||
! Make negative value positive
|
|
||||||
temp temp temp ADD
|
|
||||||
temp temp NEG
|
|
||||||
temp temp 1 ADDI
|
|
||||||
temp src temp MULLW
|
|
||||||
! Store the bignum
|
|
||||||
temp dst 3 bignum@ STW
|
|
||||||
"end" resolve-label
|
|
||||||
] with-scope ;
|
|
||||||
|
|
||||||
M:: ppc %bignum>integer ( dst src temp -- )
|
|
||||||
[
|
|
||||||
"end" define-label
|
|
||||||
temp src 1 bignum@ LWZ
|
|
||||||
! if the length is 1, its just the sign and nothing else,
|
|
||||||
! so output 0
|
|
||||||
0 dst LI
|
|
||||||
0 temp 1 tag-fixnum CMPI
|
|
||||||
"end" get BEQ
|
|
||||||
! load the value
|
|
||||||
dst src 3 bignum@ LWZ
|
|
||||||
! load the sign
|
|
||||||
temp src 2 bignum@ LWZ
|
|
||||||
! branchless arithmetic: we want to turn 0 into 1,
|
|
||||||
! and 1 into -1
|
|
||||||
temp temp temp ADD
|
|
||||||
temp temp 1 SUBI
|
|
||||||
temp temp NEG
|
|
||||||
! multiply value by sign
|
|
||||||
dst dst temp MULLW
|
|
||||||
"end" resolve-label
|
|
||||||
] with-scope ;
|
|
||||||
|
|
||||||
M: ppc %add-float FADD ;
|
M: ppc %add-float FADD ;
|
||||||
M: ppc %sub-float FSUB ;
|
M: ppc %sub-float FSUB ;
|
||||||
M: ppc %mul-float FMUL ;
|
M: ppc %mul-float FMUL ;
|
||||||
|
|
|
@ -156,66 +156,6 @@ M: x86 %fixnum-sub ( label dst src1 src2 -- )
|
||||||
M: x86 %fixnum-mul ( label dst src1 src2 -- )
|
M: x86 %fixnum-mul ( label dst src1 src2 -- )
|
||||||
int-rep two-operand swap IMUL2 JO ;
|
int-rep two-operand swap IMUL2 JO ;
|
||||||
|
|
||||||
: bignum@ ( reg n -- op )
|
|
||||||
cells bignum tag-number - [+] ; inline
|
|
||||||
|
|
||||||
M:: x86 %integer>bignum ( dst src temp -- )
|
|
||||||
#! on entry, inreg is a signed 32-bit quantity
|
|
||||||
#! exits with tagged ptr to bignum in outreg
|
|
||||||
#! 1 cell header, 1 cell length, 1 cell sign, + digits
|
|
||||||
#! length is the # of digits + sign
|
|
||||||
[
|
|
||||||
"end" define-label
|
|
||||||
! Load cached zero value
|
|
||||||
dst 0 >bignum %load-reference
|
|
||||||
src 0 CMP
|
|
||||||
! Is it zero? Then just go to the end and return this zero
|
|
||||||
"end" get JE
|
|
||||||
! Allocate a bignum
|
|
||||||
dst 4 cells bignum temp %allot
|
|
||||||
! Write length
|
|
||||||
dst 1 bignum@ 2 tag-fixnum MOV
|
|
||||||
! Store value
|
|
||||||
dst 3 bignum@ src MOV
|
|
||||||
! Compute sign
|
|
||||||
temp src MOV
|
|
||||||
temp cell-bits 1 - SAR
|
|
||||||
temp 1 AND
|
|
||||||
! Store sign
|
|
||||||
dst 2 bignum@ temp MOV
|
|
||||||
! Make negative value positive
|
|
||||||
temp temp ADD
|
|
||||||
temp NEG
|
|
||||||
temp 1 ADD
|
|
||||||
src temp IMUL2
|
|
||||||
! Store the bignum
|
|
||||||
dst 3 bignum@ temp MOV
|
|
||||||
"end" resolve-label
|
|
||||||
] with-scope ;
|
|
||||||
|
|
||||||
M:: x86 %bignum>integer ( dst src temp -- )
|
|
||||||
[
|
|
||||||
"end" define-label
|
|
||||||
! load length
|
|
||||||
temp src 1 bignum@ MOV
|
|
||||||
! if the length is 1, its just the sign and nothing else,
|
|
||||||
! so output 0
|
|
||||||
dst 0 MOV
|
|
||||||
temp 1 tag-fixnum CMP
|
|
||||||
"end" get JE
|
|
||||||
! load the value
|
|
||||||
dst src 3 bignum@ MOV
|
|
||||||
! load the sign
|
|
||||||
temp src 2 bignum@ MOV
|
|
||||||
! convert it into -1 or 1
|
|
||||||
temp temp ADD
|
|
||||||
temp NEG
|
|
||||||
temp 1 ADD
|
|
||||||
! make dst signed
|
|
||||||
temp dst IMUL2
|
|
||||||
"end" resolve-label
|
|
||||||
] with-scope ;
|
|
||||||
|
|
||||||
M: x86 %add-float double-rep two-operand ADDSD ;
|
M: x86 %add-float double-rep two-operand ADDSD ;
|
||||||
M: x86 %sub-float double-rep two-operand SUBSD ;
|
M: x86 %sub-float double-rep two-operand SUBSD ;
|
||||||
M: x86 %mul-float double-rep two-operand MULSD ;
|
M: x86 %mul-float double-rep two-operand MULSD ;
|
||||||
|
|
Loading…
Reference in New Issue