@@ -234,56 +234,62 @@ constexpr uint64_t AMDGPU::FltRoundToHWConversionTable =
234234 encodeFltRoundsToHWTable(HWTowardNegative, HWTowardPositive,
235235 TowardNegativeF32_TowardPositiveF64);
236236
237+ // / Read the hardware rounding mode equivalent of a AMDGPUFltRounds value.
238+ static constexpr uint32_t
239+ decodeFltRoundToHWConversionTable (uint64_t FltRoundToHWConversionTable,
240+ uint32_t FltRounds) {
241+ uint32_t IndexVal = FltRounds;
242+ if (IndexVal > TowardNegative)
243+ IndexVal -= ExtendedFltRoundOffset;
244+ return (FltRoundToHWConversionTable >> (IndexVal << 2 )) & 0xf ;
245+ }
246+
247+ uint32_t AMDGPU::decodeFltRoundToHWConversionTable (uint32_t FltRounds) {
248+ return ::decodeFltRoundToHWConversionTable (FltRoundToHWConversionTable,
249+ FltRounds);
250+ }
251+
252+ static constexpr uint32_t decodeFltRoundToHW (uint32_t FltRounds) {
253+ return ::decodeFltRoundToHWConversionTable (FltRoundToHWConversionTable,
254+ FltRounds);
255+ }
256+
237257// Verify evaluation of FltRoundToHWConversionTable
238258
239- static_assert (decodeFltRoundToHWConversionTable (AMDGPUFltRounds::TowardZero) ==
259+ static_assert (decodeFltRoundToHW (AMDGPUFltRounds::TowardZero) ==
240260 getModeRegisterRoundMode (HWTowardZero, HWTowardZero));
241- static_assert (
242- decodeFltRoundToHWConversionTable (AMDGPUFltRounds::NearestTiesToEven) ==
243- getModeRegisterRoundMode(HWNearestTiesToEven, HWNearestTiesToEven));
244- static_assert (
245- decodeFltRoundToHWConversionTable (AMDGPUFltRounds::TowardPositive) ==
246- getModeRegisterRoundMode(HWTowardPositive, HWTowardPositive));
247- static_assert (
248- decodeFltRoundToHWConversionTable (AMDGPUFltRounds::TowardNegative) ==
249- getModeRegisterRoundMode(HWTowardNegative, HWTowardNegative));
250-
251- static_assert (
252- decodeFltRoundToHWConversionTable (NearestTiesToEvenF32_TowardPositiveF64) ==
253- getModeRegisterRoundMode(HWNearestTiesToEven, HWTowardPositive));
254- static_assert (
255- decodeFltRoundToHWConversionTable (NearestTiesToEvenF32_TowardNegativeF64) ==
256- getModeRegisterRoundMode(HWNearestTiesToEven, HWTowardNegative));
257- static_assert (
258- decodeFltRoundToHWConversionTable (NearestTiesToEvenF32_TowardZeroF64) ==
259- getModeRegisterRoundMode(HWNearestTiesToEven, HWTowardZero));
260-
261- static_assert (
262- decodeFltRoundToHWConversionTable (TowardPositiveF32_NearestTiesToEvenF64) ==
263- getModeRegisterRoundMode(HWTowardPositive, HWNearestTiesToEven));
264- static_assert (
265- decodeFltRoundToHWConversionTable (TowardPositiveF32_TowardNegativeF64) ==
266- getModeRegisterRoundMode(HWTowardPositive, HWTowardNegative));
267- static_assert (
268- decodeFltRoundToHWConversionTable (TowardPositiveF32_TowardZeroF64) ==
269- getModeRegisterRoundMode(HWTowardPositive, HWTowardZero));
270-
271- static_assert (
272- decodeFltRoundToHWConversionTable (TowardNegativeF32_NearestTiesToEvenF64) ==
273- getModeRegisterRoundMode(HWTowardNegative, HWNearestTiesToEven));
274- static_assert (
275- decodeFltRoundToHWConversionTable (TowardNegativeF32_TowardPositiveF64) ==
276- getModeRegisterRoundMode(HWTowardNegative, HWTowardPositive));
277- static_assert (
278- decodeFltRoundToHWConversionTable (TowardNegativeF32_TowardZeroF64) ==
279- getModeRegisterRoundMode(HWTowardNegative, HWTowardZero));
280-
281- static_assert (
282- decodeFltRoundToHWConversionTable (TowardZeroF32_NearestTiesToEvenF64) ==
283- getModeRegisterRoundMode(HWTowardZero, HWNearestTiesToEven));
284- static_assert (
285- decodeFltRoundToHWConversionTable (TowardZeroF32_TowardPositiveF64) ==
286- getModeRegisterRoundMode(HWTowardZero, HWTowardPositive));
287- static_assert (
288- decodeFltRoundToHWConversionTable (TowardZeroF32_TowardNegativeF64) ==
289- getModeRegisterRoundMode(HWTowardZero, HWTowardNegative));
261+ static_assert (decodeFltRoundToHW(AMDGPUFltRounds::NearestTiesToEven) ==
262+ getModeRegisterRoundMode (HWNearestTiesToEven,
263+ HWNearestTiesToEven));
264+ static_assert (decodeFltRoundToHW(AMDGPUFltRounds::TowardPositive) ==
265+ getModeRegisterRoundMode (HWTowardPositive, HWTowardPositive));
266+ static_assert (decodeFltRoundToHW(AMDGPUFltRounds::TowardNegative) ==
267+ getModeRegisterRoundMode (HWTowardNegative, HWTowardNegative));
268+
269+ static_assert (decodeFltRoundToHW(NearestTiesToEvenF32_TowardPositiveF64) ==
270+ getModeRegisterRoundMode (HWNearestTiesToEven, HWTowardPositive));
271+ static_assert (decodeFltRoundToHW(NearestTiesToEvenF32_TowardNegativeF64) ==
272+ getModeRegisterRoundMode (HWNearestTiesToEven, HWTowardNegative));
273+ static_assert (decodeFltRoundToHW(NearestTiesToEvenF32_TowardZeroF64) ==
274+ getModeRegisterRoundMode (HWNearestTiesToEven, HWTowardZero));
275+
276+ static_assert (decodeFltRoundToHW(TowardPositiveF32_NearestTiesToEvenF64) ==
277+ getModeRegisterRoundMode (HWTowardPositive, HWNearestTiesToEven));
278+ static_assert (decodeFltRoundToHW(TowardPositiveF32_TowardNegativeF64) ==
279+ getModeRegisterRoundMode (HWTowardPositive, HWTowardNegative));
280+ static_assert (decodeFltRoundToHW(TowardPositiveF32_TowardZeroF64) ==
281+ getModeRegisterRoundMode (HWTowardPositive, HWTowardZero));
282+
283+ static_assert (decodeFltRoundToHW(TowardNegativeF32_NearestTiesToEvenF64) ==
284+ getModeRegisterRoundMode (HWTowardNegative, HWNearestTiesToEven));
285+ static_assert (decodeFltRoundToHW(TowardNegativeF32_TowardPositiveF64) ==
286+ getModeRegisterRoundMode (HWTowardNegative, HWTowardPositive));
287+ static_assert (decodeFltRoundToHW(TowardNegativeF32_TowardZeroF64) ==
288+ getModeRegisterRoundMode (HWTowardNegative, HWTowardZero));
289+
290+ static_assert (decodeFltRoundToHW(TowardZeroF32_NearestTiesToEvenF64) ==
291+ getModeRegisterRoundMode (HWTowardZero, HWNearestTiesToEven));
292+ static_assert (decodeFltRoundToHW(TowardZeroF32_TowardPositiveF64) ==
293+ getModeRegisterRoundMode (HWTowardZero, HWTowardPositive));
294+ static_assert (decodeFltRoundToHW(TowardZeroF32_TowardNegativeF64) ==
295+ getModeRegisterRoundMode (HWTowardZero, HWTowardNegative));
0 commit comments