completely wrong. Chebychev (Remez), Padé, and maybe Taylor.
[fmap.git] / x86_64_sse2_x87 / fasm / examples / x86 / include / ext / sse3.inc
blob40bc4b5b818c83b6058e03788ef0adc4c091cbc9
1 \r
2 include 'sse2.inc'\r
3 \r
4 macro fisttp? src*\r
5         x86.parse_operand @src,src\r
6         if @src.type = 'mem'\r
7                 if @src.size = 2\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
13                 else if @src.size\r
14                         err 'invalid operand size'\r
15                 else\r
16                         err 'operand size not specified'\r
17                 end if\r
18         else\r
19                 err 'invalid operand'\r
20         end if\r
21 end macro\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
26         end macro\r
27         macro instr#ps? dest*,src*\r
28                 SSE.basic_instruction 0F2h,ext,16,dest,src\r
29         end macro\r
30 end iterate\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
35         end macro\r
36 end iterate\r
38 macro movddup? dest*,src*\r
39         SSE.basic_instruction 0F2h,12h,8,dest,src\r
40 end macro\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
47         end if\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
51         else\r
52                 err 'invalid combination of operands'\r
53         end if\r
54 end macro\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
60                 end if\r
61         end match\r
62         db 0Fh,01h,0C8h\r
63 end macro\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
69                 end if\r
70         end match\r
71         db 0Fh,01h,0C9h\r
72 end macro\r