diff --git a/layers/shader_validation.cpp b/layers/shader_validation.cpp
index f1142a6..d1f0260 100644
--- a/layers/shader_validation.cpp
+++ b/layers/shader_validation.cpp
@@ -2118,15 +2118,13 @@
 bool CoreChecks::ValidateExecutionModes(shader_module const *src, spirv_inst_iter entrypoint) {
     auto entrypoint_id = entrypoint.word(2);
 
-    // Mapping between bit widths (16, 32 and 64) and the corresponding denorm
-    // execution mode which is first encountered. Used to check if
-    // separateDenormSettings is respected.
-    std::unordered_map<uint32_t, spv::ExecutionMode> first_denorm_execution_mode;
+    // The first denorm execution mode encountered, along with its bit width.
+    // Used to check if SeparateDenormSettings is respected.
+    std::pair<spv::ExecutionMode, uint32_t> first_denorm_execution_mode = std::make_pair(spv::ExecutionModeMax, 0);
 
-    // Mapping between bit widths (16, 32 and 64) and the corresponding rounding
-    // execution mode which is first encountered. Used to check if
-    // separateRoundingModeSettings is respected.
-    std::unordered_map<uint32_t, spv::ExecutionMode> first_rounding_mode;
+    // The first rounding mode encountered, along with its bit width.
+    // Used to check if SeparateRoundingModeSettings is respected.
+    std::pair<spv::ExecutionMode, uint32_t> first_rounding_mode = std::make_pair(spv::ExecutionModeMax, 0);
 
     bool skip = false;
 
@@ -2159,10 +2157,11 @@
                                         bit_width);
                     }
 
-                    auto found = first_denorm_execution_mode.find(bit_width);
-                    if (found == first_denorm_execution_mode.end()) {
-                        first_denorm_execution_mode[bit_width] = static_cast<spv::ExecutionMode>(mode);
-                    } else if (found->second != mode && !GetEnabledFeatures()->float_controls.separateDenormSettings) {
+                    if (first_denorm_execution_mode.first == spv::ExecutionModeMax) {
+                        // Register the first denorm execution mode found
+                        first_denorm_execution_mode = std::make_pair(static_cast<spv::ExecutionMode>(mode), bit_width);
+                    } else if (first_denorm_execution_mode.first != mode && first_denorm_execution_mode.second != bit_width &&
+                               !GetEnabledFeatures()->float_controls.separateDenormSettings) {
                         skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0,
                                         kVUID_Core_Shader_FeatureNotEnabled,
                                         "Shader uses separate denorm execution modes for different bit widths but "
@@ -2182,10 +2181,11 @@
                                         bit_width);
                     }
 
-                    auto found = first_denorm_execution_mode.find(bit_width);
-                    if (found == first_denorm_execution_mode.end()) {
-                        first_denorm_execution_mode[bit_width] = static_cast<spv::ExecutionMode>(mode);
-                    } else if (found->second != mode && !GetEnabledFeatures()->float_controls.separateDenormSettings) {
+                    if (first_denorm_execution_mode.first == spv::ExecutionModeMax) {
+                        // Register the first denorm execution mode found
+                        first_denorm_execution_mode = std::make_pair(static_cast<spv::ExecutionMode>(mode), bit_width);
+                    } else if (first_denorm_execution_mode.first != mode && first_denorm_execution_mode.second != bit_width &&
+                               !GetEnabledFeatures()->float_controls.separateDenormSettings) {
                         skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0,
                                         kVUID_Core_Shader_FeatureNotEnabled,
                                         "Shader uses separate denorm execution modes for different bit widths but "
@@ -2205,10 +2205,11 @@
                                         bit_width);
                     }
 
-                    auto found = first_rounding_mode.find(bit_width);
-                    if (found == first_rounding_mode.end()) {
-                        first_rounding_mode[bit_width] = static_cast<spv::ExecutionMode>(mode);
-                    } else if (found->second != mode && !GetEnabledFeatures()->float_controls.separateRoundingModeSettings) {
+                    if (first_rounding_mode.first == spv::ExecutionModeMax) {
+                        // Register the first rounding mode found
+                        first_rounding_mode = std::make_pair(static_cast<spv::ExecutionMode>(mode), bit_width);
+                    } else if (first_rounding_mode.first != mode && first_rounding_mode.second != bit_width &&
+                               !GetEnabledFeatures()->float_controls.separateRoundingModeSettings) {
                         skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0,
                                         kVUID_Core_Shader_FeatureNotEnabled,
                                         "Shader uses separate rounding modes for different bit widths but "
@@ -2228,10 +2229,11 @@
                                         bit_width);
                     }
 
-                    auto found = first_rounding_mode.find(bit_width);
-                    if (found == first_rounding_mode.end()) {
-                        first_rounding_mode[bit_width] = static_cast<spv::ExecutionMode>(mode);
-                    } else if (found->second != mode && !GetEnabledFeatures()->float_controls.separateRoundingModeSettings) {
+                    if (first_rounding_mode.first == spv::ExecutionModeMax) {
+                        // Register the first rounding mode found
+                        first_rounding_mode = std::make_pair(static_cast<spv::ExecutionMode>(mode), bit_width);
+                    } else if (first_rounding_mode.first != mode && first_rounding_mode.second != bit_width &&
+                               !GetEnabledFeatures()->float_controls.separateRoundingModeSettings) {
                         skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0,
                                         kVUID_Core_Shader_FeatureNotEnabled,
                                         "Shader uses separate rounding modes for different bit widths but "
