v_div_fixup_legacy_f16 GPU Native ISA AMD Vector
V DIV FIXUP LEGACY F16 Vector Arithmetic
v_div_fixup_legacy_f16
Half precision division fixup. Has non-standard rule for OPSEL.
Encoding
Verified bit-level encoding data is not yet available for this instruction.
The instruction-format classification below (VOP3)
is well-documented and stable; exact per-target opcode/field bit positions have not
yet been imported from a verified source.
Operands
Operand details have not yet been curated for this instruction.
GFX Target Compatibility
Per-target GFX compatibility has not yet been verified for this instruction.
Related
More in Vector Arithmetic
Reference
AMDGPU / GFX ISA
Semantics
S0 = Quotient, S1 = Denominator, S2 = Numerator.
Given a numerator, denominator, and quotient from a divide, this opcode detects and applies specific case
numerics, touching up the quotient if necessary. This opcode also generates invalid, denorm and divide by
zero exceptions caused by the division.
sign_out = (sign(S1.f16) ^ sign(S2.f16));
if isNAN(64'F(S2.f16)) then
tmp = cvtToQuietNAN(64'F(S2.f16))
elsif isNAN(64'F(S1.f16)) then
tmp = cvtToQuietNAN(64'F(S1.f16))
elsif ((64'F(S1.f16) == 0.0) && (64'F(S2.f16) == 0.0)) then
// 0/0
tmp = 16'F(0xfe00)
elsif ((64'F(abs(S1.f16)) == +INF) && (64'F(abs(S2.f16)) == +INF)) then
// inf/inf
tmp = 16'F(0xfe00)
elsif ((64'F(S1.f16) == 0.0) || (64'F(abs(S2.f16)) == +INF)) then
// x/0, or inf/y
tmp = sign_out ? -INF : +INF
elsif ((64'F(abs(S1.f16)) == +INF) || (64'F(S2.f16) == 0.0)) then
// x/inf, 0/y
tmp = sign_out ? -0.0 : 0.0
else
tmp = sign_out ? -abs(S0.f16) : abs(S0.f16)
endif;
if OPSEL.u4[3] then
D0 = { tmp.f16, D0[15 : 0] }
else
D0 = { 16'0, tmp.f16 }
endif
Sources
- User Guide for AMDGPU Backend ↗ - LLVM Project
-
"AMD Instinct MI300" Instruction Set Architecture: Reference Guide ↗
- Advanced Micro Devices, Inc.
Reference Guide, page 352.