Fix bugs with PSHUFB and VPSHUFD. (#442)

This commit is contained in:
adahsuzixin
2020-07-21 01:37:45 +08:00
committed by GitHub
parent dac03fdf39
commit e26fea16bb
2 changed files with 4 additions and 3 deletions
+2 -1
View File
@@ -1763,10 +1763,11 @@ DEF_SEM(PSHUFB, D dst, S1 src1, S2 src2) {
auto dst_vec = UClearV8(UReadV8(dst));
auto vec_count = NumVectorElems(src1_vec);
uint8_t mask = vec_count - 1;
_Pragma("unroll")
for (size_t i = 0; i < vec_count; i++) {
uint8_t v1 = UExtractV8(src2_vec, i);
uint8_t index = UAnd(v1, 7_u8);
uint8_t index = UAnd(v1, mask);
uint8_t v2 = UExtractV8(src1_vec, index);
uint8_t value = Select(SignFlag(v1), 0_u8, v2);
dst_vec = UInsertV8(dst_vec, i, value);
+2 -2
View File
@@ -325,8 +325,8 @@ DEF_SEM(PSHUFD, D dst, S1 src1, I8 src2) {
DEF_ISEL(PSHUFD_XMMdq_MEMdq_IMMb) = PSHUFD<V128W, MV128>;
DEF_ISEL(PSHUFD_XMMdq_XMMdq_IMMb) = PSHUFD<V128W, V128>;
IF_AVX(DEF_ISEL(VPSHUFD_XMMdq_MEMdq_IMMb) = PSHUFD<V128W, MV128>;)
IF_AVX(DEF_ISEL(VPSHUFD_XMMdq_XMMdq_IMMb) = PSHUFD<V128W, V128>;)
IF_AVX(DEF_ISEL(VPSHUFD_XMMdq_MEMdq_IMMb) = PSHUFD<VV128W, MV128>;)
IF_AVX(DEF_ISEL(VPSHUFD_XMMdq_XMMdq_IMMb) = PSHUFD<VV128W, V128>;)
IF_AVX(DEF_ISEL(VPSHUFD_YMMqq_MEMqq_IMMb) = PSHUFD<VV256W, MV256>;)
IF_AVX(DEF_ISEL(VPSHUFD_YMMqq_YMMqq_IMMb) = PSHUFD<VV256W, V256>;)