diff --git a/Test/baseResults/spv.int64.frag.out b/Test/baseResults/spv.int64.frag.out
index c41a2fd..0cd8f3d 100644
--- a/Test/baseResults/spv.int64.frag.out
+++ b/Test/baseResults/spv.int64.frag.out
@@ -12,6 +12,7 @@
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               SourceExtension  "GL_ARB_gpu_shader_int64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int64"
                               Name 4  "main"
                               Name 6  "literal("
                               Name 8  "typeCast("
diff --git a/Test/spv.int64.frag b/Test/spv.int64.frag
index 8021b7e..bcbb24b 100644
--- a/Test/spv.int64.frag
+++ b/Test/spv.int64.frag
@@ -1,6 +1,7 @@
 #version 450
 
 #extension GL_ARB_gpu_shader_int64: enable
+#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
 
 layout(binding = 0) uniform Uniforms
 {
diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
index 80d5be9..6b89456 100644
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -1429,6 +1429,7 @@
     }
     return false;
 }
+
 //
 // See if the 'from' type is allowed to be implicitly converted to the
 // 'to' type.  This is not about vector/array/struct, only about basic type.
@@ -1474,36 +1475,161 @@
         }
     }
 
+    bool explicitTypesEnabled = extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int8) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int16) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int32) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int64) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float16) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float32) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float64);
 
-    // integral promotions
-    if (isIntegralPromotion(from, to)) {
-        return true;
-    }
+    if(explicitTypesEnabled)
+    {
 
-    // floating-point promotions
-    if (isFPPromotion(from, to)) {
-        return true;
-    }
-
-    // integral conversions
-    if (isIntegralConversion(from, to)) {
-        return true;
-    }
-
-    // floating-point conversions
-    if (isFPConversion(from, to)) {
-        return true;
-    }
-
-    // floating-integral conversions
-    if (isFPIntegralConversion(from, to)) {
-        return true;
-    }
-
-    // hlsl supported conversions
-    if (source == EShSourceHlsl) {
-        if (from == EbtBool && (to == EbtInt || to == EbtUint || to == EbtFloat))
+        // integral promotions
+        if (isIntegralPromotion(from, to)) {
             return true;
+        }
+
+        // floating-point promotions
+        if (isFPPromotion(from, to)) {
+            return true;
+        }
+
+        // integral conversions
+        if (isIntegralConversion(from, to)) {
+            return true;
+        }
+
+        // floating-point conversions
+        if (isFPConversion(from, to)) {
+           return true;
+        }
+
+        // floating-integral conversions
+        if (isFPIntegralConversion(from, to)) {
+           return true;
+        }
+
+        // hlsl supported conversions
+        if (source == EShSourceHlsl) {
+            if (from == EbtBool && (to == EbtInt || to == EbtUint || to == EbtFloat))
+                return true;
+        }
+    } else {
+        switch (to) {
+        case EbtDouble:
+            switch (from) {
+            case EbtInt:
+            case EbtUint:
+            case EbtInt64:
+            case EbtUint64:
+#ifdef AMD_EXTENSIONS
+            case EbtInt16:
+            case EbtUint16:
+#endif
+             case EbtFloat:
+             case EbtDouble:
+#ifdef AMD_EXTENSIONS
+             case EbtFloat16:
+#endif
+                return true;
+            default:
+                return false;
+           }
+        case EbtFloat:
+            switch (from) {
+            case EbtInt:
+            case EbtUint:
+#ifdef AMD_EXTENSIONS
+            case EbtInt16:
+            case EbtUint16:
+#endif
+            case EbtFloat:
+#ifdef AMD_EXTENSIONS
+            case EbtFloat16:
+#endif
+                 return true;
+            case EbtBool:
+                 return (source == EShSourceHlsl);
+            default:
+                 return false;
+            }
+        case EbtUint:
+            switch (from) {
+            case EbtInt:
+                 return version >= 400 || (source == EShSourceHlsl);
+            case EbtUint:
+#ifdef AMD_EXTENSIONS
+            case EbtInt16:
+            case EbtUint16:
+#endif
+                return true;
+            case EbtBool:
+                return (source == EShSourceHlsl);
+            default:
+                return false;
+            }
+        case EbtInt:
+            switch (from) {
+            case EbtInt:
+#ifdef AMD_EXTENSIONS
+            case EbtInt16:
+#endif
+                return true;
+            case EbtBool:
+                return (source == EShSourceHlsl);
+            default:
+                return false;
+            }
+        case EbtUint64:
+            switch (from) {
+            case EbtInt:
+            case EbtUint:
+            case EbtInt64:
+            case EbtUint64:
+#ifdef AMD_EXTENSIONS
+            case EbtInt16:
+            case EbtUint16:
+#endif
+                return true;
+            default:
+                return false;
+            }
+        case EbtInt64:
+            switch (from) {
+            case EbtInt:
+            case EbtInt64:
+#ifdef AMD_EXTENSIONS
+            case EbtInt16:
+#endif
+                return true;
+            default:
+                return false;
+            }
+#ifdef AMD_EXTENSIONS
+        case EbtFloat16:
+            switch (from) {
+            case EbtInt16:
+            case EbtUint16:
+            case EbtFloat16:
+                return true;
+            default:
+                return false;
+        }
+        case EbtUint16:
+            switch (from) {
+            case EbtInt16:
+            case EbtUint16:
+                return true;
+            default:
+                return false;
+        }
+#endif
+        default:
+            return false;
+        }
     }
 
     return false;
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
index 1e62e9b..8be3a13 100644
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -647,6 +647,7 @@
     bool isConversionAllowed(TOperator op, TIntermTyped* node) const;
     TIntermUnary* createConversion(TBasicType convertTo, TIntermTyped* node) const;
     std::tuple<TBasicType, TBasicType> getConversionDestinatonType(TBasicType type0, TBasicType type1, TOperator op) const;
+    bool extensionRequested(const char *extension) const {return requestedExtensions.find(extension) != requestedExtensions.end();}
 
     const EShLanguage language;  // stage, known at construction time
     EShSource source;            // source language, known a bit later
