cpu.x86.assembler: add MOVABS instruction
MOVABS generates the one-byte opcode version of MOV eAX, [absolute] or MOV [absolute], eAX, which saves a byte per safepoint on x86-32.db4
parent
9b575730bb
commit
ae1a903c4e
|
@ -360,7 +360,7 @@ IN: bootstrap.x86
|
|||
jit-jump-quot ;
|
||||
|
||||
: jit-safepoint ( -- )
|
||||
0 [] EAX MOV rc-absolute rel-safepoint ;
|
||||
0 EAX MOVABS rc-absolute rel-safepoint ;
|
||||
|
||||
[
|
||||
jit-start-context-and-delete
|
||||
|
|
|
@ -235,9 +235,57 @@ cell 4 = [
|
|||
|
||||
bootstrap-cell 4 = [
|
||||
[ { 100 199 5 0 0 0 0 123 0 0 0 } ] [ [ 0 [] FS 123 MOV ] { } make ] unit-test
|
||||
|
||||
[ { HEX: a0 HEX: 67 HEX: 45 HEX: 23 HEX: 01 } ]
|
||||
[ [ AL HEX: 0123,4567 MOVABS ] { } make ] unit-test
|
||||
|
||||
[ { HEX: 66 HEX: a1 HEX: 67 HEX: 45 HEX: 23 HEX: 01 } ]
|
||||
[ [ AX HEX: 0123,4567 MOVABS ] { } make ] unit-test
|
||||
|
||||
[ { HEX: a1 HEX: 67 HEX: 45 HEX: 23 HEX: 01 } ]
|
||||
[ [ EAX HEX: 0123,4567 MOVABS ] { } make ] unit-test
|
||||
|
||||
[ { HEX: 48 HEX: a1 HEX: 67 HEX: 45 HEX: 23 HEX: 01 } ]
|
||||
[ [ RAX HEX: 0123,4567 MOVABS ] { } make ] unit-test
|
||||
|
||||
[ { HEX: a2 HEX: 67 HEX: 45 HEX: 23 HEX: 01 } ]
|
||||
[ [ HEX: 0123,4567 AL MOVABS ] { } make ] unit-test
|
||||
|
||||
[ { HEX: 66 HEX: a3 HEX: 67 HEX: 45 HEX: 23 HEX: 01 } ]
|
||||
[ [ HEX: 0123,4567 AX MOVABS ] { } make ] unit-test
|
||||
|
||||
[ { HEX: a3 HEX: 67 HEX: 45 HEX: 23 HEX: 01 } ]
|
||||
[ [ HEX: 0123,4567 EAX MOVABS ] { } make ] unit-test
|
||||
|
||||
[ { HEX: 48 HEX: a3 HEX: 67 HEX: 45 HEX: 23 HEX: 01 } ]
|
||||
[ [ HEX: 0123,4567 RAX MOVABS ] { } make ] unit-test
|
||||
] when
|
||||
|
||||
bootstrap-cell 8 = [
|
||||
[ { 72 137 13 123 0 0 0 } ] [ [ 123 [RIP+] RCX MOV ] { } make ] unit-test
|
||||
[ { 101 72 137 12 37 123 0 0 0 } ] [ [ 123 [] GS RCX MOV ] { } make ] unit-test
|
||||
|
||||
[ { HEX: a0 HEX: ef HEX: cd HEX: ab HEX: 89 HEX: 67 HEX: 45 HEX: 23 HEX: 01 } ]
|
||||
[ [ AL HEX: 0123,4567,89ab,cdef MOVABS ] { } make ] unit-test
|
||||
|
||||
[ { HEX: 66 HEX: a1 HEX: ef HEX: cd HEX: ab HEX: 89 HEX: 67 HEX: 45 HEX: 23 HEX: 01 } ]
|
||||
[ [ AX HEX: 0123,4567,89ab,cdef MOVABS ] { } make ] unit-test
|
||||
|
||||
[ { HEX: a1 HEX: ef HEX: cd HEX: ab HEX: 89 HEX: 67 HEX: 45 HEX: 23 HEX: 01 } ]
|
||||
[ [ EAX HEX: 0123,4567,89ab,cdef MOVABS ] { } make ] unit-test
|
||||
|
||||
[ { HEX: 48 HEX: a1 HEX: ef HEX: cd HEX: ab HEX: 89 HEX: 67 HEX: 45 HEX: 23 HEX: 01 } ]
|
||||
[ [ RAX HEX: 0123,4567,89ab,cdef MOVABS ] { } make ] unit-test
|
||||
|
||||
[ { HEX: a2 HEX: ef HEX: cd HEX: ab HEX: 89 HEX: 67 HEX: 45 HEX: 23 HEX: 01 } ]
|
||||
[ [ HEX: 0123,4567,89ab,cdef AL MOVABS ] { } make ] unit-test
|
||||
|
||||
[ { HEX: 66 HEX: a3 HEX: ef HEX: cd HEX: ab HEX: 89 HEX: 67 HEX: 45 HEX: 23 HEX: 01 } ]
|
||||
[ [ HEX: 0123,4567,89ab,cdef AX MOVABS ] { } make ] unit-test
|
||||
|
||||
[ { HEX: a3 HEX: ef HEX: cd HEX: ab HEX: 89 HEX: 67 HEX: 45 HEX: 23 HEX: 01 } ]
|
||||
[ [ HEX: 0123,4567,89ab,cdef EAX MOVABS ] { } make ] unit-test
|
||||
|
||||
[ { HEX: 48 HEX: a3 HEX: ef HEX: cd HEX: ab HEX: 89 HEX: 67 HEX: 45 HEX: 23 HEX: 01 } ]
|
||||
[ [ HEX: 0123,4567,89ab,cdef RAX MOVABS ] { } make ] unit-test
|
||||
] when
|
||||
|
|
|
@ -231,6 +231,27 @@ GENERIC: MOV ( dst src -- )
|
|||
M: immediate MOV (MOV-I) ;
|
||||
M: operand MOV HEX: 88 2-operand ;
|
||||
|
||||
ERROR: bad-movabs-operands dst src ;
|
||||
|
||||
GENERIC: MOVABS ( dst src -- )
|
||||
M: object MOVABS bad-movabs-operands ;
|
||||
M: register MOVABS
|
||||
{
|
||||
{ AL [ HEX: a2 , cell, ] }
|
||||
{ AX [ HEX: 66 , HEX: a3 , cell, ] }
|
||||
{ EAX [ HEX: a3 , cell, ] }
|
||||
{ RAX [ HEX: 48 , HEX: a3 , cell, ] }
|
||||
[ swap bad-movabs-operands ]
|
||||
} case ;
|
||||
M: integer MOVABS
|
||||
swap {
|
||||
{ AL [ HEX: a0 , cell, ] }
|
||||
{ AX [ HEX: 66 , HEX: a1 , cell, ] }
|
||||
{ EAX [ HEX: a1 , cell, ] }
|
||||
{ RAX [ HEX: 48 , HEX: a1 , cell, ] }
|
||||
[ swap bad-movabs-operands ]
|
||||
} case ;
|
||||
|
||||
: LEA ( dst src -- ) swap HEX: 8d 2-operand ;
|
||||
|
||||
! Control flow
|
||||
|
|
Loading…
Reference in New Issue