5 x86.parse_operand @src,src
\r
8 x86.store_instruction 0DFh,@src,1
\r
9 else if @src.size = 4
\r
10 x86.store_instruction 0DBh,@src,1
\r
11 else if @src.size = 8
\r
12 x86.store_instruction 0DDh,@src,1
\r
14 err 'invalid operand size'
\r
16 err 'operand size not specified'
\r
19 err 'invalid operand'
\r
23 iterate <instr,ext>, addsub,0D0h, hadd,7Ch, hsub,7Dh
\r
24 macro instr#pd? dest*,src*
\r
25 SSE.basic_instruction 66h,ext,16,dest,src
\r
27 macro instr#ps? dest*,src*
\r
28 SSE.basic_instruction 0F2h,ext,16,dest,src
\r
32 iterate <instr,ext>, movsldup,12h, movshdup,16h
\r
33 macro instr? dest*,src*
\r
34 SSE.basic_instruction 0F3h,ext,16,dest,src
\r
38 macro movddup? dest*,src*
\r
39 SSE.basic_instruction 0F2h,12h,8,dest,src
\r
42 macro lddqu? dest*,src*
\r
43 SSE.parse_operand @dest,dest
\r
44 SSE.parse_operand @src,src
\r
45 if (@dest.size or @src.size) and not 16
\r
46 err 'invalid operand size'
\r
48 if @dest.type = 'mmreg' & @src.type = 'mem'
\r
49 @src.opcode_prefix = 0F2h
\r
50 x86.store_instruction <0Fh,0F0h>,@src,@dest.rm
\r
52 err 'invalid combination of operands'
\r
56 macro monitor? arg1,arg2,arg3
\r
57 match any, arg1 arg2 arg3
\r
58 if ~ arg1 eq eax | ~ arg2 eq ecx | ~ arg3 eq edx
\r
59 err 'invalid combination of operands'
\r
65 macro mwait? arg1,arg2
\r
66 match any, arg1 arg2
\r
67 if ~ arg1 eq eax | ~ arg2 eq ecx
\r
68 err 'invalid combination of operands'
\r