@@ -1189,14 +1189,25 @@ static auto PIQUANT_HOT dequant_uint4_to_bf16(
11891189 vf31 = _mm512_add_ps (vf31, _mm512_castsi512_ps (_mm512_slli_epi32 (_mm512_cvtepu16_epi32 (_mm256_loadu_si256 (reinterpret_cast <const __m256i*>(o+i+112 ))), 16 )));
11901190 #endif
11911191 }
1192- _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+0 ), cvt_ps_to_bf16 (vf00));
1193- _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+16 ), cvt_ps_to_bf16 (vf10));
1194- _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+32 ), cvt_ps_to_bf16 (vf20));
1195- _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+48 ), cvt_ps_to_bf16 (vf30));
1196- _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+64 ), cvt_ps_to_bf16 (vf01));
1197- _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+80 ), cvt_ps_to_bf16 (vf11));
1198- _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+96 ), cvt_ps_to_bf16 (vf21));
1199- _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+112 ), cvt_ps_to_bf16 (vf31));
1192+ #ifdef __AVX512BF16__
1193+ _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+0 ), std::bit_cast<__m256i>(_mm512_cvtneps_pbh (vf00)));
1194+ _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+16 ), std::bit_cast<__m256i>(_mm512_cvtneps_pbh (vf10)));
1195+ _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+32 ), std::bit_cast<__m256i>(_mm512_cvtneps_pbh (vf20)));
1196+ _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+48 ), std::bit_cast<__m256i>(_mm512_cvtneps_pbh (vf30)));
1197+ _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+64 ), std::bit_cast<__m256i>(_mm512_cvtneps_pbh (vf01)));
1198+ _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+80 ), std::bit_cast<__m256i>(_mm512_cvtneps_pbh (vf11)));
1199+ _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+96 ), std::bit_cast<__m256i>(_mm512_cvtneps_pbh (vf21)));
1200+ _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+112 ), std::bit_cast<__m256i>(_mm512_cvtneps_pbh (vf31)));
1201+ #else
1202+ _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+0 ), cvt_ps_to_bf16 (vf00));
1203+ _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+16 ), cvt_ps_to_bf16 (vf10));
1204+ _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+32 ), cvt_ps_to_bf16 (vf20));
1205+ _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+48 ), cvt_ps_to_bf16 (vf30));
1206+ _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+64 ), cvt_ps_to_bf16 (vf01));
1207+ _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+80 ), cvt_ps_to_bf16 (vf11));
1208+ _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+96 ), cvt_ps_to_bf16 (vf21));
1209+ _mm256_storeu_si256 (reinterpret_cast <__m256i*>(o+i+112 ), cvt_ps_to_bf16 (vf31));
1210+ #endif
12001211 }
12011212 #elif defined(__AVX2__)
12021213 #elif defined(__SSE4_2__)
0 commit comments