@@ -234,56 +234,62 @@ constexpr uint64_t AMDGPU::FltRoundToHWConversionTable =
234
234
encodeFltRoundsToHWTable(HWTowardNegative, HWTowardPositive,
235
235
TowardNegativeF32_TowardPositiveF64);
236
236
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
+
237
257
// Verify evaluation of FltRoundToHWConversionTable
238
258
239
- static_assert (decodeFltRoundToHWConversionTable (AMDGPUFltRounds::TowardZero) ==
259
+ static_assert (decodeFltRoundToHW (AMDGPUFltRounds::TowardZero) ==
240
260
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