Procházet zdrojové kódy

Process GC types in wasm_runtime_invoke_native_raw (#2456)

Xu Jun před 2 roky
rodič
revize
48b9c8c51a
1 změnil soubory, kde provedl 39 přidání a 0 odebrání
  1. 39 0
      core/iwasm/common/wasm_runtime_common.c

+ 39 - 0
core/iwasm/common/wasm_runtime_common.c

@@ -3451,6 +3451,26 @@ wasm_runtime_invoke_native_raw(WASMExecEnv *exec_env, void *func_ptr,
                             sizeof(uintptr_t));
                             sizeof(uintptr_t));
                 break;
                 break;
             }
             }
+#endif
+#if WASM_ENABLE_GC != 0
+            case REF_TYPE_FUNCREF:
+            case REF_TYPE_EXTERNREF:
+            case REF_TYPE_ANYREF:
+            case REF_TYPE_EQREF:
+            case REF_TYPE_HT_NULLABLE:
+            case REF_TYPE_HT_NON_NULLABLE:
+            case REF_TYPE_I31REF:
+            case REF_TYPE_NULLFUNCREF:
+            case REF_TYPE_NULLEXTERNREF:
+            case REF_TYPE_STRUCTREF:
+            case REF_TYPE_ARRAYREF:
+            case REF_TYPE_NULLREF:
+            {
+                bh_memcpy_s(argv_dst, sizeof(uintptr_t), argv_src,
+                            sizeof(uintptr_t));
+                argv_src += sizeof(uintptr_t) / sizeof(uint32);
+                break;
+            }
 #endif
 #endif
             default:
             default:
                 bh_assert(0);
                 bh_assert(0);
@@ -3494,6 +3514,25 @@ wasm_runtime_invoke_native_raw(WASMExecEnv *exec_env, void *func_ptr,
                 argv_ret[0] = externref_idx;
                 argv_ret[0] = externref_idx;
                 break;
                 break;
             }
             }
+#endif
+#if WASM_ENABLE_GC != 0
+            case REF_TYPE_FUNCREF:
+            case REF_TYPE_EXTERNREF:
+            case REF_TYPE_ANYREF:
+            case REF_TYPE_EQREF:
+            case REF_TYPE_HT_NULLABLE:
+            case REF_TYPE_HT_NON_NULLABLE:
+            case REF_TYPE_I31REF:
+            case REF_TYPE_NULLFUNCREF:
+            case REF_TYPE_NULLEXTERNREF:
+            case REF_TYPE_STRUCTREF:
+            case REF_TYPE_ARRAYREF:
+            case REF_TYPE_NULLREF:
+            {
+                bh_memcpy_s(argv_ret, sizeof(uintptr_t), argv1,
+                            sizeof(uintptr_t));
+                break;
+            }
 #endif
 #endif
             default:
             default:
                 bh_assert(0);
                 bh_assert(0);