--- lrb_prototype_primitives.inl	2010-06-15 17:01:51.147217886 +0200
+++ lrbni_prototypes.h	2010-06-15 17:01:22.767217213 +0200
@@ -1,4 +1,9 @@
 /**
+ * Modified by Matthias Kretz <kretz@kde.org> to work without -fno-strict-aliasing, i.e. by making
+ * all casts to int/short/float/... use a __may_alias__ type.
+ */
+
+/**
 *** Copyright (C) 2009 Intel Corporation.  All rights reserved.
 ***
 *** The information and source code contained herein is the exclusive
@@ -10,6 +15,8 @@
 #ifndef _LRB_PROTOTYPE_PRIMITIVES_INL
 #define _LRB_PROTOTYPE_PRIMITIVES_INL
 
+#pragma GCC system_header
+
 #include <xmmintrin.h>
 #include <emmintrin.h>
 #include <float.h>
@@ -43,6 +50,8 @@
 
 #if defined(__QMSPP_)
 
+#define _LPP_MAY_ALIAS
+
 typedef struct __declspec(align(64)) {
     float v[16];
 } __m512;
@@ -57,6 +66,8 @@
 
 #else
 
+#define _LPP_MAY_ALIAS
+
 typedef __declspec(align(16)) struct {
     float v[16];
 } __m512;
@@ -73,20 +84,24 @@
 
 #elif defined(__GNUC__)
 
+#define _LPP_MAY_ALIAS __attribute__((__may_alias__))
+
 typedef struct {
 float v[16];
-} __attribute__((__may_alias__)) __m512;
+} _LPP_MAY_ALIAS __m512;
 
 typedef struct {
 double v[8];
-} __attribute__((__may_alias__)) __m512d;
+} _LPP_MAY_ALIAS __m512d;
 
 typedef struct {
 int v[16];
-} __attribute__((__may_alias__)) __m512i;
+} _LPP_MAY_ALIAS __m512i;
 
 #else
 
+#define _LPP_MAY_ALIAS
+
 typedef struct {
     float v[16];
 } __m512;
@@ -101,13 +116,22 @@
 
 #endif
 
+typedef int64_t _LPP_Int64 _LPP_MAY_ALIAS;
+typedef unsigned int _LPP_UInt _LPP_MAY_ALIAS;
+typedef signed int _LPP_Int _LPP_MAY_ALIAS;
+typedef unsigned short _LPP_UShort _LPP_MAY_ALIAS;
+typedef signed short _LPP_Short _LPP_MAY_ALIAS;
+typedef unsigned char _LPP_UChar _LPP_MAY_ALIAS;
+typedef signed char _LPP_Char _LPP_MAY_ALIAS;
+typedef double _LPP_Double _LPP_MAY_ALIAS;
+typedef float _LPP_Float _LPP_MAY_ALIAS;
+
 #define _M512I __m512i
 #define _M512D __m512d
 #define _M512  __m512
 
 typedef unsigned short __mmask;
 
-
 /* Constant for special read-only mask register 'k0' */
 #define _MM_K0_REG (0xffff)
 
@@ -220,7 +244,7 @@
     _MM_DOWNC_UINT8I     = 0x0C,   /* uint32  => uint8   */
     _MM_DOWNC_SINT8I     = 0x0D,   /* sint32  => sint8   */
     _MM_DOWNC_UINT16I    = 0x0E,   /* uint32  => uint16  */
-    _MM_DOWNC_SINT16I    = 0x0F,   /* sint32  => sint16  */
+    _MM_DOWNC_SINT16I    = 0x0F    /* sint32  => sint16  */
 } _MM_DOWNCONV32_ENUM;
 
 /* Constants for 64-bit DownConv conversion vstore primitives */
@@ -629,7 +653,7 @@
 {
     static const unsigned int exponentMask = 0x7f800000;
     static const unsigned int mantissaMask = 0x007fffff;
-    unsigned int u = *(unsigned int *) &src;
+    _LPP_UInt u = *(_LPP_UInt *) &src;
 
     return (((u & exponentMask) == exponentMask) && (u & mantissaMask));
 }
@@ -638,7 +662,7 @@
 {
     static const unsigned int exponentMask = 0x7f800000;
     static const unsigned int mantissaMask = 0x007fffff;
-    unsigned int u = *(unsigned int *) &src;
+    _LPP_UInt u = *(_LPP_UInt *) &src;
 
     return (((u & exponentMask) == exponentMask) && ((u & mantissaMask) == 0));
 }
@@ -659,7 +683,7 @@
     static const unsigned int m_wMinNormal = (m_eMin+127) << 23;
     static const unsigned int m_BiasDiffo = (unsigned int) ((m_cExpBias-127) << 23);
     static const unsigned int m_cFracBitsDiff = 23 - m_cFracBits;
-    unsigned int u = *(unsigned int *) pfvalue;
+    _LPP_UInt u = *(_LPP_UInt *) pfvalue;
     unsigned short v;
     unsigned int Sign = (u & 0x80000000) >> 16;
     unsigned int MagU = u & 0x7FFFFFFF;     // Absolute value
@@ -720,7 +744,7 @@
     static const unsigned int m_wMinNormal = (m_eMin+127) << 23;
     static const unsigned int m_BiasDiffo = (unsigned int) ((m_cExpBias-127) << 23);
     static const unsigned int m_cFracBitsDiff = 23 - m_cFracBits;
-    unsigned int u = *(unsigned int *) pfvalue;
+    _LPP_UInt u = *(_LPP_UInt *) pfvalue;
     unsigned short v;
     unsigned int Sign = (u & 0x80000000);
     unsigned int MagU = u & 0x7FFFFFFF;     // Absolute value
@@ -789,7 +813,7 @@
     static const unsigned int m_wMinNormal = (m_eMin+127) << 23;
     static const unsigned int m_BiasDiffo = (unsigned int) ((m_cExpBias-127) << 23);
     static const unsigned int m_cFracBitsDiff = 23 - m_cFracBits;
-    unsigned int u = *(unsigned int *) pfvalue;
+    _LPP_UInt u = *(_LPP_UInt *) pfvalue;
     unsigned short v;
     unsigned int Sign = (u & 0x80000000);
     unsigned int MagU = u & 0x7FFFFFFF;     // Absolute value
@@ -1064,7 +1088,7 @@
                 m_cExpBias + 127) << 23) |                        // Exponent
               ((fp16 & m_cFracMask) << m_cFracBitsDiff);               // Fraction
     }
-    return *(float *) &tmp;
+    return *(_LPP_Float *) &tmp;
 }
 
 inline float _LPP_ConvertFloat11ToFloat32(unsigned int src)
@@ -1111,7 +1135,7 @@
                 m_cExpBias + 127) << 23) |                        // Exponent
               ((src & m_FracMask) << m_cFracBitsDiff);               // Fraction
     }
-    return *(float *) &tmp;
+    return *(_LPP_Float *) &tmp;
 }
 
 inline float _LPP_ConvertFloat10ToFloat32(unsigned int src)
@@ -1158,7 +1182,7 @@
                 m_cExpBias + 127) << 23) |                        // Exponent
               ((src & m_FracMask) << m_cFracBitsDiff);               // Fraction
     }
-    return *(float *) &tmp;
+    return *(_LPP_Float *) &tmp;
 }
 
 inline float _LPP_ConvertUnorm10ToFloat32(unsigned int src)
@@ -1365,19 +1389,19 @@
 
     switch(down_conv) {
         case _MM_DOWNC_UINT8:
-            *(unsigned char *) &result = _LPP_ConvertFloat32ToUInt8(*(float *) &src);
+            *(_LPP_UChar *) &result = _LPP_ConvertFloat32ToUInt8(*(_LPP_Float *) &src);
         break;
         case _MM_DOWNC_SINT8:
-            result = _LPP_ConvertFloat32ToSInt8(*(float *) &src);
+            result = _LPP_ConvertFloat32ToSInt8(*(_LPP_Float *) &src);
         break;
         case _MM_DOWNC_UNORM8:
-            *(unsigned char *) &result = _LPP_ConvertFloat32ToUnorm8(*(float *) &src);
+            *(_LPP_UChar *) &result = _LPP_ConvertFloat32ToUnorm8(*(_LPP_Float *) &src);
         break;
         case _MM_DOWNC_SNORM8:
-            result = _LPP_ConvertFloat32ToSnorm8(*(float *) &src);
+            result = _LPP_ConvertFloat32ToSnorm8(*(_LPP_Float *) &src);
         break;
         case _MM_DOWNC_UINT8I:
-            *(unsigned char *) &result = _LPP_ConvertUInt32ToUInt8(*(unsigned int *) &src);
+            *(_LPP_UChar *) &result = _LPP_ConvertUInt32ToUInt8(*(_LPP_UInt *) &src);
         break;
         case _MM_DOWNC_SINT8I:
             result = _LPP_ConvertInt32ToSInt8(src);
@@ -1396,25 +1420,25 @@
 
     switch(down_conv) {
         case _MM_DOWNC_FLOAT16:
-            *(unsigned short *) &result = _LPP_ConvertFloat32ToFloat16((float *) &src);
+            *(_LPP_UShort *) &result = _LPP_ConvertFloat32ToFloat16((_LPP_Float *) &src);
         break;
         case _MM_DOWNC_FLOAT16RZ:
-            *(unsigned short *) &result = _LPP_ConvertFloat32ToFloat16RZ((float *) &src);
+            *(_LPP_UShort *) &result = _LPP_ConvertFloat32ToFloat16RZ((_LPP_Float *) &src);
         break;
         case _MM_DOWNC_UINT16:
-            *(unsigned short *) &result = _LPP_ConvertFloat32ToUInt16(*(float *) &src);
+            *(_LPP_UShort *) &result = _LPP_ConvertFloat32ToUInt16(*(_LPP_Float *) &src);
         break;
         case _MM_DOWNC_SINT16:
-            result = _LPP_ConvertFloat32ToSInt16(*(float *) &src);
+            result = _LPP_ConvertFloat32ToSInt16(*(_LPP_Float *) &src);
         break;
         case _MM_DOWNC_UNORM16:
-            *(unsigned short *) &result = _LPP_ConvertFloat32ToUnorm16(*(float *) &src);
+            *(_LPP_UShort *) &result = _LPP_ConvertFloat32ToUnorm16(*(_LPP_Float *) &src);
         break;
         case _MM_DOWNC_SNORM16:
-            result = _LPP_ConvertFloat32ToSnorm16(*(float *) &src);
+            result = _LPP_ConvertFloat32ToSnorm16(*(_LPP_Float *) &src);
         break;
         case _MM_DOWNC_UINT16I:
-            *(unsigned short *) &result = _LPP_ConvertUInt32ToUInt16(*(unsigned int *) &src);
+            *(_LPP_UShort *) &result = _LPP_ConvertUInt32ToUInt16(*(_LPP_UInt *) &src);
         break;
         case _MM_DOWNC_SINT16I:
             result = _LPP_ConvertInt32ToSInt16(src);
@@ -1466,70 +1490,70 @@
 
     switch(full_up) {
         case _MM_FULLUPC_NONE:
-            result = *(unsigned int *) src;
+            result = *(_LPP_UInt *) src;
         break;
         case _MM_FULLUPC_UNORM10A:
-            *(float *) &result = _LPP_ConvertUnorm10ToFloat32((*(unsigned int *) src) & 0x3FF);
+            *(_LPP_Float *) &result = _LPP_ConvertUnorm10ToFloat32((*(_LPP_UInt *) src) & 0x3FF);
         break;
         case _MM_FULLUPC_UNORM10B:
-            *(float *) &result = _LPP_ConvertUnorm10ToFloat32(((*(unsigned int *) src) >> 10) & 0x3FF);
+            *(_LPP_Float *) &result = _LPP_ConvertUnorm10ToFloat32(((*(_LPP_UInt *) src) >> 10) & 0x3FF);
         break;
         case _MM_FULLUPC_UNORM10C:
-            *(float *) &result = _LPP_ConvertUnorm10ToFloat32(((*(unsigned int *) src) >> 20) & 0x3FF);
+            *(_LPP_Float *) &result = _LPP_ConvertUnorm10ToFloat32(((*(_LPP_UInt *) src) >> 20) & 0x3FF);
         break;
         case _MM_FULLUPC_UNORM2D:
-            *(float *) &result = _LPP_ConvertUnorm2ToFloat32(((*(unsigned int *) src) >> 30) & 0x3);
+            *(_LPP_Float *) &result = _LPP_ConvertUnorm2ToFloat32(((*(_LPP_UInt *) src) >> 30) & 0x3);
         break;
         case _MM_FULLUPC_FLOAT11A:
-            *(float *) &result = _LPP_ConvertFloat11ToFloat32((*(unsigned int *) src) & 0x7FF);
+            *(_LPP_Float *) &result = _LPP_ConvertFloat11ToFloat32((*(_LPP_UInt *) src) & 0x7FF);
         break;
         case _MM_FULLUPC_FLOAT11B:
-            *(float *) &result = _LPP_ConvertFloat11ToFloat32(((*(unsigned int *) src) >> 11) & 0x7FF);
+            *(_LPP_Float *) &result = _LPP_ConvertFloat11ToFloat32(((*(_LPP_UInt *) src) >> 11) & 0x7FF);
         break;
         case _MM_FULLUPC_FLOAT10C:
-            *(float *) &result = _LPP_ConvertFloat10ToFloat32(((*(unsigned int *) src) >> 22) & 0x3FF);
+            *(_LPP_Float *) &result = _LPP_ConvertFloat10ToFloat32(((*(_LPP_UInt *) src) >> 22) & 0x3FF);
         break;
         case _MM_FULLUPC_FLOAT16:
-            *(float *) &result = _LPP_ConvertFloat16ToFloat32(*(short *) src);
+            *(_LPP_Float *) &result = _LPP_ConvertFloat16ToFloat32(*(_LPP_Short *) src);
         break;
         case _MM_FULLUPC_UINT16:
-            *(float *) &result = _LPP_ConvertUInt16ToFloat32(*(unsigned short *) src);
+            *(_LPP_Float *) &result = _LPP_ConvertUInt16ToFloat32(*(_LPP_UShort *) src);
         break;
         case _MM_FULLUPC_SINT16:
-            *(float *) &result = _LPP_ConvertSInt16ToFloat32(*(short *) src);
+            *(_LPP_Float *) &result = _LPP_ConvertSInt16ToFloat32(*(_LPP_Short *) src);
         break;
         case _MM_FULLUPC_UNORM16:
-            *(float *) &result = _LPP_ConvertUnorm16ToFloat32(*(unsigned short *) src);
+            *(_LPP_Float *) &result = _LPP_ConvertUnorm16ToFloat32(*(_LPP_UShort *) src);
         break;
         case _MM_FULLUPC_SNORM16:
-            *(float *) &result = _LPP_ConvertSnorm16ToFloat32(*(short *) src);
+            *(_LPP_Float *) &result = _LPP_ConvertSnorm16ToFloat32(*(_LPP_Short *) src);
         break;
         case _MM_FULLUPC_UINT16I:
-            *(unsigned int *) &result = _LPP_ConvertUInt16ToUInt32(*(unsigned short *) src);
+            *(_LPP_UInt *) &result = _LPP_ConvertUInt16ToUInt32(*(_LPP_UShort *) src);
         break;
         case _MM_FULLUPC_SINT16I:
-            result = _LPP_ConvertSInt16ToInt32(*(short *) src);
+            result = _LPP_ConvertSInt16ToInt32(*(_LPP_Short *) src);
         break;
         case _MM_FULLUPC_SRGB8:
-            *(float *) &result = _LPP_ConvertSRgb8ToFloat32(*(unsigned char *) src);
+            *(_LPP_Float *) &result = _LPP_ConvertSRgb8ToFloat32(*(_LPP_UChar *) src);
         break;
         case _MM_FULLUPC_UINT8:
-            *(float *) &result = _LPP_ConvertUInt8ToFloat32(*(unsigned char *) src);
+            *(_LPP_Float *) &result = _LPP_ConvertUInt8ToFloat32(*(_LPP_UChar *) src);
         break;
         case _MM_FULLUPC_SINT8:
-            *(float *) &result = _LPP_ConvertSInt8ToFloat32(*(char *) src);
+            *(_LPP_Float *) &result = _LPP_ConvertSInt8ToFloat32(*(_LPP_Char *) src);
         break;
         case _MM_FULLUPC_UNORM8:
-            *(float *) &result = _LPP_ConvertUnorm8ToFloat32(*(unsigned char *) src);
+            *(_LPP_Float *) &result = _LPP_ConvertUnorm8ToFloat32(*(_LPP_UChar *) src);
         break;
         case _MM_FULLUPC_SNORM8:
-            *(float *) &result = _LPP_ConvertSnorm8ToFloat32(*(char *) src);
+            *(_LPP_Float *) &result = _LPP_ConvertSnorm8ToFloat32(*(_LPP_Char *) src);
         break;
         case _MM_FULLUPC_UINT8I:
-            *(unsigned int *) &result = _LPP_ConvertUInt8ToUInt32(*(unsigned char *) src);
+            *(_LPP_UInt *) &result = _LPP_ConvertUInt8ToUInt32(*(_LPP_UChar *) src);
         break;
         case _MM_FULLUPC_SINT8I:
-            result = _LPP_ConvertSInt8ToInt32(*(char *) src);
+            result = _LPP_ConvertSInt8ToInt32(*(_LPP_Char *) src);
         break;
         default:
             // illegal downConv arg
@@ -1590,8 +1614,8 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p = (int *) &v;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p = (_LPP_Int *) &v;
 
     switch(s) {
         case _MM_SWIZ_REG_DCBA:
@@ -1724,8 +1748,8 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int64_t *r = (int64_t *) &result;
-    int64_t *p = (int64_t *) &v;
+    _LPP_Int64 *r = (_LPP_Int64 *) &result;
+    _LPP_Int64 *p = (_LPP_Int64 *) &v;
 
     switch(s) {
         case _MM_SWIZ_REG_DCBA:
@@ -1844,24 +1868,24 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
+    _LPP_Int *r = (_LPP_Int *) &result;
     int *p;
 
     switch(s) {
         case _MM_BROADCAST_16X16:
-            p = (int *) v;
+            p = (_LPP_Int *) v;
             for (int i=0; i < 16; i++) {
                 r[i] = p[i];
             }
         break;
         case _MM_BROADCAST_1X16:
-            p = (int *) v;
+            p = (_LPP_Int *) v;
             for (int i=0; i < 16; i++) {
                 r[i] = p[0];
             }
         break;
         case _MM_BROADCAST_4X16:
-            p = (int *) v;
+            p = (_LPP_Int *) v;
             for (int i=0; i < 4; i++) {
                 r[i*4 + 0] = p[0];
                 r[i*4 + 1] = p[1];
@@ -1871,22 +1895,22 @@
         break;
         case _MM_UI8_TO_I32:
             for (int i=0; i < 16; i++) {
-                *(unsigned int *) &r[i] = _LPP_ConvertUInt8ToUInt32(((unsigned char *) v)[i]);
+                *(_LPP_UInt *) &r[i] = _LPP_ConvertUInt8ToUInt32(((_LPP_UChar *) v)[i]);
             }
         break;
         case _MM_SI8_TO_I32:
             for (int i=0; i < 16; i++) {
-                r[i] = _LPP_ConvertSInt8ToInt32(((char *) v)[i]);
+                r[i] = _LPP_ConvertSInt8ToInt32(((_LPP_Char *) v)[i]);
             }
         break;
         case _MM_UI16_TO_I32:
             for (int i=0; i < 16; i++) {
-                *(unsigned int *) &r[i] = _LPP_ConvertUInt16ToUInt32(((unsigned short *) v)[i]);
+                *(_LPP_UInt *) &r[i] = _LPP_ConvertUInt16ToUInt32(((_LPP_UShort *) v)[i]);
             }
         break;
         case _MM_SI16_TO_I32:
             for (int i=0; i < 16; i++) {
-                r[i] = _LPP_ConvertSInt16ToInt32(((short *) v)[i]);
+                r[i] = _LPP_ConvertSInt16ToInt32(((_LPP_Short *) v)[i]);
             }
         break;
         default:
@@ -1896,51 +1920,51 @@
     }
 #else
     __m128i *r = (__m128i *) &result;
-    int *pi;
-    unsigned char *puc;
-    char *pc;
-    unsigned short *pus;
-    short *ps;
+    _LPP_Int *pi;
+    _LPP_UChar *puc;
+    _LPP_Char *pc;
+    _LPP_UShort *pus;
+    _LPP_Short *ps;
 
     switch(s) {
         case _MM_BROADCAST_16X16:
-            pi = (int *) v;
+            pi = (_LPP_Int *) v;
             for (int i=0; i < 4; i++) {
                 r[i] = _mm_set_epi32(pi[i*4 + 3], pi[i*4 + 2], pi[i*4 + 1], pi[i*4 + 0]);
             }
         break;
         case _MM_BROADCAST_1X16:
-            pi = (int *) v;
+            pi = (_LPP_Int *) v;
             for (int i=0; i < 4; i++) {
                 r[i] = _mm_set1_epi32(pi[0]);
             }
         break;
         case _MM_BROADCAST_4X16:
-            pi = (int *) v;
+            pi = (_LPP_Int *) v;
             for (int i=0; i < 4; i++) {
                 r[i] = _mm_set_epi32(pi[3], pi[2], pi[1], pi[0]);
             }
         break;
         case _MM_UI8_TO_I32:
-            puc = (unsigned char *) v;
+            puc = (_LPP_UChar *) v;
             for (int i=0; i < 4; i++) {
                 r[i] = _mm_set_epi32((int) puc[i*4 + 3], (int) puc[i*4 + 2], (int) puc[i*4 + 1], (int) puc[i*4 + 0]);
             }
         break;
         case _MM_SI8_TO_I32:
-            pc = (char *) v;
+            pc = (_LPP_Char *) v;
             for (int i=0; i < 4; i++) {
                 r[i] = _mm_set_epi32((int) pc[i*4 + 3], (int) pc[i*4 + 2], (int) pc[i*4 + 1], (int) pc[i*4 + 0]);
             }
         break;
         case _MM_UI16_TO_I32:
-            pus = (unsigned short *) v;
+            pus = (_LPP_UShort *) v;
             for (int i=0; i < 4; i++) {
                 r[i] = _mm_set_epi32((int) pus[i*4 + 3], (int) pus[i*4 + 2], (int) pus[i*4 + 1], (int) pus[i*4 + 0]);
             }
         break;
         case _MM_SI16_TO_I32:
-            ps = (short *) v;
+            ps = (_LPP_Short *) v;
             for (int i=0; i < 4; i++) {
                 r[i] = _mm_set_epi32((int) ps[i*4 + 3], (int) ps[i*4 + 2], (int) ps[i*4 + 1], (int) ps[i*4 + 0]);
             }
@@ -1961,24 +1985,24 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p;
 
     switch(s) {
         case _MM_BROADCAST_16X16:
-            p = (float *) v;
+            p = (_LPP_Float *) v;
             for (int i=0; i < 16; i++) {
                 r[i] = p[i];
             }
         break;
         case _MM_BROADCAST_1X16:
-            p = (float *) v;
+            p = (_LPP_Float *) v;
             for (int i=0; i < 16; i++) {
                 r[i] = p[0];
             }
         break;
         case _MM_BROADCAST_4X16:
-            p = (float *) v;
+            p = (_LPP_Float *) v;
             for (int i=0; i < 4; i++) {
                 r[i*4 + 0] = p[0];
                 r[i*4 + 1] = p[1];
@@ -1988,22 +2012,22 @@
         break;
         case _MM_UI8_TO_F32:
             for (int i=0; i < 16; i++) {
-                r[i] = _LPP_ConvertUInt8ToFloat32(((unsigned char *) v)[i]);
+                r[i] = _LPP_ConvertUInt8ToFloat32(((_LPP_UChar *) v)[i]);
             }
         break;
         case _MM_UN8_TO_F32:
             for (int i=0; i < 16; i++) {
-                r[i] = _LPP_ConvertUnorm8ToFloat32(((unsigned char *) v)[i]);
+                r[i] = _LPP_ConvertUnorm8ToFloat32(((_LPP_UChar *) v)[i]);
             }
         break;
         case _MM_F16_TO_F32:
             for (int i=0; i < 16; i++) {
-                r[i] = _LPP_ConvertFloat16ToFloat32(((short *) v)[i]);
+                r[i] = _LPP_ConvertFloat16ToFloat32(((_LPP_Short *) v)[i]);
             }
         break;
         case _MM_SI16_TO_F32:
             for (int i=0; i < 16; i++) {
-                r[i] = _LPP_ConvertSInt16ToFloat32(((short *) v)[i]);
+                r[i] = _LPP_ConvertSInt16ToFloat32(((_LPP_Short *) v)[i]);
             }
         break;
         default:
@@ -2013,49 +2037,49 @@
     }
 #else
     __m128 *r = (__m128 *) &result;
-    float *pf;
-    unsigned char *puc;
-    short *ps;
+    _LPP_Float *pf;
+    _LPP_UChar *puc;
+    _LPP_Short *ps;
 
     switch(s) {
         case _MM_BROADCAST_16X16:
-            pf = (float *) v;
+            pf = (_LPP_Float *) v;
             for (int i=0; i < 4; i++) {
                 r[i] = _mm_set_ps(pf[i*4 + 3], pf[i*4 + 2], pf[i*4 + 1], pf[i*4 + 0]);
             }
         break;
         case _MM_BROADCAST_1X16:
-            pf = (float *) v;
+            pf = (_LPP_Float *) v;
             for (int i=0; i < 4; i++) {
                 r[i] = _mm_set1_ps(pf[0]);
             }
         break;
         case _MM_BROADCAST_4X16:
-            pf = (float *) v;
+            pf = (_LPP_Float *) v;
             for (int i=0; i < 4; i++) {
                 r[i] = _mm_set_ps(pf[3], pf[2], pf[1], pf[0]);
             }
         break;
         case _MM_UI8_TO_F32:
-            puc = (unsigned char *) v;
+            puc = (_LPP_UChar *) v;
             for (int i=0; i < 4; i++) {
                 r[i] = _mm_set_ps(_LPP_ConvertUInt8ToFloat32(puc[i*4 + 3]), _LPP_ConvertUInt8ToFloat32(puc[i*4 + 2]), _LPP_ConvertUInt8ToFloat32(puc[i*4 + 1]), _LPP_ConvertUInt8ToFloat32(puc[i*4 + 0]));
             }
         break;
         case _MM_UN8_TO_F32:
-            puc = (unsigned char *) v;
+            puc = (_LPP_UChar *) v;
             for (int i=0; i < 4; i++) {
                 r[i] = _mm_set_ps(_LPP_ConvertUnorm8ToFloat32(puc[i*4 + 3]), _LPP_ConvertUnorm8ToFloat32(puc[i*4 + 2]), _LPP_ConvertUnorm8ToFloat32(puc[i*4 + 1]), _LPP_ConvertUnorm8ToFloat32(puc[i*4 + 0]));
             }
         break;
         case _MM_F16_TO_F32:
-            ps = (short *) v;
+            ps = (_LPP_Short *) v;
             for (int i=0; i < 4; i++) {
                 r[i] = _mm_set_ps(_LPP_ConvertFloat16ToFloat32(ps[i*4 + 3]), _LPP_ConvertFloat16ToFloat32(ps[i*4 + 2]), _LPP_ConvertFloat16ToFloat32(ps[i*4 + 1]), _LPP_ConvertFloat16ToFloat32(ps[i*4 + 0]));
             }
         break;
         case _MM_SI16_TO_F32:
-            ps = (short *) v;
+            ps = (_LPP_Short *) v;
             for (int i=0; i < 4; i++) {
                 r[i] = _mm_set_ps(_LPP_ConvertSInt16ToFloat32(ps[i*4 + 3]), _LPP_ConvertSInt16ToFloat32(ps[i*4 + 2]), _LPP_ConvertSInt16ToFloat32(ps[i*4 + 1]), _LPP_ConvertSInt16ToFloat32(ps[i*4 + 0]));
             }
@@ -2075,8 +2099,8 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int64_t *r = (int64_t *) &result;
-    int64_t *p = (int64_t *) v;
+    _LPP_Int64 *r = (_LPP_Int64 *) &result;
+    _LPP_Int64 *p = (_LPP_Int64 *) v;
 
     switch(s) {
         case _MM_BROADCAST_8X8:
@@ -2104,7 +2128,7 @@
     }
 #else
     __m128i *r = (__m128i *) &result;
-    int64_t *p = (int64_t *) v;
+    _LPP_Int64 *p = (_LPP_Int64 *) v;
 
     switch(s) {
         case _MM_BROADCAST_8X8:
@@ -2139,8 +2163,8 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p = (double *) v;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p = (_LPP_Double *) v;
 
     switch(s) {
         case _MM_BROADCAST_8X8:
@@ -2168,7 +2192,7 @@
     }
 #else
     __m128d *r = (__m128d *) &result;
-    double *p = (double *) v;
+    _LPP_Double *p = (_LPP_Double *) v;
 
     switch(s) {
         case _MM_BROADCAST_8X8:
@@ -2203,9 +2227,9 @@
     _M512I result;
     __mmask returnMask = 0;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p3 = (unsigned int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p3 = (_LPP_UInt *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p1[i] + p3[i] + (k2 & 1);
@@ -2223,9 +2247,9 @@
     _M512I result;
     __mmask returnMask = 0;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p3 = (unsigned int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p3 = (_LPP_UInt *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -2249,9 +2273,9 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         r[i] = -(p2[i] + p3[i]);
@@ -2275,10 +2299,10 @@
      _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1_old;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1_old;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -2313,9 +2337,9 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i = 0; i < 16; i++ ) {
         r[i] = -(p2[i] + p3[i]);
@@ -2339,10 +2363,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1_old;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1_old;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -2377,9 +2401,9 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         r[i] = p2[i] + p3[i];
@@ -2402,10 +2426,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1_old;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1_old;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -2439,9 +2463,9 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p2[i] + p3[i];
@@ -2464,10 +2488,10 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -2501,9 +2525,9 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p2[i] + p3[i];
@@ -2526,10 +2550,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1_old;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1_old;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -2563,9 +2587,9 @@
     _M512I result;
     __mmask returnMask = 0;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p3 = (unsigned int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p3 = (_LPP_UInt *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p1[i] + p3[i];
@@ -2582,9 +2606,9 @@
     _M512I result;
     __mmask returnMask = 0;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p3 = (unsigned int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p3 = (_LPP_UInt *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -2609,9 +2633,9 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p2[i] + p3[i];
@@ -2638,10 +2662,10 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -2681,9 +2705,9 @@
     __mmask returnMask = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p2[i] + p3[i];
@@ -2710,10 +2734,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1_old;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1_old;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -2752,9 +2776,9 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = (~p2[i]) & p3[i];
@@ -2777,10 +2801,10 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -2820,10 +2844,10 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int64_t *r = (int64_t *) &result;
-    int64_t *p1 = (int64_t *) &v1_old;
-    int64_t *p2 = (int64_t *) &v2;
-    int64_t *p3 = (int64_t *) &v3;
+    _LPP_Int64 *r = (_LPP_Int64 *) &result;
+    _LPP_Int64 *p1 = (_LPP_Int64 *) &v1_old;
+    _LPP_Int64 *p2 = (_LPP_Int64 *) &v2;
+    _LPP_Int64 *p3 = (_LPP_Int64 *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -2857,9 +2881,9 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p2[i] & p3[i];
@@ -2882,10 +2906,10 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -2925,10 +2949,10 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int64_t *r = (int64_t *) &result;
-    int64_t *p1 = (int64_t *) &v1_old;
-    int64_t *p2 = (int64_t *) &v2;
-    int64_t *p3 = (int64_t *) &v3;
+    _LPP_Int64 *r = (_LPP_Int64 *) &result;
+    _LPP_Int64 *p1 = (_LPP_Int64 *) &v1_old;
+    _LPP_Int64 *p2 = (_LPP_Int64 *) &v2;
+    _LPP_Int64 *p3 = (_LPP_Int64 *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -2961,9 +2985,9 @@
 {
     _M512I result;
 
-    int *r = (int *) &result;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         unsigned int bit = 1;
@@ -2982,10 +3006,10 @@
 {
     _M512I result;
 
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
        if (k1 & 1) {
@@ -3009,9 +3033,9 @@
 {
     _M512I result;
 
-    int *r = (int *) &result;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         unsigned int bit = 1;
@@ -3034,10 +3058,10 @@
 {
     _M512I result;
 
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
        if (k1 & 1) {
@@ -3066,9 +3090,9 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (p3[i] < p2[i]) r[i] = p3[i];
@@ -3099,10 +3123,10 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -3144,9 +3168,9 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (p3[i] >= 0) {
@@ -3181,10 +3205,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1_old;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1_old;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -3230,8 +3254,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
     unsigned int byteMask = _LPP_byteMaskTable[field];
 
     for (int i=0; i < 16; i++) {
@@ -3261,8 +3285,8 @@
 {
     __mmask result = 0;
 
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
     unsigned int byteMask = _LPP_byteMaskTable[field];
 
     for (int i=0; i < 16; i++) {
@@ -3282,8 +3306,8 @@
 {
     __mmask result = 0;
 
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
     unsigned int byteMask = _LPP_byteMaskTable[field];
 
     for (int i=0; i < 16; i++) {
@@ -3304,8 +3328,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
     unsigned int byteMask = _LPP_byteMaskTable[field];
 
     for (int i=0; i < 16; i++) {
@@ -3336,8 +3360,8 @@
 {
     __mmask result = 0;
 
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
     unsigned int byteMask = _LPP_byteMaskTable[field];
 
     for (int i=0; i < 16; i++) {
@@ -3357,8 +3381,8 @@
 {
     __mmask result = 0;
 
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
     unsigned int byteMask = _LPP_byteMaskTable[field];
 
     for (int i=0; i < 16; i++) {
@@ -3379,8 +3403,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (p1[i] == p2[i]) result |= (1 << i);
@@ -3408,8 +3432,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (p1[i] < p2[i]) result |= (1 << i);
@@ -3437,8 +3461,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (p1[i] <= p2[i]) result |= (1 << i);
@@ -3466,8 +3490,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (!(p1[i] <= p2[i] || p1[i] > p2[i])) result |= (1 << i);
@@ -3495,8 +3519,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (p1[i] != p2[i]) result |= (1 << i);
@@ -3524,8 +3548,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (!(p1[i] < p2[i])) result |= (1 << i);
@@ -3553,8 +3577,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (!(p1[i] <= p2[i])) result |= (1 << i);
@@ -3582,8 +3606,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (p1[i] <= p2[i] || p1[i] > p2[i]) result |= (1 << i);
@@ -3611,8 +3635,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *p1 = (int *) &v1;
-    int *p2 = (int *) &v2;
+    _LPP_Int *p1 = (_LPP_Int *) &v1;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (p1[i] == p2[i]) result |= (1 << i);
@@ -3641,8 +3665,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *p1 = (int *) &v1;
-    int *p2 = (int *) &v2;
+    _LPP_Int *p1 = (_LPP_Int *) &v1;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (p1[i] < p2[i]) result |= (1 << i);
@@ -3671,8 +3695,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *p1 = (int *) &v1;
-    int *p2 = (int *) &v2;
+    _LPP_Int *p1 = (_LPP_Int *) &v1;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (p1[i] <= p2[i]) result |= (1 << i);
@@ -3702,8 +3726,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *p1 = (int *) &v1;
-    int *p2 = (int *) &v2;
+    _LPP_Int *p1 = (_LPP_Int *) &v1;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (p1[i] != p2[i]) result |= (1 << i);
@@ -3733,8 +3757,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *p1 = (int *) &v1;
-    int *p2 = (int *) &v2;
+    _LPP_Int *p1 = (_LPP_Int *) &v1;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (!(p1[i] < p2[i])) result |= (1 << i);
@@ -3764,8 +3788,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *p1 = (int *) &v1;
-    int *p2 = (int *) &v2;
+    _LPP_Int *p1 = (_LPP_Int *) &v1;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (p1[i] > p2[i]) result |= (1 << i);
@@ -3794,8 +3818,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (p1[i] == p2[i]) result |= (1 << i);
@@ -3823,8 +3847,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (p1[i] < p2[i]) result |= (1 << i);
@@ -3852,8 +3876,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (p1[i] <= p2[i]) result |= (1 << i);
@@ -3881,8 +3905,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (!(p1[i] <= p2[i] || p1[i] > p2[i])) result |= (1 << i);
@@ -3910,8 +3934,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (p1[i] != p2[i]) result |= (1 << i);
@@ -3939,8 +3963,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (!(p1[i] < p2[i])) result |= (1 << i);
@@ -3968,8 +3992,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (!(p1[i] <= p2[i])) result |= (1 << i);
@@ -3997,8 +4021,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (p1[i] <= p2[i] || p1[i] > p2[i]) result |= (1 << i);
@@ -4026,8 +4050,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (p1[i] == p2[i]) result |= (1 << i);
@@ -4055,8 +4079,8 @@
 {
     __mmask result = 0;
 
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (p1[i] < p2[i]) result |= (1 << i);
@@ -4075,8 +4099,8 @@
 {
     __mmask result = 0;
 
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (p1[i] <= p2[i]) result |= (1 << i);
@@ -4096,8 +4120,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (p1[i] != p2[i]) result |= (1 << i);
@@ -4126,8 +4150,8 @@
 {
     __mmask result = 0;
 
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (!(p1[i] < p2[i])) result |= (1 << i);
@@ -4146,8 +4170,8 @@
 {
     __mmask result = 0;
 
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (p1[i] > p2[i]) result |= (1 << i);
@@ -4168,9 +4192,9 @@
 
     _M512 result;
 
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1;
-    float *p2 = (float *) &v2;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (field == _MM_FLOAT11A) {
@@ -4193,9 +4217,9 @@
 
     _M512 result;
 
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1;
-    float *p2 = (float *) &v2;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -4221,9 +4245,9 @@
 {
     _M512 result;
 
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1;
-    float *p2 = (float *) &v2;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (field == _MM_UNORM10A) {
@@ -4244,9 +4268,9 @@
 {
     _M512 result;
 
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1;
-    float *p2 = (float *) &v2;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -4273,9 +4297,9 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    double *p2 = (double *) &v2;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         r[i] = _LPP_ConvertFloat64ToInt32(p2[i], rc);
@@ -4304,9 +4328,9 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    double *p2 = (double *) &v2;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -4345,9 +4369,9 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    double *p2 = (double *) &v2;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         r[8 + i] = _LPP_ConvertFloat64ToInt32(p2[i], rc);
@@ -4376,9 +4400,9 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    double *p2 = (double *) &v2;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -4417,9 +4441,9 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1_old;
-    double *p2 = (double *) &v2;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1_old;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         r[i] = _LPP_ConvertFloat64ToFloat32(p2[i], rc);
@@ -4448,9 +4472,9 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1_old;
-    double *p2 = (double *) &v2;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1_old;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -4489,9 +4513,9 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1_old;
-    double *p2 = (double *) &v2;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1_old;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         r[8 + i] = _LPP_ConvertFloat64ToFloat32(p2[i], rc);
@@ -4520,9 +4544,9 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1_old;
-    double *p2 = (double *) &v2;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1_old;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -4560,9 +4584,9 @@
 {
     _M512I result;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1_old;
-    double *p2 = (double *) &v2;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1_old;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         r[i] = _LPP_ConvertFloat64ToUInt32(p2[i], rc);
@@ -4576,9 +4600,9 @@
 {
     _M512I result;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1_old;
-    double *p2 = (double *) &v2;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1_old;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -4597,9 +4621,9 @@
 {
     _M512I result;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1_old;
-    double *p2 = (double *) &v2;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1_old;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         r[8 + i] = _LPP_ConvertFloat64ToUInt32(p2[i], rc);
@@ -4613,9 +4637,9 @@
 {
     _M512I result;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1_old;
-    double *p2 = (double *) &v2;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1_old;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -4635,8 +4659,8 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    int *p2 = (int *) &v2;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 8; i++) {
         r[i] = _LPP_ConvertInt32ToFloat64(p2[i]);
@@ -4660,9 +4684,9 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1_old;
-    int *p2 = (int *) &v2;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -4697,8 +4721,8 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    int *p2 = (int *) &v2;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 8; i++) {
         r[i] = _LPP_ConvertInt32ToFloat64(p2[8 + i]);
@@ -4722,9 +4746,9 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1_old;
-    int *p2 = (int *) &v2;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -4759,8 +4783,8 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    int *p2 = (int *) &v2;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 16; i++) {
         r[i] = _LPP_ConvertInt32ToFloat32(p2[i], expadj);
@@ -4788,9 +4812,9 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1_old;
-    int *p2 = (int *) &v2;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -4829,8 +4853,8 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    float *p2 = (float *) &v2;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 8; i++) {
         r[i] = _LPP_ConvertFloat32ToFloat64(p2[i]);
@@ -4853,9 +4877,9 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1_old;
-    float *p2 = (float *) &v2;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1_old;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -4889,8 +4913,8 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    float *p2 = (float *) &v2;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 8; i++) {
         r[i] = _LPP_ConvertFloat32ToFloat64(p2[8 + i]);
@@ -4913,9 +4937,9 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1_old;
-    float *p2 = (float *) &v2;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1_old;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -4949,8 +4973,8 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    float *p2 = (float *) &v2;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         r[i] = _LPP_ConvertFloat32ToInt32(p2[i], rc, expadj);
@@ -4981,9 +5005,9 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    float *p2 = (float *) &v2;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -5024,8 +5048,8 @@
 {
     _M512I result;
 
-    int *r = (int *) &result;
-    float *p2 = (float *) &v2;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         r[i] = _LPP_ConvertFloat32ToUInt32(p2[i], rc, expadj);
@@ -5038,9 +5062,9 @@
 {
     _M512I result;
 
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    float *p2 = (float *) &v2;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -5058,8 +5082,8 @@
 {
     _M512 result;
 
-    int *r = (int *) &result;
-    float *p2 = (float *) &v2;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         r[i] = (int) _LPP_ConvertFloat32ToSRgb8(p2[i]);
@@ -5072,9 +5096,9 @@
 {
     _M512 result;
 
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    float *p2 = (float *) &v2;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -5092,8 +5116,8 @@
 {
     _M512D result;
 
-    double *r = (double *) &result;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
 
     for (int i=0; i < 8; i++) {
         r[i] = _LPP_ConvertUInt32ToFloat64(p2[i]);
@@ -5106,9 +5130,9 @@
 {
     _M512D result;
 
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1_old;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1_old;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -5126,8 +5150,8 @@
 {
     _M512D result;
 
-    double *r = (double *) &result;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
 
     for (int i=0; i < 8; i++) {
         r[i] = _LPP_ConvertUInt32ToFloat64(p2[8 + i]);
@@ -5140,9 +5164,9 @@
 {
     _M512D result;
 
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1_old;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1_old;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -5160,8 +5184,8 @@
 {
     _M512 result;
 
-    float *r = (float *) &result;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
 
     for (int i=0; i < 16; i++) {
         r[i] = _LPP_ConvertUInt32ToFloat32(p2[i], expadj);
@@ -5174,9 +5198,9 @@
 {
     _M512 result;
 
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1_old;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1_old;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -5193,19 +5217,19 @@
 inline _M512 _mm512_mask_fixup_ps(_M512 v1, __mmask k1, _M512 v2, _MM_FIXUPTABLE_ENUM table)
 {
     _M512 result;
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
 
     for (int i=0; i < 16; i++) {
         int type;
 
         if (k1 & 1) {
-            if (_LPP_isINF(*(float *) &p2[i]) && (p2[i] & 0x80000000)) type = 0;
+            if (_LPP_isINF(*(_LPP_Float *) &p2[i]) && (p2[i] & 0x80000000)) type = 0;
             else if (p2[i] == 0x80000000)                              type = 2;
             else if (p2[i] == 0)                                       type = 3;
-            else if (_LPP_isINF(*(float *) &p2[i]))                    type = 5;
-            else if (_LPP_isNaN(*(float *) &p2[i]))                    type = 6;
+            else if (_LPP_isINF(*(_LPP_Float *) &p2[i]))                    type = 5;
+            else if (_LPP_isNaN(*(_LPP_Float *) &p2[i]))                    type = 6;
             else if (p2[i] & 0x80000000)                               type = 1;
             else                                                       type = 4;
 
@@ -5255,10 +5279,10 @@
 {
     _M512 result;
     
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    int *idx = (int *) &index;
-    char *src = (char *) m;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Int *idx = (_LPP_Int *) &index;
+    _LPP_Char *src = (_LPP_Char *) m;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -5277,9 +5301,9 @@
 {
     _M512 result;
     
-    int *r = (int *) &result;
-    int *idx = (int *) &index;
-    char *src = (char *) m;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *idx = (_LPP_Int *) &index;
+    _LPP_Char *src = (_LPP_Char *) m;
 
     for (int i=0; i < 16; i++) {
         r[i] = _LPP_FullUpConv((void *) (src + idx[i]*scale), up_conv);
@@ -5303,8 +5327,8 @@
 {
     _M512 result;
 
-    float *r = (float *) &result;
-    float *p2 = (float *) &v2;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
     int exponent;
 
     for (int i=0; i < 16; i++) {
@@ -5319,9 +5343,9 @@
 {
     _M512 result;
 
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1_old;
-    float *p2 = (float *) &v2;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1_old;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
     int exponent;
 
     for (int i=0; i < 16; i++) {
@@ -5340,9 +5364,9 @@
 inline _M512I _mm512_insertfield_pi(_M512I v2, _M512I v3, _MM_BITPOSITION32_ENUM rotation, _MM_BITPOSITION32_ENUM bit_idx_low, _MM_BITPOSITION32_ENUM bit_idx_high)
 {
     _M512I result;
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p2 = (unsigned int *) &v2;
-    unsigned int *p3 = (unsigned int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
+    _LPP_UInt *p3 = (_LPP_UInt *) &v3;
     unsigned int maskRight = 0xFFFFFFFF >> (31 - bit_idx_high);
     unsigned int maskLeft = 0xFFFFFFFF << bit_idx_low;
     unsigned int mask;
@@ -5364,10 +5388,10 @@
 inline _M512I _mm512_mask_insertfield_pi(_M512I v1_old, __mmask k1, _M512I v2, _M512I v3, _MM_BITPOSITION32_ENUM rotation, _MM_BITPOSITION32_ENUM bit_idx_low, _MM_BITPOSITION32_ENUM bit_idx_high)
 {
     _M512I result;
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1_old;
-    unsigned int *p2 = (unsigned int *) &v2;
-    unsigned int *p3 = (unsigned int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1_old;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
+    _LPP_UInt *p3 = (_LPP_UInt *) &v3;
     unsigned int maskRight = 0xFFFFFFFF >> (31 - bit_idx_high);
     unsigned int maskLeft = 0xFFFFFFFF << bit_idx_low;
     unsigned int mask;
@@ -5396,14 +5420,14 @@
     _M512 result;
     int size, i;
     
-    int *r = (int *) &result;
+    _LPP_Int *r = (_LPP_Int *) &result;
 
     size = _LPP_FullUpConvSize(full_up);
 
     switch(broadcast) {
         case _MM_BROADCAST_16X16:
             for (i=0; i < 16; i++) {
-                r[i] = _LPP_FullUpConv((void *) ((char *) m + i*size), full_up);
+                r[i] = _LPP_FullUpConv((void *) ((_LPP_Char *) m + i*size), full_up);
             }
        break;
         case _MM_BROADCAST_1X16:
@@ -5413,7 +5437,7 @@
         break;
         case _MM_BROADCAST_4X16:
             for (i=0; i < 16; i++) {
-                r[i] = _LPP_FullUpConv((void *) ((char *) m + (i % 4) * size), full_up);
+                r[i] = _LPP_FullUpConv((void *) ((_LPP_Char *) m + (i % 4) * size), full_up);
             }
         break;
     }
@@ -5426,8 +5450,8 @@
     _M512 result;
     int size, i;
     
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
 
     size = _LPP_FullUpConvSize(full_up);
 
@@ -5435,7 +5459,7 @@
         case _MM_BROADCAST_16X16:
             for (i=0; i < 16; i++) {
                 if (k1 & 1) {
-                    r[i] = _LPP_FullUpConv((void *) ((char *) m + i*size), full_up);
+                    r[i] = _LPP_FullUpConv((void *) ((_LPP_Char *) m + i*size), full_up);
                 } else {
                     r[i] = p1[i];
                 }
@@ -5455,7 +5479,7 @@
         case _MM_BROADCAST_4X16:
             for (i=0; i < 16; i++) {
                 if (k1 & 1) {
-                    r[i] = _LPP_FullUpConv((void *) ((char *) m + (i % 4) * size), full_up);
+                    r[i] = _LPP_FullUpConv((void *) ((_LPP_Char *) m + (i % 4) * size), full_up);
                 } else {
                     r[i] = p1[i];
                 }
@@ -5471,8 +5495,8 @@
 {
     _M512 result;
     
-    int64_t *r = (int64_t *) &result;
-    int64_t *src = (int64_t *) m;
+    _LPP_Int64 *r = (_LPP_Int64 *) &result;
+    _LPP_Int64 *src = (_LPP_Int64 *) m;
 
     switch(broadcast) {
         case _MM_BROADCAST_8X8:
@@ -5499,9 +5523,9 @@
 {
     _M512 result;
     
-    int64_t *r = (int64_t *) &result;
-    int64_t *p1 = (int64_t *) &v1_old;
-    int64_t *src = (int64_t *) m;
+    _LPP_Int64 *r = (_LPP_Int64 *) &result;
+    _LPP_Int64 *p1 = (_LPP_Int64 *) &v1_old;
+    _LPP_Int64 *src = (_LPP_Int64 *) m;
 
     switch(broadcast) {
         case _MM_BROADCAST_8X8:
@@ -5543,8 +5567,8 @@
 {
     _M512 result;
 
-    int *r = (int *) &result;
-    char *src = (char *) m;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Char *src = (_LPP_Char *) m;
     int size = _LPP_FullUpConvSize(full_up);
 
     for (int i=0; i < 16; i++) {
@@ -5559,9 +5583,9 @@
 {
     _M512 result;
 
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    char *src = (char *) m;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Char *src = (_LPP_Char *) m;
     int size = _LPP_FullUpConvSize(full_up);
 
     for (int i=0; i < 16; i++) {
@@ -5581,8 +5605,8 @@
 {
     _M512 result;
 
-    int64_t *r = (int64_t *) &result;
-    int64_t *src = (int64_t *) m;
+    _LPP_Int64 *r = (_LPP_Int64 *) &result;
+    _LPP_Int64 *src = (_LPP_Int64 *) m;
 
     for (int i=0; i < 8; i++) {
         r[i] = *src++;
@@ -5595,9 +5619,9 @@
 {
     _M512 result;
 
-    int64_t *r = (int64_t *) &result;
-    int64_t *p1 = (int64_t *) &v1_old;
-    int64_t *src = (int64_t *) m;
+    _LPP_Int64 *r = (_LPP_Int64 *) &result;
+    _LPP_Int64 *p1 = (_LPP_Int64 *) &v1_old;
+    _LPP_Int64 *src = (_LPP_Int64 *) m;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -5616,10 +5640,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         r[i] = (p1[i] * p3[i]) + p2[i];
@@ -5643,10 +5667,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -5680,10 +5704,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = (p1[i] * p3[i]) + p2[i];
@@ -5707,10 +5731,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -5744,10 +5768,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         r[i] = (p2[i] * p1[i]) + p3[i];
@@ -5771,10 +5795,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -5808,10 +5832,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = (p2[i] * p1[i]) + p3[i];
@@ -5835,10 +5859,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -5872,10 +5896,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         r[i] = (p2[i] * p3[i]) + p1[i];
@@ -5899,10 +5923,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -5935,10 +5959,10 @@
 {
     _M512I result;
 
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = (p2[i] * p3[i]) + p1[i];
@@ -5951,10 +5975,10 @@
 {
     _M512I result;
 
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -5973,10 +5997,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = (p2[i] * p3[i]) + p1[i];
@@ -6000,10 +6024,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -6036,9 +6060,9 @@
 {
     _M512I result;
 
-    int *r = (int *) &result;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = (p2[i] * p3[(i & 0x0C) + 1]) + p3[(i & 0x0C) + 0];
@@ -6051,10 +6075,10 @@
 {
     _M512I result;
 
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -6073,9 +6097,9 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = (p2[i] * p3[(i & 0x0C) + 1]) + p3[(i & 0x0C) + 0];
@@ -6100,10 +6124,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1_old;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1_old;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -6139,10 +6163,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         r[i] = -((p1[i] * p3[i]) + p2[i]);
@@ -6167,10 +6191,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -6205,10 +6229,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = -((p1[i] * p3[i]) + p2[i]);
@@ -6233,10 +6257,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -6271,10 +6295,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         r[i] = -((p2[i] * p1[i]) + p3[i]);
@@ -6299,10 +6323,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -6337,10 +6361,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = -((p2[i] * p1[i]) + p3[i]);
@@ -6365,10 +6389,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -6403,10 +6427,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         r[i] = -((p2[i] * p3[i]) + p1[i]);
@@ -6431,10 +6455,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -6469,10 +6493,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = -((p2[i] * p3[i]) + p1[i]);
@@ -6497,10 +6521,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -6535,9 +6559,9 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = _LPP_max(fabs(p2[i]), fabs(p3[i]));
@@ -6561,10 +6585,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1_old;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1_old;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -6599,9 +6623,9 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         r[i] = _LPP_max(p2[i], p3[i]);
@@ -6624,10 +6648,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1_old;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1_old;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -6661,9 +6685,9 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = _LPP_max(p2[i], p3[i]);
@@ -6687,10 +6711,10 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -6725,9 +6749,9 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = _LPP_max(p2[i], p3[i]);
@@ -6750,10 +6774,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1_old;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1_old;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -6786,9 +6810,9 @@
 {
     _M512I result;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p2 = (unsigned int *) &v2;
-    unsigned int *p3 = (unsigned int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
+    _LPP_UInt *p3 = (_LPP_UInt *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = _LPP_max(p2[i], p3[i]);
@@ -6801,10 +6825,10 @@
 {
     _M512I result;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1_old;
-    unsigned int *p2 = (unsigned int *) &v2;
-    unsigned int *p3 = (unsigned int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1_old;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
+    _LPP_UInt *p3 = (_LPP_UInt *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -6823,9 +6847,9 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         r[i] = _LPP_min(p2[i], p3[i]);
@@ -6848,10 +6872,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1_old;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1_old;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -6885,9 +6909,9 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = _LPP_min(p2[i], p3[i]);
@@ -6911,10 +6935,10 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -6949,9 +6973,9 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = _LPP_min(p2[i], p3[i]);
@@ -6974,10 +6998,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1_old;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1_old;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -7010,9 +7034,9 @@
 {
     _M512I result;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p2 = (unsigned int *) &v2;
-    unsigned int *p3 = (unsigned int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
+    _LPP_UInt *p3 = (_LPP_UInt *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = _LPP_min(p2[i], p3[i]);
@@ -7031,9 +7055,9 @@
 {
     _M512 result;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1_old;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1_old;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -7051,9 +7075,9 @@
 {
     _M512 result;
 
-    int64_t *r = (int64_t *) &result;
-    int64_t *p1 = (int64_t *) &v1_old;
-    int64_t *p2 = (int64_t *) &v2;
+    _LPP_Int64 *r = (_LPP_Int64 *) &result;
+    _LPP_Int64 *p1 = (_LPP_Int64 *) &v1_old;
+    _LPP_Int64 *p2 = (_LPP_Int64 *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -7071,10 +7095,10 @@
 {
     _M512I result;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1_old;
-    unsigned int *p2 = (unsigned int *) &v2;
-    unsigned int *p3 = (unsigned int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1_old;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
+    _LPP_UInt *p3 = (_LPP_UInt *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -7093,10 +7117,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         r[i] = (p1[i] * p3[i]) - p2[i];
@@ -7120,10 +7144,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -7157,10 +7181,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = (p1[i] * p3[i]) - p2[i];
@@ -7184,10 +7208,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -7221,10 +7245,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         r[i] = (p2[i] * p1[i]) - p3[i];
@@ -7248,10 +7272,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -7285,10 +7309,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = (p2[i] * p1[i]) - p3[i];
@@ -7312,10 +7336,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -7349,10 +7373,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         r[i] = (p2[i] * p3[i]) - p1[i];
@@ -7376,10 +7400,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -7413,10 +7437,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = (p2[i] * p3[i]) - p1[i];
@@ -7440,10 +7464,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -7477,10 +7501,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         r[i] = p2[i] - (p1[i] * p3[i]);
@@ -7504,10 +7528,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -7541,10 +7565,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p2[i] - (p1[i] * p3[i]);
@@ -7568,10 +7592,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -7605,10 +7629,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         r[i] = p3[i] - (p2[i] * p1[i]);
@@ -7632,10 +7656,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -7669,10 +7693,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p3[i] - (p2[i] * p1[i]);
@@ -7696,10 +7720,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -7733,10 +7757,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         r[i] = p1[i] - (p2[i] * p3[i]);
@@ -7760,10 +7784,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -7797,10 +7821,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p1[i] - (p2[i] * p3[i]);
@@ -7824,10 +7848,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -7861,9 +7885,9 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         r[i] = 1.0 - (p2[i] * p3[i]);
@@ -7887,10 +7911,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1_old;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1_old;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -7925,9 +7949,9 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = 1.0f - (p2[i] * p3[i]);
@@ -7945,16 +7969,16 @@
     return result;
 }
 
-/* Multiply float32 vectors and substract from 1 under mask. */
+/* Multiply float32 vectors and subtract from 1 under mask. */
 inline _M512 _mm512_mask_msubr23c1_ps(_M512 v1_old, __mmask k1, _M512 v2, _M512 v3)
 {
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1_old;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1_old;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -7988,9 +8012,9 @@
 {
     _M512I result;
 
-    int *r = (int *) &result;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         int64_t tmp = p2[i] * p3[i];
@@ -8004,10 +8028,10 @@
 {
     _M512I result;
 
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -8026,9 +8050,9 @@
 {
     _M512I result;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p2 = (unsigned int *) &v2;
-    unsigned int *p3 = (unsigned int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
+    _LPP_UInt *p3 = (_LPP_UInt *) &v3;
 
     for (int i=0; i < 16; i++) {
         uint64_t tmp = p2[i] * p3[i];
@@ -8042,10 +8066,10 @@
 {
     _M512I result;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1_old;
-    unsigned int *p2 = (unsigned int *) &v2;
-    unsigned int *p3 = (unsigned int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1_old;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
+    _LPP_UInt *p3 = (_LPP_UInt *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -8064,9 +8088,9 @@
 {
     _M512I result;
 
-    int *r = (int *) &result;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         int64_t tmp = p2[i] * p3[i];
@@ -8080,10 +8104,10 @@
 {
     _M512I result;
 
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -8103,9 +8127,9 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         r[i] = p2[i] * p3[i];
@@ -8128,10 +8152,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1_old;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1_old;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -8165,9 +8189,9 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p2[i] * p3[i];
@@ -8190,10 +8214,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1_old;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1_old;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -8227,9 +8251,9 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p2[i] | p3[i];
@@ -8252,10 +8276,10 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -8295,10 +8319,10 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int64_t *r = (int64_t *) &result;
-    int64_t *p1 = (int64_t *) &v1_old;
-    int64_t *p2 = (int64_t *) &v2;
-    int64_t *p3 = (int64_t *) &v3;
+    _LPP_Int64 *r = (_LPP_Int64 *) &result;
+    _LPP_Int64 *p1 = (_LPP_Int64 *) &v1_old;
+    _LPP_Int64 *p2 = (_LPP_Int64 *) &v2;
+    _LPP_Int64 *p3 = (_LPP_Int64 *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -8329,27 +8353,27 @@
 /* Compress and store unaligned from doubleword vector. */
 inline void _mm512_compressd(void *m, _M512 v2, _MM_DOWNCONV32_ENUM down_conv, _MM_MEM_HINT_ENUM)
 {
-    int *p2 = (int *) &v2;
-    char *dstB;
-    short *dstW;
-    int *dstD;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Char *dstB;
+    _LPP_Short *dstW;
+    _LPP_Int *dstD;
     int size = _LPP_DownConvSize(down_conv);
 
     switch(size) {
         case 1:
-            dstB = (char *) m;
+            dstB = (_LPP_Char *) m;
             for (int i=0; i < 16; i++) {
                 *dstB++ = _LPP_DownConvByte(p2[i], down_conv);
             }
         break;
         case 2:
-            dstW = (short *) m;
+            dstW = (_LPP_Short *) m;
             for (int i=0; i < 16; i++) {
                 *dstW++ = _LPP_DownConvWord(p2[i], down_conv);
             }
         break;
         case 4:
-            dstD = (int *) m;
+            dstD = (_LPP_Int *) m;
             for (int i=0; i < 16; i++) {
                 *dstD++ = p2[i];
             }
@@ -8360,15 +8384,15 @@
 /* Compress and store unaligned from doubleword vector under mask. */
 inline void _mm512_mask_compressd(void *m, __mmask k1, _M512 v2, _MM_DOWNCONV32_ENUM down_conv, _MM_MEM_HINT_ENUM)
 {
-    int *p2 = (int *) &v2;
-    char *dstB;
-    short *dstW;
-    int *dstD;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Char *dstB;
+    _LPP_Short *dstW;
+    _LPP_Int *dstD;
     int size = _LPP_DownConvSize(down_conv);
 
     switch(size) {
         case 1:
-            dstB = (char *) m;
+            dstB = (_LPP_Char *) m;
             for (int i=0; i < 16; i++) {
                 if (k1 & 1) {
                     *dstB++ = _LPP_DownConvByte(p2[i], down_conv);
@@ -8377,7 +8401,7 @@
             }
         break;
         case 2:
-            dstW = (short *) m;
+            dstW = (_LPP_Short *) m;
             for (int i=0; i < 16; i++) {
                 if (k1 & 1) {
                     *dstW++ = _LPP_DownConvWord(p2[i], down_conv);
@@ -8386,7 +8410,7 @@
             }
         break;
         case 4:
-            dstD = (int *) m;
+            dstD = (_LPP_Int *) m;
             for (int i=0; i < 16; i++) {
                 if (k1 & 1) {
                     *dstD++ = p2[i];
@@ -8400,10 +8424,10 @@
 /* Compress and store unaligned from quadword vector. */
 inline void _mm512_compressq(void *m, _M512 v2, _MM_DOWNCONV64_ENUM, _MM_MEM_HINT_ENUM)
 {
-    int64_t *p2 = (int64_t *) &v2;
-    int64_t *dst = (int64_t *) m;
+    _LPP_Int64 *p2 = (_LPP_Int64 *) &v2;
+    _LPP_Int64 *dst = (_LPP_Int64 *) m;
 
-    for (int i=0; i < 16; i++) {
+    for (int i=0; i < 8; i++) {
         *dst++ = p2[i];
     }
 }
@@ -8411,10 +8435,10 @@
 /* Compress and store unaligned from quadword vector under mask. */
 inline void _mm512_mask_compressq(void *m, __mmask k1, _M512 v2, _MM_DOWNCONV64_ENUM, _MM_MEM_HINT_ENUM)
 {
-    int64_t *p2 = (int64_t *) &v2;
-    int64_t *dst = (int64_t *) m;
+    _LPP_Int64 *p2 = (_LPP_Int64 *) &v2;
+    _LPP_Int64 *dst = (_LPP_Int64 *) m;
 
-    for (int i=0; i < 16; i++) {
+    for (int i=0; i < 8; i++) {
         if (k1 & 1) {
             *dst++ = p2[i];
         }
@@ -8426,8 +8450,8 @@
 inline _M512I _mm512_rotatefield_pi(_M512I v2, _MM_BITPOSITION32_ENUM rotation, _MM_BITPOSITION32_ENUM bit_idx_low, _MM_BITPOSITION32_ENUM bit_idx_high)
 {
     _M512I result;
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
     unsigned int maskRight = 0xFFFFFFFF >> (31 - bit_idx_high);
     unsigned int maskLeft = 0xFFFFFFFF << bit_idx_low;
     unsigned int mask;
@@ -8449,9 +8473,9 @@
 inline _M512I _mm512_mask_rotatefield_pi(_M512I v1_old, __mmask k1, _M512I v2, _MM_BITPOSITION32_ENUM rotation, _MM_BITPOSITION32_ENUM bit_idx_low, _MM_BITPOSITION32_ENUM bit_idx_high)
 {
     _M512I result;
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1_old;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1_old;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
     unsigned int maskRight = 0xFFFFFFFF >> (31 - bit_idx_high);
     unsigned int maskLeft = 0xFFFFFFFF << bit_idx_low;
     unsigned int mask;
@@ -8480,8 +8504,8 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p2 = (float *) &v2;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         r[i] = (float) _LPP_ConvertFloat32ToInt32(p2[i], rc, expadj);
@@ -8512,9 +8536,9 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1_old;
-    float *p2 = (float *) &v2;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1_old;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -8556,9 +8580,9 @@
     _M512I result;
     __mmask returnMask = 0;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p3 = (unsigned int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p3 = (_LPP_UInt *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p1[i] - p3[i] - (k2 & 1);
@@ -8576,9 +8600,9 @@
     _M512I result;
     __mmask returnMask = 0;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p3 = (unsigned int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p3 = (_LPP_UInt *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -8602,9 +8626,9 @@
     _M512I result;
     __mmask returnMask = 0;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p3 = (unsigned int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p3 = (_LPP_UInt *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p3[i] - p1[i] - (k2 & 1);
@@ -8622,9 +8646,9 @@
     _M512I result;
     __mmask returnMask = 0;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p3 = (unsigned int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p3 = (_LPP_UInt *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -8647,9 +8671,9 @@
 {
     _M512 result;
 
-    float *r = (float *) &result;
-    float *p2 = (float *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p2[i] * pow(2.0f, p3[i]);
@@ -8662,10 +8686,10 @@
 {
     _M512 result;
 
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1_old;
-    float *p2 = (float *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1_old;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -8681,9 +8705,9 @@
 /* Scatter element vector. */
 inline void _mm512_scatterd(void *m, _M512I index, _M512 v1, _MM_DOWNCONV32_ENUM down_conv, _MM_INDEX_SCALE_ENUM scale, _MM_MEM_HINT_ENUM)
 {
-    int *p1 = (int *) &v1;
-    int *idx = (int *) &index;
-    char *dst = (char *) m;
+    _LPP_Int *p1 = (_LPP_Int *) &v1;
+    _LPP_Int *idx = (_LPP_Int *) &index;
+    _LPP_Char *dst = (_LPP_Char *) m;
     int size = _LPP_DownConvSize(down_conv);
 
     switch(size) {
@@ -8694,12 +8718,12 @@
         break;
         case 2:
             for (int i=0; i < 16; i++) {
-                *((short *) (dst + idx[i]*scale)) = _LPP_DownConvWord(p1[i], down_conv);
+                *((_LPP_Short *) (dst + idx[i]*scale)) = _LPP_DownConvWord(p1[i], down_conv);
             }
         break;
         case 4:
             for (int i=0; i < 16; i++) {
-                *((int *) (dst + idx[i]*scale)) = p1[i];
+                *((_LPP_Int *) (dst + idx[i]*scale)) = p1[i];
             }
         break;
     }
@@ -8708,9 +8732,9 @@
 /* Scatter element vector under mask. */
 inline void _mm512_mask_scatterd(void *m, __mmask k1, _M512I index, _M512 v1, _MM_DOWNCONV32_ENUM down_conv, _MM_INDEX_SCALE_ENUM scale, _MM_MEM_HINT_ENUM)
 {
-    int *p1 = (int *) &v1;
-    int *idx = (int *) &index;
-    char *dst = (char *) m;
+    _LPP_Int *p1 = (_LPP_Int *) &v1;
+    _LPP_Int *idx = (_LPP_Int *) &index;
+    _LPP_Char *dst = (_LPP_Char *) m;
     int size = _LPP_DownConvSize(down_conv);
 
     switch(size) {
@@ -8725,7 +8749,7 @@
         case 2:
             for (int i=0; i < 16; i++) {
                 if (k1 & 1) {
-                    *((short *) (dst + idx[i]*scale)) = _LPP_DownConvWord(p1[i], down_conv);
+                    *((_LPP_Short *) (dst + idx[i]*scale)) = _LPP_DownConvWord(p1[i], down_conv);
                 }
                 k1 >>= 1;
             }
@@ -8733,7 +8757,7 @@
         case 4:
             for (int i=0; i < 16; i++) {
                 if (k1 & 1) {
-                    *((int *) (dst + idx[i]*scale)) = p1[i];
+                    *((_LPP_Int *) (dst + idx[i]*scale)) = p1[i];
                 }
                 k1 >>= 1;
             }
@@ -8758,8 +8782,8 @@
 {
     _M512 result;
 
-    int *r = (int *) &result;
-    int *p2 = (int *) &v2;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
     int lanePerm = perm128;
 
     for (int i=0; i < 4; i++) {
@@ -8778,9 +8802,9 @@
 {
     _M512 result;
 
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    int *p2 = (int *) &v2;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
     int lanePerm = perm128;
 
     for (int i=0; i < 4; i++) {
@@ -8804,8 +8828,8 @@
 {
     _M512 result;
 
-    int *r = (int *) &result;
-    int *src = (int *) m;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *src = (_LPP_Int *) m;
     int lanePerm = perm128;
 
     for (int i=0; i < 4; i++) {
@@ -8824,9 +8848,9 @@
 {
     _M512 result;
 
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    int *src = (int *) m;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Int *src = (_LPP_Int *) m;
     int lanePerm = perm128;
 
     for (int i=0; i < 4; i++) {
@@ -8850,9 +8874,9 @@
 {
     _M512I result;
 
-    int *r = (int *) &result;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p2[i] << (p3[i] & 0x1F);
@@ -8865,10 +8889,10 @@
 {
     _M512I result;
 
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -8886,9 +8910,9 @@
 {
     _M512I result;
 
-    int *r = (int *) &result;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p2[i] >> (p3[i] & 0x1F);
@@ -8901,10 +8925,10 @@
 {
     _M512I result;
 
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -8922,9 +8946,9 @@
 {
     _M512I result;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p2 = (unsigned int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p2[i] >> (p3[i] & 0x1F);
@@ -8937,10 +8961,10 @@
 {
     _M512I result;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1_old;
-    unsigned int *p2 = (unsigned int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1_old;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -8956,10 +8980,10 @@
 /* Store doubleword vector. */
 inline void _mm512_stored(void *m, _M512 v2, _MM_DOWNCONV32_ENUM down_conv, _MM_STORE_SUBSET32_ENUM subset, _MM_MEM_HINT_ENUM)
 {
-    int *p2 = (int *) &v2;
-    char *dstB;
-    short *dstW;
-    int *dstD;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Char *dstB;
+    _LPP_Short *dstW;
+    _LPP_Int *dstD;
     int size = _LPP_DownConvSize(down_conv);
     int elements;
 
@@ -8969,19 +8993,19 @@
 
     switch(size) {
         case 1:
-            dstB = (char *) m;
+            dstB = (_LPP_Char *) m;
             for (int i=0; i < elements; i++) {
                 dstB[i] = _LPP_DownConvByte(p2[i], down_conv);
             }
         break;
         case 2:
-            dstW = (short *) m;
+            dstW = (_LPP_Short *) m;
             for (int i=0; i < elements; i++) {
                 dstW[i] = _LPP_DownConvWord(p2[i], down_conv);
             }
         break;
         case 4:
-            dstD = (int *) m;
+            dstD = (_LPP_Int *) m;
             for (int i=0; i < elements; i++) {
                 dstD[i] = p2[i];
             }
@@ -8992,10 +9016,10 @@
 /* Store doubleword vector under mask. */
 inline void _mm512_mask_stored(void *m, __mmask k1, _M512 v2, _MM_DOWNCONV32_ENUM down_conv, _MM_STORE_SUBSET32_ENUM subset, _MM_MEM_HINT_ENUM)
 {
-    int *p2 = (int *) &v2;
-    char *dstB;
-    short *dstW;
-    int *dstD;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Char *dstB;
+    _LPP_Short *dstW;
+    _LPP_Int *dstD;
     int size = _LPP_DownConvSize(down_conv);
     int elements;
 
@@ -9005,7 +9029,7 @@
 
     switch(size) {
         case 1:
-            dstB = (char *) m;
+            dstB = (_LPP_Char *) m;
             for (int i=0; i < elements; i++) {
                 if (k1 & 1) {
                     dstB[i] = _LPP_DownConvByte(p2[i], down_conv);
@@ -9014,7 +9038,7 @@
             }
         break;
         case 2:
-            dstW = (short *) m;
+            dstW = (_LPP_Short *) m;
             for (int i=0; i < elements; i++) {
                 if (k1 & 1) {
                     dstW[i] = _LPP_DownConvWord(p2[i], down_conv);
@@ -9023,7 +9047,7 @@
             }
         break;
         case 4:
-            dstD = (int *) m;
+            dstD = (_LPP_Int *) m;
             for (int i=0; i < elements; i++) {
                 if (k1 & 1) {
                     dstD[i] = p2[i];
@@ -9037,8 +9061,8 @@
 /* Store quadword vector. */
 inline void _mm512_storeq(void *m, _M512 v2, _MM_DOWNCONV64_ENUM, _MM_STORE_SUBSET64_ENUM subset, _MM_MEM_HINT_ENUM)
 {
-    int64_t *p2 = (int64_t *) &v2;
-    int64_t *dst = (int64_t *) m;
+    _LPP_Int64 *p2 = (_LPP_Int64 *) &v2;
+    _LPP_Int64 *dst = (_LPP_Int64 *) m;
     int elements;
 
     if (subset == _MM_SUBSET64_8) elements = 8;
@@ -9053,8 +9077,8 @@
 /* Store quadword vector under mask. */
 inline void _mm512_mask_storeq(void *m, __mmask k1, _M512 v2, _MM_DOWNCONV64_ENUM, _MM_STORE_SUBSET64_ENUM subset, _MM_MEM_HINT_ENUM)
 {
-    int64_t *p2 = (int64_t *) &v2;
-    int64_t *dst = (int64_t *) m;
+    _LPP_Int64 *p2 = (_LPP_Int64 *) &v2;
+    _LPP_Int64 *dst = (_LPP_Int64 *) m;
     int elements;
 
     if (subset == _MM_SUBSET64_8) elements = 8;
@@ -9075,9 +9099,9 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         r[i] = p2[i] - p3[i];
@@ -9100,10 +9124,10 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1_old;
-    double *p2 = (double *) &v2;
-    double *p3 = (double *) &v3;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1_old;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
+    _LPP_Double *p3 = (_LPP_Double *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -9137,9 +9161,9 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p2[i] - p3[i];
@@ -9162,10 +9186,10 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -9199,9 +9223,9 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p2[i] - p3[i];
@@ -9224,10 +9248,10 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1_old;
-    float *p2 = (float *) &v2;
-    float *p3 = (float *) &v3;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1_old;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
+    _LPP_Float *p3 = (_LPP_Float *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -9297,9 +9321,9 @@
     _M512I result;
     __mmask returnMask = 0;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p3 = (unsigned int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p3 = (_LPP_UInt *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p3[i] - p1[i];
@@ -9316,9 +9340,9 @@
     _M512I result;
     __mmask returnMask = 0;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p3 = (unsigned int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p3 = (_LPP_UInt *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -9342,9 +9366,9 @@
     _M512I result;
     __mmask returnMask = 0;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p3 = (unsigned int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p3 = (_LPP_UInt *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = p1[i] - p3[i];
@@ -9361,9 +9385,9 @@
     _M512I result;
     __mmask returnMask = 0;
 
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p3 = (unsigned int *) &v3;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p3 = (_LPP_UInt *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -9387,8 +9411,8 @@
     __mmask result = 0;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *p1 = (int *) &v1;
-    int *p2 = (int *) &v2;
+    _LPP_Int *p1 = (_LPP_Int *) &v1;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 16; i++) {
         if ((p1[i] & p2[i]) != 0) result |= (1 << i);
@@ -9419,9 +9443,9 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         r[i] = (p2[i] ^ p3[i]);
@@ -9444,10 +9468,10 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1_old;
-    int *p2 = (int *) &v2;
-    int *p3 = (int *) &v3;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1_old;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
+    _LPP_Int *p3 = (_LPP_Int *) &v3;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -9487,10 +9511,10 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int64_t *r = (int64_t *) &result;
-    int64_t *p1 = (int64_t *) &v1_old;
-    int64_t *p2 = (int64_t *) &v2;
-    int64_t *p3 = (int64_t *) &v3;
+    _LPP_Int64 *r = (_LPP_Int64 *) &result;
+    _LPP_Int64 *p1 = (_LPP_Int64 *) &v1_old;
+    _LPP_Int64 *p2 = (_LPP_Int64 *) &v2;
+    _LPP_Int64 *p3 = (_LPP_Int64 *) &v3;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -9565,7 +9589,7 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
+    _LPP_Int *r = (_LPP_Int *) &result;
 
     for (int i=0; i < 16; i++) {
         *r++ = 0;
@@ -9593,7 +9617,7 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
+    _LPP_Double *r = (_LPP_Double *) &result;
 
     for (int i=0; i < 8; i++) {
         r[i] = a[i];
@@ -9615,7 +9639,7 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
+    _LPP_Float *r = (_LPP_Float *) &result;
 
     for (int i=0; i < 16; i++) {
         r[i] = a[i];
@@ -9637,7 +9661,7 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
+    _LPP_Int *r = (_LPP_Int *) &result;
 
     for (int i=0; i < 16; i++) {
         r[i] = a[i];
@@ -9659,7 +9683,7 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
+    _LPP_Double *r = (_LPP_Double *) &result;
 
     for (int i=0; i < 8; i++) {
         r[i] = a;
@@ -9681,7 +9705,7 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int64_t *r = (int64_t *) &result;
+    _LPP_Int64 *r = (_LPP_Int64 *) &result;
 
     for (int i=0; i < 8; i++) {
         r[i] = a;
@@ -9703,7 +9727,7 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
+    _LPP_Float *r = (_LPP_Float *) &result;
 
     for (int i=0; i < 16; i++) {
         r[i] = a;
@@ -9725,7 +9749,7 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
+    _LPP_Int *r = (_LPP_Int *) &result;
 
     for (int i=0; i < 16; i++) {
         r[i] = a;
@@ -9747,7 +9771,7 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
+    _LPP_Double *r = (_LPP_Double *) &result;
 
     for (int i=0; i < 2; i++) {
         r[i*4+0] = a;
@@ -9773,7 +9797,7 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int64_t *r = (int64_t *) &result;
+    _LPP_Int64 *r = (_LPP_Int64 *) &result;
 
     for (int i=0; i < 2; i++) {
         r[i*4+0] = a;
@@ -9799,7 +9823,7 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
+    _LPP_Float *r = (_LPP_Float *) &result;
 
     for (int i=0; i < 4; i++) {
         r[i*4 + 0] = a;
@@ -9824,7 +9848,7 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
+    _LPP_Int *r = (_LPP_Int *) &result;
 
     for (int i=0; i < 4; i++) {
         r[i*4 + 0] = a;
@@ -9850,7 +9874,7 @@
     _M512 result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *r = (float *) &result;
+    _LPP_Float *r = (_LPP_Float *) &result;
 
     r[0] = e0;  r[1] = e1;  r[2] = e2;  r[3] = e3;
     r[4] = e4;  r[5] = e5;  r[6] = e6;  r[7] = e7;
@@ -9876,7 +9900,7 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *r = (int *) &result;
+    _LPP_Int *r = (_LPP_Int *) &result;
 
     r[0] = e0;  r[1] = e1;  r[2] = e2;  r[3] = e3;
     r[4] = e4;  r[5] = e5;  r[6] = e6;  r[7] = e7;
@@ -9901,7 +9925,7 @@
     _M512D result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *r = (double *) &result;
+    _LPP_Double *r = (_LPP_Double *) &result;
 
     r[0] = e0;  r[1] = e1;
     r[2] = e2;  r[3] = e3;
@@ -9926,7 +9950,7 @@
     _M512I result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int64_t *r = (int64_t *) &result;
+    _LPP_Int64 *r = (_LPP_Int64 *) &result;
 
     r[0] = e0;  r[1] = e1;
     r[2] = e2;  r[3] = e3;
@@ -9952,8 +9976,8 @@
 inline _M512D _mm512_acos_pd(_M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         r[i] = acos(p1[i]);
@@ -9965,9 +9989,9 @@
 inline _M512D _mm512_mask_acos_pd(_M512D v0_old, __mmask k1, _M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -9984,8 +10008,8 @@
 inline _M512 _mm512_acos_ps(_M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         r[i] = acosf(p1[i]);
@@ -9997,9 +10021,9 @@
 inline _M512 _mm512_mask_acos_ps(_M512 v0_old, __mmask k1, _M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -10016,8 +10040,8 @@
 inline _M512D _mm512_asin_pd(_M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         r[i] = asin(p1[i]);
@@ -10029,9 +10053,9 @@
 inline _M512D _mm512_mask_asin_pd(_M512D v0_old, __mmask k1, _M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -10048,8 +10072,8 @@
 inline _M512 _mm512_asin_ps(_M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         r[i] = asinf(p1[i]);
@@ -10061,9 +10085,9 @@
 inline _M512 _mm512_mask_asin_ps(_M512 v0_old, __mmask k1, _M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -10080,9 +10104,9 @@
 inline _M512D _mm512_atan2_pd(_M512D v1, _M512D v2)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         r[i] = atan2(p1[i], p2[i]);
@@ -10094,10 +10118,10 @@
 inline _M512D _mm512_mask_atan2_pd(_M512D v0_old, __mmask k1, _M512D v1, _M512D v2)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -10114,9 +10138,9 @@
 inline _M512 _mm512_atan2_ps(_M512 v1, _M512 v2)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         r[i] = atan2f(p1[i], p2[i]);
@@ -10128,10 +10152,10 @@
 inline _M512 _mm512_mask_atan2_ps(_M512 v0_old, __mmask k1, _M512 v1, _M512 v2)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -10148,8 +10172,8 @@
 inline _M512D _mm512_atan_pd(_M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         r[i] = atan(p1[i]);
@@ -10161,9 +10185,9 @@
 inline _M512D _mm512_mask_atan_pd(_M512D v0_old, __mmask k1, _M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -10180,8 +10204,8 @@
 inline _M512 _mm512_atan_ps(_M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         r[i] = atanf(p1[i]);
@@ -10193,9 +10217,9 @@
 inline _M512 _mm512_mask_atan_ps(_M512 v0_old, __mmask k1, _M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -10212,8 +10236,8 @@
 inline _M512D _mm512_ceil_pd(_M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         r[i] = ceil(p1[i]);
@@ -10225,9 +10249,9 @@
 inline _M512D _mm512_mask_ceil_pd(_M512D v0_old, __mmask k1, _M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -10244,8 +10268,8 @@
 inline _M512 _mm512_ceil_ps(_M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         r[i] = ceilf(p1[i]);
@@ -10257,9 +10281,9 @@
 inline _M512 _mm512_mask_ceil_ps(_M512 v0_old, __mmask k1, _M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -10276,8 +10300,8 @@
 inline _M512D _mm512_cos_pd(_M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         r[i] = cos(p1[i]);
@@ -10289,9 +10313,9 @@
 inline _M512D _mm512_mask_cos_pd(_M512D v0_old, __mmask k1, _M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -10308,8 +10332,8 @@
 inline _M512 _mm512_cos_ps(_M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         r[i] = cosf(p1[i]);
@@ -10321,9 +10345,9 @@
 inline _M512 _mm512_mask_cos_ps(_M512 v0_old, __mmask k1, _M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -10340,8 +10364,8 @@
 inline _M512D _mm512_cosh_pd(_M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         r[i] = cosh(p1[i]);
@@ -10353,9 +10377,9 @@
 inline _M512D _mm512_mask_cosh_pd(_M512D v0_old, __mmask k1, _M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -10372,8 +10396,8 @@
 inline _M512 _mm512_cosh_ps(_M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         r[i] = coshf(p1[i]);
@@ -10385,9 +10409,9 @@
 inline _M512 _mm512_mask_cosh_ps(_M512 v0_old, __mmask k1, _M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -10404,8 +10428,8 @@
 inline _M512D _mm512_exp2_pd(_M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         r[i] = pow(2.0, p1[i]);
@@ -10417,9 +10441,9 @@
 inline _M512D _mm512_mask_exp2_pd(_M512D v0_old, __mmask k1, _M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -10436,8 +10460,8 @@
 inline _M512 _mm512_exp2_ps(_M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         r[i] = powf(2.0f, p1[i]);
@@ -10449,9 +10473,9 @@
 inline _M512 _mm512_mask_exp2_ps(_M512 v0_old, __mmask k1, _M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -10468,8 +10492,8 @@
 inline _M512D _mm512_exp_pd(_M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         r[i] = exp(p1[i]);
@@ -10481,9 +10505,9 @@
 inline _M512D _mm512_mask_exp_pd(_M512D v0_old, __mmask k1, _M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -10500,8 +10524,8 @@
 inline _M512 _mm512_exp_ps(_M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         r[i] = expf(p1[i]);
@@ -10513,9 +10537,9 @@
 inline _M512 _mm512_mask_exp_ps(_M512 v0_old, __mmask k1, _M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -10532,8 +10556,8 @@
 inline _M512D _mm512_floor_pd(_M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         r[i] = floor(p1[i]);
@@ -10545,9 +10569,9 @@
 inline _M512D _mm512_mask_floor_pd(_M512D v0_old, __mmask k1, _M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -10564,8 +10588,8 @@
 inline _M512 _mm512_floor_ps(_M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         r[i] = floorf(p1[i]);
@@ -10577,9 +10601,9 @@
 inline _M512 _mm512_mask_floor_ps(_M512 v0_old, __mmask k1, _M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -10596,9 +10620,9 @@
 inline _M512D _mm512_hypot_pd(_M512D v1, _M512D v2)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         r[i] = _hypot(p1[i], p2[i]);
@@ -10610,10 +10634,10 @@
 inline _M512D _mm512_mask_hypot_pd(_M512D v0_old, __mmask k1, _M512D v1, _M512D v2)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -10630,9 +10654,9 @@
 inline _M512 _mm512_hypot_ps(_M512 v1, _M512 v2)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         r[i] = _hypotf(p1[i], p2[i]);
@@ -10644,10 +10668,10 @@
 inline _M512 _mm512_mask_hypot_ps(_M512 v0_old, __mmask k1, _M512 v1, _M512 v2)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -10664,9 +10688,9 @@
 inline _M512I _mm512_div_pi(_M512I v1, _M512I v2)
 {
     _M512I result;
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1;
-    int *p2 = (int *) &v2;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (p2[i] != 0) r[i] = p1[i] / p2[i];
@@ -10679,10 +10703,10 @@
 inline _M512I _mm512_mask_div_pi(_M512I v0_old, __mmask k1, _M512I v1, _M512I v2)
 {
     _M512I result;
-    int *r = (int *) &result;
-    int *p0 = (int *) &v0_old;
-    int *p1 = (int *) &v1;
-    int *p2 = (int *) &v2;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p0 = (_LPP_Int *) &v0_old;
+    _LPP_Int *p1 = (_LPP_Int *) &v1;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -10700,9 +10724,9 @@
 inline _M512 _mm512_div_ps(_M512 v1, _M512 v2)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         r[i] = p1[i] / p2[i];
@@ -10714,10 +10738,10 @@
 inline _M512 _mm512_mask_div_ps(_M512 v0_old, __mmask k1, _M512 v1, _M512 v2)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -10734,9 +10758,9 @@
 inline _M512D _mm512_div_pd(_M512D v1, _M512D v2)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         r[i] = p1[i] / p2[i];
@@ -10748,10 +10772,10 @@
 inline _M512D _mm512_mask_div_pd(_M512D v0_old, __mmask k1, _M512D v1, _M512D v2)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -10768,9 +10792,9 @@
 inline _M512I _mm512_div_pu(_M512I v1, _M512I v2)
 {
     _M512I result;
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (p2[i] != 0) r[i] = p1[i] / p2[i];
@@ -10783,10 +10807,10 @@
 inline _M512I _mm512_mask_div_pu(_M512I v0_old, __mmask k1, _M512I v1, _M512I v2)
 {
     _M512I result;
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p0 = (unsigned int *) &v0_old;
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p0 = (_LPP_UInt *) &v0_old;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -10804,8 +10828,8 @@
 inline _M512D _mm512_rsqrt_pd(_M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         r[i] = 1.0 / sqrt(p1[i]);
@@ -10817,9 +10841,9 @@
 inline _M512D _mm512_mask_rsqrt_pd(_M512D v0_old, __mmask k1, _M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -10836,8 +10860,8 @@
 inline _M512 _mm512_rsqrt_ps(_M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         r[i] = 1.0f / sqrtf(p1[i]);
@@ -10849,9 +10873,9 @@
 inline _M512 _mm512_mask_rsqrt_ps(_M512 v0_old, __mmask k1, _M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -10868,8 +10892,8 @@
 inline _M512D _mm512_recip_pd(_M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         r[i] = 1.0 / p1[i];
@@ -10881,9 +10905,9 @@
 inline _M512D _mm512_mask_recip_pd(_M512D v0_old, __mmask k1, _M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -10900,8 +10924,8 @@
 inline _M512 _mm512_recip_ps(_M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         r[i] = 1.0f / p1[i];
@@ -10913,9 +10937,9 @@
 inline _M512 _mm512_mask_recip_ps(_M512 v0_old, __mmask k1, _M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -10932,9 +10956,9 @@
 inline _M512I _mm512_rem_pi(_M512I v1, _M512I v2)
 {
     _M512I result;
-    int *r = (int *) &result;
-    int *p1 = (int *) &v1;
-    int *p2 = (int *) &v2;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p1 = (_LPP_Int *) &v1;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (p2[i] != 0) r[i] = p1[i] % p2[i];
@@ -10947,10 +10971,10 @@
 inline _M512I _mm512_mask_rem_pi(_M512I v0_old, __mmask k1, _M512I v1, _M512I v2)
 {
     _M512I result;
-    int *r = (int *) &result;
-    int *p0 = (int *) &v0_old;
-    int *p1 = (int *) &v1;
-    int *p2 = (int *) &v2;
+    _LPP_Int *r = (_LPP_Int *) &result;
+    _LPP_Int *p0 = (_LPP_Int *) &v0_old;
+    _LPP_Int *p1 = (_LPP_Int *) &v1;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -10968,9 +10992,9 @@
 inline _M512I _mm512_rem_pu(_M512I v1, _M512I v2)
 {
     _M512I result;
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (p2[i] != 0) r[i] = p1[i] % p2[i];
@@ -10983,10 +11007,10 @@
 inline _M512I _mm512_mask_rem_pu(_M512I v0_old, __mmask k1, _M512I v1, _M512I v2)
 {
     _M512I result;
-    unsigned int *r = (unsigned int *) &result;
-    unsigned int *p0 = (unsigned int *) &v0_old;
-    unsigned int *p1 = (unsigned int *) &v1;
-    unsigned int *p2 = (unsigned int *) &v2;
+    _LPP_UInt *r = (_LPP_UInt *) &result;
+    _LPP_UInt *p0 = (_LPP_UInt *) &v0_old;
+    _LPP_UInt *p1 = (_LPP_UInt *) &v1;
+    _LPP_UInt *p2 = (_LPP_UInt *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -11004,8 +11028,8 @@
 inline _M512D _mm512_log10_pd(_M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         r[i] = log10(p1[i]);
@@ -11017,9 +11041,9 @@
 inline _M512D _mm512_mask_log10_pd(_M512D v0_old, __mmask k1, _M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -11036,8 +11060,8 @@
 inline _M512 _mm512_log10_ps(_M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         r[i] = log10f(p1[i]);
@@ -11049,9 +11073,9 @@
 inline _M512 _mm512_mask_log10_ps(_M512 v0_old, __mmask k1, _M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -11068,8 +11092,8 @@
 inline _M512D _mm512_log2_pd(_M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         r[i] = log(p1[i]) * 1.4426950408889634073599246810019;  // 1 / Ln(2)
@@ -11081,9 +11105,9 @@
 inline _M512D _mm512_mask_log2_pd(_M512D v0_old, __mmask k1, _M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -11100,8 +11124,8 @@
 inline _M512 _mm512_log2_ps(_M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         r[i] = logf(p1[i]) * 1.4426950408889634073599246810019f;     // 1 / Ln(2)
@@ -11113,9 +11137,9 @@
 inline _M512 _mm512_mask_log2_ps(_M512 v0_old, __mmask k1, _M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -11132,8 +11156,8 @@
 inline _M512D _mm512_log_pd(_M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         r[i] = log(p1[i]);
@@ -11145,9 +11169,9 @@
 inline _M512D _mm512_mask_log_pd(_M512D v0_old, __mmask k1, _M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -11164,8 +11188,8 @@
 inline _M512 _mm512_log_ps(_M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         r[i] = logf(p1[i]);
@@ -11177,9 +11201,9 @@
 inline _M512 _mm512_mask_log_ps(_M512 v0_old, __mmask k1, _M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -11196,9 +11220,9 @@
 inline _M512D _mm512_pow_pd(_M512D v1, _M512D v2)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         r[i] = pow(p1[i], p2[i]);
@@ -11210,10 +11234,10 @@
 inline _M512D _mm512_mask_pow_pd(_M512D v0_old, __mmask k1, _M512D v1, _M512D v2)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
-    double *p2 = (double *) &v2;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -11230,9 +11254,9 @@
 inline _M512 _mm512_pow_ps(_M512 v1, _M512 v2)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         r[i] = powf(p1[i], p2[i]);
@@ -11244,10 +11268,10 @@
 inline _M512 _mm512_mask_pow_ps(_M512 v0_old, __mmask k1, _M512 v1, _M512 v2)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
-    float *p2 = (float *) &v2;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -11264,8 +11288,8 @@
 inline _M512D _mm512_sin_pd(_M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         r[i] = sin(p1[i]);
@@ -11277,9 +11301,9 @@
 inline _M512D _mm512_mask_sin_pd(_M512D v0_old, __mmask k1, _M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -11296,8 +11320,8 @@
 inline _M512 _mm512_sin_ps(_M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         r[i] = sinf(p1[i]);
@@ -11309,9 +11333,9 @@
 inline _M512 _mm512_mask_sin_ps(_M512 v0_old, __mmask k1, _M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -11328,8 +11352,8 @@
 inline _M512D _mm512_sinh_pd(_M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         r[i] = sinh(p1[i]);
@@ -11341,9 +11365,9 @@
 inline _M512D _mm512_mask_sinh_pd(_M512D v0_old, __mmask k1, _M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -11360,8 +11384,8 @@
 inline _M512 _mm512_sinh_ps(_M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         r[i] = sinhf(p1[i]);
@@ -11373,9 +11397,9 @@
 inline _M512 _mm512_mask_sinh_ps(_M512 v0_old, __mmask k1, _M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -11392,8 +11416,8 @@
 inline _M512D _mm512_sqrt_pd(_M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         r[i] = sqrt(p1[i]);
@@ -11405,9 +11429,9 @@
 inline _M512D _mm512_mask_sqrt_pd(_M512D v0_old, __mmask k1, _M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -11424,8 +11448,8 @@
 inline _M512 _mm512_sqrt_ps(_M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         r[i] = sqrtf(p1[i]);
@@ -11437,9 +11461,9 @@
 inline _M512 _mm512_mask_sqrt_ps(_M512 v0_old, __mmask k1, _M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -11456,8 +11480,8 @@
 inline _M512D _mm512_tan_pd(_M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         r[i] = tan(p1[i]);
@@ -11469,9 +11493,9 @@
 inline _M512D _mm512_mask_tan_pd(_M512D v0_old, __mmask k1, _M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -11488,8 +11512,8 @@
 inline _M512 _mm512_tan_ps(_M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         r[i] = tanf(p1[i]);
@@ -11501,9 +11525,9 @@
 inline _M512 _mm512_mask_tan_ps(_M512 v0_old, __mmask k1, _M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -11520,8 +11544,8 @@
 inline _M512D _mm512_tanh_pd(_M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         r[i] = tanh(p1[i]);
@@ -11533,9 +11557,9 @@
 inline _M512D _mm512_mask_tanh_pd(_M512D v0_old, __mmask k1, _M512D v1)
 {
     _M512D result;
-    double *r = (double *) &result;
-    double *p0 = (double *) &v0_old;
-    double *p1 = (double *) &v1;
+    _LPP_Double *r = (_LPP_Double *) &result;
+    _LPP_Double *p0 = (_LPP_Double *) &v0_old;
+    _LPP_Double *p1 = (_LPP_Double *) &v1;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) {
@@ -11552,8 +11576,8 @@
 inline _M512 _mm512_tanh_ps(_M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         r[i] = tanhf(p1[i]);
@@ -11565,9 +11589,9 @@
 inline _M512 _mm512_mask_tanh_ps(_M512 v0_old, __mmask k1, _M512 v1)
 {
     _M512 result;
-    float *r = (float *) &result;
-    float *p0 = (float *) &v0_old;
-    float *p1 = (float *) &v1;
+    _LPP_Float *r = (_LPP_Float *) &result;
+    _LPP_Float *p0 = (_LPP_Float *) &v0_old;
+    _LPP_Float *p1 = (_LPP_Float *) &v1;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) {
@@ -11586,7 +11610,7 @@
     float result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *p2 = (float *) &v2;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     result = p2[0];
     for (int i=1; i < 16; i++) {
@@ -11595,7 +11619,7 @@
 #else
     __m128 *p2 = (__m128 *) &v2;
     __m128 tmp;
-    float *r = (float *) &tmp;
+    _LPP_Float *r = (_LPP_Float *) &tmp;
     
     tmp = _mm_add_ps(_mm_add_ps(p2[0], p2[1]), _mm_add_ps(p2[2], p2[3]));    
     result = r[0] + r[1] + r[2] + r[3];
@@ -11608,7 +11632,7 @@
 inline float _mm512_mask_reduce_add_ps(__mmask k1, _M512 v2)
 {
     float result = 0;
-    float *p2 = (float *) &v2;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) result += p2[i];
@@ -11623,7 +11647,7 @@
     double result;
     
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *p2 = (double *) &v2;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     result = p2[0];
     for (int i=1; i < 8; i++) {
@@ -11632,7 +11656,7 @@
 #else
     __m128d *p2 = (__m128d *) &v2;
     __m128d tmp;
-    double *r = (double *) &tmp;
+    _LPP_Double *r = (_LPP_Double *) &tmp;
     
     tmp = _mm_add_pd(_mm_add_pd(p2[0], p2[1]), _mm_add_pd(p2[2], p2[3]));    
     result = r[0] + r[1];
@@ -11645,7 +11669,7 @@
 inline double _mm512_mask_reduce_add_pd(__mmask k1, _M512D v2)
 {
     double result = 0;
-    double *p2 = (double *) &v2;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) result += p2[i];
@@ -11660,7 +11684,7 @@
     int result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *p2 = (int *) &v2;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
     
     result = p2[0];
     for (int i=1; i < 16; i++) {
@@ -11669,7 +11693,7 @@
 #else
     __m128i *p2 = (__m128i *) &v2;
     __m128i tmp;
-    int *r = (int *) &tmp;
+    _LPP_Int *r = (_LPP_Int *) &tmp;
     
     tmp = _mm_add_epi32(_mm_add_epi32(p2[0], p2[1]), _mm_add_epi32(p2[2], p2[3]));    
     result = r[0] + r[1] + r[2] + r[3];
@@ -11682,7 +11706,7 @@
 inline int _mm512_mask_reduce_add_pi(__mmask k1, _M512I v2)
 {
     int result = 0;
-    int *p2 = (int *) &v2;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
     
     for (int i=0; i < 16; i++) {
         if (k1 & 1) result += p2[i];
@@ -11697,7 +11721,7 @@
     float result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *p2 = (float *) &v2;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     result = p2[0];
     for (int i=1; i < 16; i++) {
@@ -11706,7 +11730,7 @@
 #else
     __m128 *p2 = (__m128 *) &v2;
     __m128 tmp;
-    float *r = (float *) &tmp;
+    _LPP_Float *r = (_LPP_Float *) &tmp;
     
     tmp = _mm_mul_ps(_mm_mul_ps(p2[0], p2[1]), _mm_mul_ps(p2[2], p2[3]));    
     result = r[0] * r[1] * r[2] * r[3];
@@ -11719,7 +11743,7 @@
 inline float _mm512_mask_reduce_mul_ps(__mmask k1,_M512 v2)
 {
     float result = 1.0f;
-    float *p2 = (float *) &v2;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) result *= p2[i];
@@ -11734,7 +11758,7 @@
     double result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *p2 = (double *) &v2;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     result = p2[0];
     for (int i=1; i < 8; i++) {
@@ -11743,7 +11767,7 @@
 #else
     __m128d *p2 = (__m128d *) &v2;
     __m128d tmp;
-    double *r = (double *) &tmp;
+    _LPP_Double *r = (_LPP_Double *) &tmp;
     
     tmp = _mm_mul_pd(_mm_mul_pd(p2[0], p2[1]), _mm_mul_pd(p2[2], p2[3]));    
     result = r[0] * r[1];
@@ -11756,7 +11780,7 @@
 inline double _mm512_mask_reduce_mul_pd(__mmask k1, _M512D v2)
 {
     double result = 1.0;
-    double *p2 = (double *) &v2;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) result *= p2[i];
@@ -11769,7 +11793,7 @@
 inline int _mm512_reduce_mul_pi(_M512I v2)
 {
     int result;
-    int *p2 = (int *) &v2;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     result = p2[0];
     for (int i=1; i < 16; i++) {
@@ -11783,7 +11807,7 @@
 inline int _mm512_mask_reduce_mul_pi(__mmask k1, _M512I v2)
 {
     int result = 1;
-    int *p2 = (int *) &v2;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) result *= p2[i];
@@ -11798,7 +11822,7 @@
     float result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *p2 = (float *) &v2;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
     
     result = p2[0];
     for (int i=1; i < 16; i++) {
@@ -11807,7 +11831,7 @@
 #else
     __m128 *p2 = (__m128 *) &v2;
     __m128 tmp;
-    float *r = (float *) &tmp;
+    _LPP_Float *r = (_LPP_Float *) &tmp;
     
     tmp = _mm_min_ps(_mm_min_ps(p2[0], p2[1]), _mm_min_ps(p2[2], p2[3]));    
     result = _LPP_min(_LPP_min(r[0], r[1]), _LPP_min(r[2], r[3]));
@@ -11820,7 +11844,7 @@
 inline float _mm512_mask_reduce_min_ps(__mmask k1, _M512 v2)
 {
     float result = FLT_MAX;
-    float *p2 = (float *) &v2;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
     
     for (int i=0; i < 16; i++) {
         if (k1 & 1) result = _LPP_min(result, p2[i]);
@@ -11835,7 +11859,7 @@
     double result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *p2 = (double *) &v2;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     result = p2[0];
     for (int i=1; i < 8; i++) {
@@ -11844,7 +11868,7 @@
 #else
     __m128d *p2 = (__m128d *) &v2;
     __m128d tmp;
-    double *r = (double *) &tmp;
+    _LPP_Double *r = (_LPP_Double *) &tmp;
     
     tmp = _mm_min_pd(_mm_min_pd(p2[0], p2[1]), _mm_min_pd(p2[2], p2[3]));    
     result = _LPP_min(r[0], r[1]);
@@ -11857,7 +11881,7 @@
 inline double _mm512_mask_reduce_min_pd(__mmask k1, _M512D v2)
 {
     double result = DBL_MAX;
-    double *p2 = (double *) &v2;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) result = _LPP_min(result, p2[i]);
@@ -11870,7 +11894,7 @@
 inline int _mm512_reduce_min_pi(_M512I v2)
 {
     int result;
-    int *p2 = (int *) &v2;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     result = p2[0];
     for (int i=1; i < 16; i++) {
@@ -11884,7 +11908,7 @@
 inline int _mm512_mask_reduce_min_pi(__mmask k1, _M512I v2)
 {
     int result = 0x7fffffff;    // MAX_INT
-    int *p2 = (int *) &v2;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=1; i < 16; i++) {
         if (k1 & 1) result = _LPP_min(result, p2[i]);
@@ -11899,7 +11923,7 @@
     float result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    float *p2 = (float *) &v2;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     result = p2[0];
     for (int i=1; i < 16; i++) {
@@ -11908,7 +11932,7 @@
 #else
     __m128 *p2 = (__m128 *) &v2;
     __m128 tmp;
-    float *r = (float *) &tmp;
+    _LPP_Float *r = (_LPP_Float *) &tmp;
     
     tmp = _mm_max_ps(_mm_max_ps(p2[0], p2[1]), _mm_max_ps(p2[2], p2[3]));    
     result = _LPP_max(_LPP_max(r[0], r[1]), _LPP_max(r[2], r[3]));
@@ -11921,7 +11945,7 @@
 inline float _mm512_mask_reduce_max_ps(__mmask k1, _M512 v2)
 {
     float result = FLT_MIN;
-    float *p2 = (float *) &v2;
+    _LPP_Float *p2 = (_LPP_Float *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) result = _LPP_max(result, p2[i]);
@@ -11936,7 +11960,7 @@
     double result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    double *p2 = (double *) &v2;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     result = p2[0];
     for (int i=1; i < 8; i++) {
@@ -11945,7 +11969,7 @@
 #else
     __m128d *p2 = (__m128d *) &v2;
     __m128d tmp;
-    double *r = (double *) &tmp;
+    _LPP_Double *r = (_LPP_Double *) &tmp;
     
     tmp = _mm_max_pd(_mm_max_pd(p2[0], p2[1]), _mm_max_pd(p2[2], p2[3]));    
     result = _LPP_max(r[0], r[1]);
@@ -11958,7 +11982,7 @@
 inline double _mm512_mask_reduce_max_pd(__mmask k1, _M512D v2)
 {
     double result = DBL_MIN;
-    double *p2 = (double *) &v2;
+    _LPP_Double *p2 = (_LPP_Double *) &v2;
 
     for (int i=0; i < 8; i++) {
         if (k1 & 1) result = _LPP_max(result, p2[i]);
@@ -11971,7 +11995,7 @@
 inline int _mm512_reduce_max_pi(_M512I v2)
 {
     int result;
-    int *p2 = (int *) &v2;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     result = p2[0];
     for (int i=1; i < 16; i++) {
@@ -11985,7 +12009,7 @@
 inline int _mm512_mask_reduce_max_pi(__mmask k1, _M512I v2)
 {
     int result = 0x80000000;        // MIN_INT
-    int *p2 = (int *) &v2;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) result = _LPP_max(result, p2[i]);
@@ -12000,7 +12024,7 @@
     int result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *p2 = (int *) &v2;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     result = p2[0];
     for (int i=1; i < 16; i++) {
@@ -12009,7 +12033,7 @@
 #else
     __m128i *p2 = (__m128i *) &v2;
     __m128i tmp;
-    int *r = (int *) &tmp;
+    _LPP_Int *r = (_LPP_Int *) &tmp;
     
     tmp = _mm_or_si128(_mm_or_si128(p2[0], p2[1]), _mm_or_si128(p2[2], p2[3]));    
     result = r[0] | r[1] | r[2] | r[3];
@@ -12022,7 +12046,7 @@
 inline int _mm512_mask_reduce_or_pi(__mmask k1, _M512I v2)
 {
     int result = 0;
-    int *p2 = (int *) &v2;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) result |= p2[i];
@@ -12037,7 +12061,7 @@
     int result;
 
 #if USE_C_PROTOTYPE_PRIMITIVES
-    int *p2 = (int *) &v2;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     result = p2[0];
     for (int i=1; i < 16; i++) {
@@ -12046,7 +12070,7 @@
 #else
     __m128i *p2 = (__m128i *) &v2;
     __m128i tmp;
-    int *r = (int *) &tmp;
+    _LPP_Int *r = (_LPP_Int *) &tmp;
     
     tmp = _mm_and_si128(_mm_and_si128(p2[0], p2[1]), _mm_and_si128(p2[2], p2[3]));    
     result = r[0] & r[1] & r[2] & r[3];
@@ -12059,7 +12083,7 @@
 inline int _mm512_mask_reduce_and_pi(__mmask k1, _M512I v2)
 {
     int result = 0xffffffff;
-    int *p2 = (int *) &v2;
+    _LPP_Int *p2 = (_LPP_Int *) &v2;
 
     for (int i=0; i < 16; i++) {
         if (k1 & 1) result &= p2[i];
