include/intrin: Implement `_rot{l,r}{8,16}` functions

They are declared in 'intrin.h' but were not defined anywhere.

The implementations might be imperfect: If the second argument is <= zero
or is >= the width of the first parameter, one of the shift counts will be
out of range and cause undefined behavior. Some bitwise arithmetic may be
involved to prevent this (like in 'ia32intrin.h' from GCC 8), which is
unfortunately not recognized by GCC 7 and earlier versions as bitwise
rotation and results in rather complex code.

Reference: https://docs.microsoft.com/en-us/cpp/intrinsics/rotl8-rotl16?view=msvc-160
Reference: https://github.com/msys2/MINGW-packages/issues/7437
Signed-off-by: Liu Hao <lh_mouse@126.com>
diff --git a/mingw-w64-headers/include/psdk_inc/intrin-impl.h b/mingw-w64-headers/include/psdk_inc/intrin-impl.h
index 072a98f..27cc26a 100644
--- a/mingw-w64-headers/include/psdk_inc/intrin-impl.h
+++ b/mingw-w64-headers/include/psdk_inc/intrin-impl.h
@@ -607,6 +607,54 @@
 #define __INTRINSIC_DEFINED__lrotr
 #endif /* __INTRINSIC_PROLOG */
 
+#if __INTRINSIC_PROLOG(_rotl8)
+unsigned char _rotl8(unsigned char __X, unsigned char __C);
+#if !__has_builtin(_rotl8)
+__INTRINSICS_USEINLINE
+unsigned char _rotl8(unsigned char __X, unsigned char __C)
+{
+  return (__X << __C) | (__X >> (8 - __C));
+}
+#endif
+#define __INTRINSIC_DEFINED__rotl8
+#endif /* __INTRINSIC_PROLOG */
+
+#if __INTRINSIC_PROLOG(_rotr8)
+unsigned char _rotr8(unsigned char __X, unsigned char __C);
+#if !__has_builtin(_rotr8)
+__INTRINSICS_USEINLINE
+unsigned char _rotr8(unsigned char __X, unsigned char __C)
+{
+  return (__X >> __C) | (__X << (8 - __C));
+}
+#endif
+#define __INTRINSIC_DEFINED__rotr8
+#endif /* __INTRINSIC_PROLOG */
+
+#if __INTRINSIC_PROLOG(_rotl16)
+unsigned short _rotl16(unsigned short __X, unsigned char __C);
+#if !__has_builtin(_rotl16)
+__INTRINSICS_USEINLINE
+unsigned short _rotl16(unsigned short __X, unsigned char __C)
+{
+  return (__X << __C) | (__X >> (16 - __C));
+}
+#endif
+#define __INTRINSIC_DEFINED__rotl16
+#endif /* __INTRINSIC_PROLOG */
+
+#if __INTRINSIC_PROLOG(_rotr16)
+unsigned short _rotr16(unsigned short __X, unsigned char __C);
+#if !__has_builtin(_rotr16)
+__INTRINSICS_USEINLINE
+unsigned short _rotr16(unsigned short __X, unsigned char __C)
+{
+  return (__X >> __C) | (__X << (16 - __C));
+}
+#endif
+#define __INTRINSIC_DEFINED__rotr16
+#endif /* __INTRINSIC_PROLOG */
+
 #if defined(__x86_64__) || defined(_AMD64_)
 
 #if __INTRINSIC_PROLOG(__faststorefence)