cpu.x86: eliminate 2 instructions form write barrier on x86-32
parent
8a7547ef1b
commit
6641c530d5
|
@ -25,6 +25,18 @@ M: x86.32 rs-reg EDI ;
|
|||
M: x86.32 stack-reg ESP ;
|
||||
M: x86.32 temp-reg ECX ;
|
||||
|
||||
M: x86.32 %mark-card
|
||||
drop HEX: ffffffff [+] card-mark <byte> MOV
|
||||
building get pop
|
||||
rc-absolute-cell rel-cards-offset
|
||||
building get push ;
|
||||
|
||||
M: x86.32 %mark-deck
|
||||
drop HEX: ffffffff [+] card-mark <byte> MOV
|
||||
building get pop
|
||||
rc-absolute-cell rel-decks-offset
|
||||
building get push ;
|
||||
|
||||
M:: x86.32 %dispatch ( src temp -- )
|
||||
! Load jump table base.
|
||||
temp src HEX: ffffffff [+] LEA
|
||||
|
|
|
@ -21,6 +21,20 @@ M: x86.64 ds-reg R14 ;
|
|||
M: x86.64 rs-reg R15 ;
|
||||
M: x86.64 stack-reg RSP ;
|
||||
|
||||
: load-cards-offset ( dst -- )
|
||||
0 MOV rc-absolute-cell rel-cards-offset ;
|
||||
|
||||
M: x86.64 %mark-card
|
||||
dup load-cards-offset
|
||||
[+] card-mark <byte> MOV ;
|
||||
|
||||
: load-decks-offset ( dst -- )
|
||||
0 MOV rc-absolute-cell rel-decks-offset ;
|
||||
|
||||
M: x86.64 %mark-deck
|
||||
dup load-cards-offset
|
||||
[+] card-mark <byte> MOV ;
|
||||
|
||||
M:: x86.64 %dispatch ( src temp -- )
|
||||
building get length :> start
|
||||
! Load jump table base.
|
||||
|
|
|
@ -387,31 +387,21 @@ M: x86 %vm-field-ptr ( dst field -- )
|
|||
: store-tagged ( dst tag -- )
|
||||
tag-number OR ;
|
||||
|
||||
: load-cards-offset ( dst -- )
|
||||
0 MOV rc-absolute-cell rel-cards-offset ;
|
||||
|
||||
: load-decks-offset ( dst -- )
|
||||
0 MOV rc-absolute-cell rel-decks-offset ;
|
||||
|
||||
M:: x86 %allot ( dst size class nursery-ptr -- )
|
||||
nursery-ptr dst load-allot-ptr
|
||||
dst class store-header
|
||||
dst class store-tagged
|
||||
nursery-ptr size inc-allot-ptr ;
|
||||
|
||||
HOOK: %mark-card cpu ( card temp -- )
|
||||
HOOK: %mark-deck cpu ( card temp -- )
|
||||
|
||||
:: (%write-barrier) ( src slot temp1 temp2 -- )
|
||||
! Compute slot address.
|
||||
temp1 src slot [+] LEA
|
||||
|
||||
! Mark the card
|
||||
temp1 card-bits SHR
|
||||
temp2 load-cards-offset
|
||||
temp2 temp1 [+] card-mark <byte> MOV
|
||||
|
||||
! Mark the card deck
|
||||
temp1 temp2 %mark-card
|
||||
temp1 deck-bits card-bits - SHR
|
||||
temp2 load-decks-offset
|
||||
temp2 temp1 [+] card-mark <byte> MOV ;
|
||||
temp1 temp2 %mark-deck ;
|
||||
|
||||
M: x86 %write-barrier ( src slot temp1 temp2 -- ) (%write-barrier) ;
|
||||
|
||||
|
|
Loading…
Reference in New Issue