cpu.x86.assembler: BT family instructions
parent
010b5069bd
commit
986ed057d8
|
@ -190,6 +190,21 @@ cell 4 = [
|
|||
[ { HEX: 48 HEX: 6b HEX: c1 HEX: 03 } ] [ [ RAX RCX 3 IMUL3 ] { } make ] unit-test
|
||||
[ { HEX: 48 HEX: 69 HEX: c1 HEX: 44 HEX: 03 HEX: 00 HEX: 00 } ] [ [ RAX RCX HEX: 344 IMUL3 ] { } make ] unit-test
|
||||
|
||||
! BT family instructions
|
||||
[ { HEX: 0f HEX: ba HEX: e0 HEX: 01 } ] [ [ EAX 1 BT ] { } make ] unit-test
|
||||
[ { HEX: 0f HEX: ba HEX: f8 HEX: 01 } ] [ [ EAX 1 BTC ] { } make ] unit-test
|
||||
[ { HEX: 0f HEX: ba HEX: e8 HEX: 01 } ] [ [ EAX 1 BTS ] { } make ] unit-test
|
||||
[ { HEX: 0f HEX: ba HEX: f0 HEX: 01 } ] [ [ EAX 1 BTR ] { } make ] unit-test
|
||||
[ { HEX: 48 HEX: 0f HEX: ba HEX: e0 HEX: 01 } ] [ [ RAX 1 BT ] { } make ] unit-test
|
||||
[ { HEX: 0f HEX: ba HEX: 20 HEX: 01 } ] [ [ EAX [] 1 BT ] { } make ] unit-test
|
||||
|
||||
[ { HEX: 0f HEX: a3 HEX: d8 } ] [ [ EAX EBX BT ] { } make ] unit-test
|
||||
[ { HEX: 0f HEX: bb HEX: d8 } ] [ [ EAX EBX BTC ] { } make ] unit-test
|
||||
[ { HEX: 0f HEX: ab HEX: d8 } ] [ [ EAX EBX BTS ] { } make ] unit-test
|
||||
[ { HEX: 0f HEX: b3 HEX: d8 } ] [ [ EAX EBX BTR ] { } make ] unit-test
|
||||
[ { HEX: 0f HEX: a3 HEX: 18 } ] [ [ EAX [] EBX BT ] { } make ] unit-test
|
||||
|
||||
|
||||
[ { 15 183 195 } ] [ [ EAX BX MOVZX ] { } make ] unit-test
|
||||
|
||||
bootstrap-cell 4 = [
|
||||
|
|
|
@ -152,8 +152,11 @@ M: register displacement, drop ;
|
|||
: immediate-operand-size-bit ( dst imm reg,rex.w,opcode -- imm dst reg,rex.w,opcode )
|
||||
over integer? [ first3 BIN: 1 opcode-or 3array ] when ;
|
||||
|
||||
: immediate-1* ( dst imm reg,rex.w,opcode -- )
|
||||
swap [ 1-operand ] dip 1, ;
|
||||
|
||||
: immediate-1 ( dst imm reg,rex.w,opcode -- )
|
||||
immediate-operand-size-bit swap [ 1-operand ] dip 1, ;
|
||||
immediate-operand-size-bit immediate-1* ;
|
||||
|
||||
: immediate-4 ( dst imm reg,rex.w,opcode -- )
|
||||
immediate-operand-size-bit swap [ 1-operand ] dip 4, ;
|
||||
|
@ -304,6 +307,22 @@ M: operand TEST OCT: 204 2-operand ;
|
|||
|
||||
: BSR ( dst src -- ) { HEX: 0f HEX: bd } (2-operand) ;
|
||||
|
||||
GENERIC: BT ( value n -- )
|
||||
M: immediate BT ( value n -- ) { BIN: 100 t { HEX: 0f HEX: ba } } immediate-1* ;
|
||||
M: operand BT ( value n -- ) swap { HEX: 0f HEX: a3 } (2-operand) ;
|
||||
|
||||
GENERIC: BTC ( value n -- )
|
||||
M: immediate BTC ( value n -- ) { BIN: 111 t { HEX: 0f HEX: ba } } immediate-1* ;
|
||||
M: operand BTC ( value n -- ) swap { HEX: 0f HEX: bb } (2-operand) ;
|
||||
|
||||
GENERIC: BTR ( value n -- )
|
||||
M: immediate BTR ( value n -- ) { BIN: 110 t { HEX: 0f HEX: ba } } immediate-1* ;
|
||||
M: operand BTR ( value n -- ) swap { HEX: 0f HEX: b3 } (2-operand) ;
|
||||
|
||||
GENERIC: BTS ( value n -- )
|
||||
M: immediate BTS ( value n -- ) { BIN: 101 t { HEX: 0f HEX: ba } } immediate-1* ;
|
||||
M: operand BTS ( value n -- ) swap { HEX: 0f HEX: ab } (2-operand) ;
|
||||
|
||||
: NOT ( dst -- ) { BIN: 010 t HEX: f7 } 1-operand ;
|
||||
: NEG ( dst -- ) { BIN: 011 t HEX: f7 } 1-operand ;
|
||||
: MUL ( dst -- ) { BIN: 100 t HEX: f7 } 1-operand ;
|
||||
|
|
Loading…
Reference in New Issue