Просмотр исходного кода

Merge pull request #4203 from jammar1/jammar1/fix-br-v128

Add missing V128 handling in WASM_OP_BR, reported in #4173
Marcin Kolny 8 месяцев назад
Родитель
Сommit
c883fafead
1 измененных файлов с 21 добавлено и 0 удалено
  1. 21 0
      core/iwasm/interpreter/wasm_interp_fast.c

+ 21 - 0
core/iwasm/interpreter/wasm_interp_fast.c

@@ -1013,6 +1013,22 @@ fail:
                         SET_FRAME_REF((unsigned)(dst_offsets[0] + 1));     \
                     }                                                      \
                 }                                                          \
+                else if (cells[0] == 4) {                                  \
+                    PUT_V128_TO_ADDR(                                      \
+                        frame_lp + dst_offsets[0],                         \
+                        GET_V128_FROM_ADDR(frame_lp + src_offsets[0]));    \
+                    /* Ignore constants because they are not reference */  \
+                    if (src_offsets[0] >= 0) {                             \
+                        CLEAR_FRAME_REF((unsigned)src_offsets[0]);         \
+                        CLEAR_FRAME_REF((unsigned)(src_offsets[0] + 1));   \
+                        CLEAR_FRAME_REF((unsigned)(src_offsets[0] + 2));   \
+                        CLEAR_FRAME_REF((unsigned)(src_offsets[0] + 3));   \
+                        SET_FRAME_REF((unsigned)dst_offsets[0]);           \
+                        SET_FRAME_REF((unsigned)(dst_offsets[0] + 1));     \
+                        SET_FRAME_REF((unsigned)(dst_offsets[0] + 2));     \
+                        SET_FRAME_REF((unsigned)(dst_offsets[0] + 3));     \
+                    }                                                      \
+                }                                                          \
             }                                                              \
             else {                                                         \
                 if (!copy_stack_values(module, frame_lp, arity, frame_ref, \
@@ -1053,6 +1069,11 @@ fail:
                         frame_lp + dst_offsets[0],                          \
                         GET_I64_FROM_ADDR(frame_lp + src_offsets[0]));      \
                 }                                                           \
+                else if (cells[0] == 4) {                                   \
+                    PUT_V128_TO_ADDR(                                       \
+                        frame_lp + dst_offsets[0],                          \
+                        GET_V128_FROM_ADDR(frame_lp + src_offsets[0]));     \
+                }                                                           \
             }                                                               \
             else {                                                          \
                 if (!copy_stack_values(module, frame_lp, arity, total_cell, \