nir: mind rounding mode on fadd, fsub, fmul and fma opcodes
authorSamuel Iglesias Gonsálvez <siglesias@igalia.com>
Tue, 12 Feb 2019 14:43:10 +0000 (15:43 +0100)
committerAndres Gomez <agomez@igalia.com>
Tue, 17 Sep 2019 20:39:18 +0000 (23:39 +0300)
commit7580707345b7df0f262935c30b43bde16d297e39
tree9652120d350202eebe9253f0bc9c829d0b057da6
parent0ac07c7ca7207f3f1388c0450b456ecc578d9c5b
nir: mind rounding mode on fadd, fsub, fmul and fma opcodes

According to Vulkan spec, the new execution modes affect only
correctly rounded SPIR-V instructions, which includes fadd, fsub and
fmul.

v2:
- Fix fmul, fsub and fadd round-to-zero definitions, they should use
  auxiliary functions to calculate the proper value because Mesa uses
  round-to-nearest-even rounding mode by default (Connor).

v3:
- Do an actual fused multiply-add at ffma (Connor).

v4:
- Simplify fadd and fmul for bit sizes < 64 (Connor).
- Do not use double ffma for 32 bits float (Connor).

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com> [v3]
src/compiler/nir/nir_constant_expressions.py
src/compiler/nir/nir_opcodes.py