Flesh out shift instructions
parent
449c1191cc
commit
abb02f1784
|
@ -57,3 +57,8 @@ IN: cpu.x86.assembler.tests
|
||||||
|
|
||||||
[ { HEX: 49 HEX: 89 HEX: 04 HEX: 2c } ] [ [ R12 RBP [+] RAX MOV ] { } make ] unit-test
|
[ { HEX: 49 HEX: 89 HEX: 04 HEX: 2c } ] [ [ R12 RBP [+] RAX MOV ] { } make ] unit-test
|
||||||
[ [ R12 RSP [+] RAX MOV ] { } make ] must-fail
|
[ [ R12 RSP [+] RAX MOV ] { } make ] must-fail
|
||||||
|
|
||||||
|
[ { HEX: 48 HEX: d3 HEX: e0 } ] [ [ RAX CL SHL ] { } make ] unit-test
|
||||||
|
[ { HEX: 48 HEX: d3 HEX: e1 } ] [ [ RCX CL SHL ] { } make ] unit-test
|
||||||
|
[ { HEX: 48 HEX: d3 HEX: e8 } ] [ [ RAX CL SHR ] { } make ] unit-test
|
||||||
|
[ { HEX: 48 HEX: d3 HEX: e9 } ] [ [ RCX CL SHR ] { } make ] unit-test
|
||||||
|
|
|
@ -391,13 +391,20 @@ M: operand CMP OCT: 070 2-operand ;
|
||||||
: CDQ ( -- ) HEX: 99 , ;
|
: CDQ ( -- ) HEX: 99 , ;
|
||||||
: CQO ( -- ) HEX: 48 , CDQ ;
|
: CQO ( -- ) HEX: 48 , CDQ ;
|
||||||
|
|
||||||
: ROL ( dst n -- ) swap { BIN: 000 t HEX: c0 } immediate-1 ;
|
: (SHIFT) ( dst src op -- )
|
||||||
: ROR ( dst n -- ) swap { BIN: 001 t HEX: c0 } immediate-1 ;
|
over CL eq? [
|
||||||
: RCL ( dst n -- ) swap { BIN: 010 t HEX: c0 } immediate-1 ;
|
nip t HEX: d3 3array 1-operand
|
||||||
: RCR ( dst n -- ) swap { BIN: 011 t HEX: c0 } immediate-1 ;
|
] [
|
||||||
: SHL ( dst n -- ) swap { BIN: 100 t HEX: c0 } immediate-1 ;
|
swapd t HEX: c0 3array immediate-1
|
||||||
: SHR ( dst n -- ) swap { BIN: 101 t HEX: c0 } immediate-1 ;
|
] if ; inline
|
||||||
: SAR ( dst n -- ) swap { BIN: 111 t HEX: c0 } immediate-1 ;
|
|
||||||
|
: ROL ( dst n -- ) BIN: 000 (SHIFT) ;
|
||||||
|
: ROR ( dst n -- ) BIN: 001 (SHIFT) ;
|
||||||
|
: RCL ( dst n -- ) BIN: 010 (SHIFT) ;
|
||||||
|
: RCR ( dst n -- ) BIN: 011 (SHIFT) ;
|
||||||
|
: SHL ( dst n -- ) BIN: 100 (SHIFT) ;
|
||||||
|
: SHR ( dst n -- ) BIN: 101 (SHIFT) ;
|
||||||
|
: SAR ( dst n -- ) BIN: 111 (SHIFT) ;
|
||||||
|
|
||||||
GENERIC: IMUL2 ( dst src -- )
|
GENERIC: IMUL2 ( dst src -- )
|
||||||
M: immediate IMUL2 swap dup reg-code t HEX: 68 3array immediate-1/4 ;
|
M: immediate IMUL2 swap dup reg-code t HEX: 68 3array immediate-1/4 ;
|
||||||
|
|
Loading…
Reference in New Issue