cpu.x86.assembler: zero-extension can work on the TEST instruction too
parent
0cbd0552b0
commit
9fac53989a
|
@ -17,7 +17,9 @@ IN: cpu.x86.assembler.tests
|
|||
|
||||
{ { 0x83 0xc1 0x01 } } [ [ ECX 1 ADD ] { } make ] unit-test
|
||||
{ { 0x81 0xc1 0x96 0x00 0x00 0x00 } } [ [ ECX 150 ADD ] { } make ] unit-test
|
||||
|
||||
{ { 0xf7 0xc1 0xd2 0x04 0x00 0x00 } } [ [ ECX 1234 TEST ] { } make ] unit-test
|
||||
{ { 0xf7 0xc3 0x0f 0x00 0x00 0x00 } } [ [ RBX 0xf TEST ] { } make ] unit-test
|
||||
|
||||
! 64-bit registers
|
||||
{ { 0x40 0x8a 0x2a } } [ [ BPL RDX [] MOV ] { } make ] unit-test
|
||||
|
|
|
@ -211,6 +211,9 @@ M: operand POP { 0b000 f 0x8f } 1-operand ;
|
|||
: zero-extendable? ( imm -- ? )
|
||||
1 32 2^ 1 - between? ;
|
||||
|
||||
: maybe-zero-extend ( reg imm -- reg' imm )
|
||||
dup zero-extendable? [ [ 32-bit-version-of ] dip ] when ;
|
||||
|
||||
GENERIC# (MOV-I) 1 ( dst src -- )
|
||||
|
||||
M: register (MOV-I)
|
||||
|
@ -336,8 +339,7 @@ M: operand SBB 0o030 2-operand ;
|
|||
|
||||
GENERIC: AND ( dst src -- )
|
||||
M: immediate AND ( dst src -- )
|
||||
dup zero-extendable? [ [ 32-bit-version-of ] dip ] when
|
||||
{ 0b100 t 0x80 } immediate-1/4 ;
|
||||
maybe-zero-extend { 0b100 t 0x80 } immediate-1/4 ;
|
||||
M: operand AND 0o040 2-operand ;
|
||||
|
||||
GENERIC: SUB ( dst src -- )
|
||||
|
@ -360,7 +362,8 @@ M: immediate CMP ( dst src -- )
|
|||
M: operand CMP 0o070 2-operand ;
|
||||
|
||||
GENERIC: TEST ( dst src -- )
|
||||
M: immediate TEST { 0b0 t 0xf7 } immediate-4 ;
|
||||
M: immediate TEST ( dst src -- )
|
||||
maybe-zero-extend { 0b0 t 0xf7 } immediate-4 ;
|
||||
M: operand TEST 0o204 2-operand ;
|
||||
|
||||
: XCHG ( dst src -- ) 0o207 2-operand ;
|
||||
|
|
Loading…
Reference in New Issue