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
|
{ { 0x83 0xc1 0x01 } } [ [ ECX 1 ADD ] { } make ] unit-test
|
||||||
{ { 0x81 0xc1 0x96 0x00 0x00 0x00 } } [ [ ECX 150 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 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
|
! 64-bit registers
|
||||||
{ { 0x40 0x8a 0x2a } } [ [ BPL RDX [] MOV ] { } make ] unit-test
|
{ { 0x40 0x8a 0x2a } } [ [ BPL RDX [] MOV ] { } make ] unit-test
|
||||||
|
|
|
@ -211,6 +211,9 @@ M: operand POP { 0b000 f 0x8f } 1-operand ;
|
||||||
: zero-extendable? ( imm -- ? )
|
: zero-extendable? ( imm -- ? )
|
||||||
1 32 2^ 1 - between? ;
|
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 -- )
|
GENERIC# (MOV-I) 1 ( dst src -- )
|
||||||
|
|
||||||
M: register (MOV-I)
|
M: register (MOV-I)
|
||||||
|
@ -336,8 +339,7 @@ M: operand SBB 0o030 2-operand ;
|
||||||
|
|
||||||
GENERIC: AND ( dst src -- )
|
GENERIC: AND ( dst src -- )
|
||||||
M: immediate AND ( dst src -- )
|
M: immediate AND ( dst src -- )
|
||||||
dup zero-extendable? [ [ 32-bit-version-of ] dip ] when
|
maybe-zero-extend { 0b100 t 0x80 } immediate-1/4 ;
|
||||||
{ 0b100 t 0x80 } immediate-1/4 ;
|
|
||||||
M: operand AND 0o040 2-operand ;
|
M: operand AND 0o040 2-operand ;
|
||||||
|
|
||||||
GENERIC: SUB ( dst src -- )
|
GENERIC: SUB ( dst src -- )
|
||||||
|
@ -360,7 +362,8 @@ M: immediate CMP ( dst src -- )
|
||||||
M: operand CMP 0o070 2-operand ;
|
M: operand CMP 0o070 2-operand ;
|
||||||
|
|
||||||
GENERIC: TEST ( dst src -- )
|
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 ;
|
M: operand TEST 0o204 2-operand ;
|
||||||
|
|
||||||
: XCHG ( dst src -- ) 0o207 2-operand ;
|
: XCHG ( dst src -- ) 0o207 2-operand ;
|
||||||
|
|
Loading…
Reference in New Issue