summaryrefslogtreecommitdiff
path: root/as/asm/shdouble.asm
blob: 1080ece7a2e28b7b4e4d7f436434fadb4ced597b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
; SHDOUBLE.ASM

ILLEGALS	EQU	1

; 0F A4		SHLD	r/m16,r16,imm8		3/7
; 0F A4		SHLD	r/m32,r32,imm8		3/7
; 0F A5		SHLD	r/m16,r16,CL		3/7
; 0F A5		SHLD	r/m32,r32,CL		3/7

; 0F AC		SHRD	r/m16,r16,imm8		3/7
; 0F AC		SHRD	r/m32,r32,imm8		3/7
; 0F AD		SHRD	r/m16,r16,CL		3/7
; 0F AD		SHRD	r/m32,r32,CL		3/7

IF	ILLEGALS
	SHLD	AL,BL,8		; byte size
	SHLD	AX,8,8		; immediate source
	SHLD	AX,DS,8		; segment register
	SHLD	AX,[BX],8	; non-register source
	SHLD	AX,BX,256	; shift count too big
	SHLD	AL,BL,8		; byte size
ENDIF

	SHLD	BX,CX,3
	SHLD	EDX,ESI,1
	SHLD	CX,BX,CL
	SHLD	ESI,EDX,1
	SHLD	[BX],CX,3
	SHLD	[BX],ECX,1
	SHLD	[SI],BX,CL
	SHLD	[SI],EBX,CL

	SHRD	BX,CX,3
	SHRD	CX,BX,CL