| 365 | To test all float vector types at once |
| 366 | """ |
| 367 | def test_arithmetic_fused(self): |
| 368 | vdata_a, vdata_b, vdata_c = [self.load(self._data())]*3 |
| 369 | vdata_cx2 = self.add(vdata_c, vdata_c) |
| 370 | # multiply and add, a*b + c |
| 371 | data_fma = self.load([a * b + c for a, b, c in zip(vdata_a, vdata_b, vdata_c)]) |
| 372 | fma = self.muladd(vdata_a, vdata_b, vdata_c) |
| 373 | assert fma == data_fma |
| 374 | # multiply and subtract, a*b - c |
| 375 | fms = self.mulsub(vdata_a, vdata_b, vdata_c) |
| 376 | data_fms = self.sub(data_fma, vdata_cx2) |
| 377 | assert fms == data_fms |
| 378 | # negate multiply and add, -(a*b) + c |
| 379 | nfma = self.nmuladd(vdata_a, vdata_b, vdata_c) |
| 380 | data_nfma = self.sub(vdata_cx2, data_fma) |
| 381 | assert nfma == data_nfma |
| 382 | # negate multiply and subtract, -(a*b) - c |
| 383 | nfms = self.nmulsub(vdata_a, vdata_b, vdata_c) |
| 384 | data_nfms = self.mul(data_fma, self.setall(-1)) |
| 385 | assert nfms == data_nfms |
| 386 | # multiply, add for odd elements and subtract even elements. |
| 387 | # (a * b) -+ c |
| 388 | fmas = list(self.muladdsub(vdata_a, vdata_b, vdata_c)) |
| 389 | assert fmas[0::2] == list(data_fms)[0::2] |
| 390 | assert fmas[1::2] == list(data_fma)[1::2] |
| 391 | |
| 392 | def test_abs(self): |
| 393 | pinf, ninf, nan = self._pinfinity(), self._ninfinity(), self._nan() |