pysvp64db: fix traversal
[openpower-isa.git] / openpower / isa / svfparith.mdwn
1 <!-- SVP64 FP Instructions here described are based on -->
2 <!-- PowerISA Version 3.0 B Book 1 -->
3
4 <!-- FRS in each of these does not need to be explicitly declared -->
5 <!-- FRS is automatically calculated by SVP64 to FRT+VL (default elwidth) -->
6 <!-- (Vector FRS data sequentially starts immediately after FRT vectors) -->
7
8 <!-- PLEASE NOTE THESE ARE UNAPPROVED AND DRAFT, NOT SUBMITTED TO OPF ISA WG -->
9
10 # [DRAFT] Floating Add FFT/DCT [Single]
11
12 A-Form
13
14 * ffadds FRT,FRA,FRB (Rc=0)
15 * ffadds. FRT,FRA,FRB (Rc=1)
16
17 Pseudo-code:
18
19 FRT <- FPADD32(FRA, FRB)
20 FRS <- FPSUB32(FRB, FRA)
21
22 Special Registers Altered:
23
24 FPRF FR FI
25 FX OX UX XX
26 VXSNAN VXISI
27 CR1 (if Rc=1)
28
29 # [DRAFT] Floating Add FFT/DCT [Double]
30
31 A-Form
32
33 * ffadd FRT,FRA,FRB (Rc=0)
34 * ffadd. FRT,FRA,FRB (Rc=1)
35
36 Pseudo-code:
37
38 FRT <- FPADD64(FRA, FRB)
39 FRS <- FPSUB64(FRB, FRA)
40
41 Special Registers Altered:
42
43 FPRF FR FI
44 FX OX UX XX
45 VXSNAN VXISI
46 CR1 (if Rc=1)
47
48 # [DRAFT] Floating Subtract FFT/DCT [Single]
49
50 A-Form
51
52 * ffsubs FRT,FRA,FRB (Rc=0)
53 * ffsubs. FRT,FRA,FRB (Rc=1)
54
55 Pseudo-code:
56
57 FRT <- FPSUB32(FRB, FRA)
58 FRS <- FPADD32(FRA, FRB)
59
60 Special Registers Altered:
61
62 FPRF FR FI
63 FX OX UX XX
64 VXSNAN VXISI
65 CR1 (if Rc=1)
66
67 # [DRAFT] Floating Subtract FFT/DCT [Double]
68
69 A-Form
70
71 * ffsub FRT,FRA,FRB (Rc=0)
72 * ffsub. FRT,FRA,FRB (Rc=1)
73
74 Pseudo-code:
75
76 FRT <- FPSUB64(FRB, FRA)
77 FRS <- FPADD64(FRA, FRB)
78
79 Special Registers Altered:
80
81 FPRF FR FI
82 FX OX UX XX
83 VXSNAN VXISI
84 CR1 (if Rc=1)
85
86 # [DRAFT] Floating Multiply FFT/DCT [Single]
87
88 A-Form
89
90 * ffmuls FRT,FRA,FRC (Rc=0)
91 * ffmuls. FRT,FRA,FRC (Rc=1)
92
93 Pseudo-code:
94
95 FRT <- FPMUL32(FRA, FRC)
96 FRS <- FPMUL32(FRA, FRC, -1)
97
98 Special Registers Altered:
99
100 FPRF FR FI
101 FX OX UX XX
102 VXSNAN VXISI
103 CR1 (if Rc=1)
104
105 # [DRAFT] Floating Multiply FFT/DCT [Double]
106
107 A-Form
108
109 * ffmul FRT,FRA,FRC (Rc=0)
110 * ffmul. FRT,FRA,FRC (Rc=1)
111
112 Pseudo-code:
113
114 FRT <- FPMUL64(FRA, FRC)
115 FRS <- FPMUL64(FRA, FRC, -1)
116
117 Special Registers Altered:
118
119 FPRF FR FI
120 FX OX UX XX
121 VXSNAN VXISI
122 CR1 (if Rc=1)
123
124 # [DRAFT] Floating Divide FFT/DCT [Single]
125
126 A-Form
127
128 * ffdivs FRT,FRA,FRB (Rc=0)
129 * ffdivs. FRT,FRA,FRB (Rc=1)
130
131 Pseudo-code:
132
133 FRT <- FPDIV32(FRA, FRB)
134 FRS <- FPDIV32(FRA, FRB, -1)
135
136 Special Registers Altered:
137
138 FPRF FR FI
139 FX OX UX XX
140 VXSNAN VXISI
141 CR1 (if Rc=1)
142
143 # [DRAFT] Floating Divide FFT/DCT [Double]
144
145 A-Form
146
147 * ffdiv FRT,FRA,FRB (Rc=0)
148 * ffdiv. FRT,FRA,FRB (Rc=1)
149
150 Pseudo-code:
151
152 FRT <- FPDIV64(FRA, FRB)
153 FRS <- FPDIV64(FRA, FRB, -1)
154
155 Special Registers Altered:
156
157 FPRF FR FI
158 FX OX UX XX
159 VXSNAN VXISI
160 CR1 (if Rc=1)
161
162 # [DRAFT] Floating Twin Multiply-Add DCT [Single]
163
164 DCT-Form
165
166 * fdmadds FRT,FRA,FRB (Rc=0)
167 * fdmadds. FRT,FRA,FRB (Rc=1)
168
169 Pseudo-code:
170
171 FRS <- FPADD32(FRT, FRB)
172 sub <- FPSUB32(FRT, FRB)
173 FRT <- FPMUL32(FRA, sub)
174
175 Special Registers Altered:
176
177 FPRF FR FI
178 FX OX UX XX
179 VXSNAN VXISI VXIMZ
180 CR1 (if Rc=1)
181
182 # [DRAFT] Floating Multiply-Add FFT [Single]
183
184 A-Form
185
186 * ffmadds FRT,FRA,FRB (Rc=0)
187 * ffmadds. FRT,FRA,FRB (Rc=1)
188
189 Pseudo-code:
190
191 tmp <- FRT
192 FRT <- FPMULADD32(tmp, FRA, FRB, 1, 1)
193 FRS <- FPMULADD32(tmp, FRA, FRB, -1, 1)
194
195 Special Registers Altered:
196
197 FPRF FR FI
198 FX OX UX XX
199 VXSNAN VXISI VXIMZ
200 CR1 (if Rc=1)
201
202 # [DRAFT] Floating Multiply-Sub FFT [Single]
203
204 A-Form
205
206 * ffmsubs FRT,FRA,FRB (Rc=0)
207 * ffmsubs. FRT,FRA,FRB (Rc=1)
208
209 Pseudo-code:
210
211 tmp <- FRT
212 FRT <- FPMULADD32(tmp, FRA, FRB, 1, -1)
213 FRS <- FPMULADD32(tmp, FRA, FRB, -1, -1)
214
215 Special Registers Altered:
216
217 FPRF FR FI
218 FX OX UX XX
219 VXSNAN VXISI VXIMZ
220 CR1 (if Rc=1)
221
222 # [DRAFT] Floating Negative Multiply-Add FFT [Single]
223
224 A-Form
225
226 * ffnmadds FRT,FRA,FRB (Rc=0)
227 * ffnmadds. FRT,FRA,FRB (Rc=1)
228
229 Pseudo-code:
230
231 tmp <- FRT
232 FRT <- FPMULADD32(tmp, FRA, FRB, -1, -1)
233 FRS <- FPMULADD32(tmp, FRA, FRB, 1, -1)
234
235 Special Registers Altered:
236
237 FPRF FR FI
238 FX OX UX XX
239 VXSNAN VXISI VXIMZ
240 CR1 (if Rc=1)
241
242 # [DRAFT] Floating Negative Multiply-Sub FFT [Single]
243
244 A-Form
245
246 * ffnmsubs FRT,FRA,FRB (Rc=0)
247 * ffnmsubs. FRT,FRA,FRB (Rc=1)
248
249 Pseudo-code:
250
251 tmp <- FRT
252 FRT <- FPMULADD32(tmp, FRA, FRB, -1, 1)
253 FRS <- FPMULADD32(tmp, FRA, FRB, 1, 1)
254
255 Special Registers Altered:
256
257 FPRF FR FI
258 FX OX UX XX
259 VXSNAN VXISI VXIMZ
260 CR1 (if Rc=1)