cpu.x86.*: faster versions of the X-bit-version-of words
It should make the %load-immediate word a bit faster.locals-and-roots
parent
5733d98236
commit
97c10cc0f1
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2008, 2010 Slava Pestov, Joe Groff.
|
! Copyright (C) 2008, 2010 Slava Pestov, Joe Groff.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: kernel words math accessors sequences namespaces
|
USING: accessors arrays assocs cpu.x86.assembler.syntax hashtables
|
||||||
assocs layouts cpu.x86.assembler.syntax ;
|
kernel kernel.private layouts math namespaces sequences words ;
|
||||||
IN: cpu.x86.assembler.operands
|
IN: cpu.x86.assembler.operands
|
||||||
|
|
||||||
REGISTERS: 8 AL CL DL BL SPL BPL SIL DIL R8B R9B R10B R11B R12B R13B R14B R15B ;
|
REGISTERS: 8 AL CL DL BL SPL BPL SIL DIL R8B R9B R10B R11B R12B R13B R14B R15B ;
|
||||||
|
@ -130,8 +130,32 @@ C: <byte> byte
|
||||||
dup extended-8-bit-register? cell 4 = and
|
dup extended-8-bit-register? cell 4 = and
|
||||||
[ drop f ] when ;
|
[ drop f ] when ;
|
||||||
|
|
||||||
: 8-bit-version-of ( register -- register' ) 8 n-bit-version-of ;
|
: cached-n-bit-version-of ( register n -- register' )
|
||||||
: 16-bit-version-of ( register -- register' ) 16 n-bit-version-of ;
|
swap { word } declare props>> { hashtable } declare at ; inline
|
||||||
: 32-bit-version-of ( register -- register' ) 32 n-bit-version-of ;
|
|
||||||
: 64-bit-version-of ( register -- register' ) 64 n-bit-version-of ;
|
: 8-bit-version-of ( register -- register' )
|
||||||
: native-version-of ( register -- register' ) cell-bits n-bit-version-of ;
|
8 cached-n-bit-version-of ; inline
|
||||||
|
: 16-bit-version-of ( register -- register' )
|
||||||
|
16 cached-n-bit-version-of ; inline
|
||||||
|
: 32-bit-version-of ( register -- register' )
|
||||||
|
32 cached-n-bit-version-of ; inline
|
||||||
|
: 64-bit-version-of ( register -- register' )
|
||||||
|
64 cached-n-bit-version-of ; inline
|
||||||
|
: native-version-of ( register -- register' )
|
||||||
|
cell-bits cached-n-bit-version-of ; inline
|
||||||
|
|
||||||
|
! copy paste
|
||||||
|
: set-extra-props ( word extra-props -- )
|
||||||
|
[ rot set-word-prop ] with assoc-each ;
|
||||||
|
|
||||||
|
! All the bit size register mapping are precalculated to make code
|
||||||
|
! generation a little faster.
|
||||||
|
: precalc-register-versions ( reg -- )
|
||||||
|
dup { 8 16 32 64 } [
|
||||||
|
dup swapd n-bit-version-of 2array
|
||||||
|
] with map set-extra-props ;
|
||||||
|
|
||||||
|
: precalc-all-register-versions ( -- )
|
||||||
|
registers get values concat [ precalc-register-versions ] each ;
|
||||||
|
|
||||||
|
precalc-all-register-versions
|
||||||
|
|
|
@ -11,6 +11,7 @@ cpu.x86.assembler.operands cpu.x86.assembler.private cpu.x86.features
|
||||||
cpu.x86.features.private fry io kernel layouts locals make math
|
cpu.x86.features.private fry io kernel layouts locals make math
|
||||||
math.order memory namespaces sequences system vm vocabs ;
|
math.order memory namespaces sequences system vm vocabs ;
|
||||||
QUALIFIED-WITH: alien.c-types c
|
QUALIFIED-WITH: alien.c-types c
|
||||||
|
FROM: kernel.private => declare ;
|
||||||
FROM: math => float ;
|
FROM: math => float ;
|
||||||
IN: cpu.x86
|
IN: cpu.x86
|
||||||
|
|
||||||
|
@ -61,7 +62,8 @@ M: x86 test-instruction? t ;
|
||||||
|
|
||||||
M: x86 immediate-store? immediate-comparand? ;
|
M: x86 immediate-store? immediate-comparand? ;
|
||||||
|
|
||||||
M: x86 %load-immediate [ 32-bit-version-of dup XOR ] [ MOV ] if-zero ;
|
M: x86 %load-immediate ( reg val -- )
|
||||||
|
{ fixnum } declare [ 32-bit-version-of dup XOR ] [ MOV ] if-zero ;
|
||||||
|
|
||||||
M: x86 %load-reference
|
M: x86 %load-reference
|
||||||
[ swap 0 MOV rc-absolute-cell rel-literal ]
|
[ swap 0 MOV rc-absolute-cell rel-literal ]
|
||||||
|
|
Loading…
Reference in New Issue