@@ -3049,7 +3049,7 @@ wasm_runtime_invoke_native_raw(WASMExecEnv *exec_env, void *func_ptr,
30493049 || defined(BUILD_TARGET_RISCV32_ILP32D ) \
30503050 || defined(BUILD_TARGET_RISCV32_ILP32 ) || defined(BUILD_TARGET_ARC )
30513051typedef void (* GenericFunctionPointer )();
3052- int64
3052+ void
30533053invokeNative (GenericFunctionPointer f , uint32 * args , uint32 n_stacks );
30543054
30553055typedef float64 (* Float64FuncPtr )(GenericFunctionPointer , uint32 * , uint32 );
@@ -3058,13 +3058,16 @@ typedef int64 (*Int64FuncPtr)(GenericFunctionPointer, uint32 *, uint32);
30583058typedef int32 (* Int32FuncPtr )(GenericFunctionPointer , uint32 * , uint32 );
30593059typedef void (* VoidFuncPtr )(GenericFunctionPointer , uint32 * , uint32 );
30603060
3061- static Float64FuncPtr invokeNative_Float64 =
3061+ static volatile Float64FuncPtr invokeNative_Float64 =
30623062 (Float64FuncPtr )(uintptr_t )invokeNative ;
3063- static Float32FuncPtr invokeNative_Float32 =
3063+ static volatile Float32FuncPtr invokeNative_Float32 =
30643064 (Float32FuncPtr )(uintptr_t )invokeNative ;
3065- static Int64FuncPtr invokeNative_Int64 = (Int64FuncPtr )(uintptr_t )invokeNative ;
3066- static Int32FuncPtr invokeNative_Int32 = (Int32FuncPtr )(uintptr_t )invokeNative ;
3067- static VoidFuncPtr invokeNative_Void = (VoidFuncPtr )(uintptr_t )invokeNative ;
3065+ static volatile Int64FuncPtr invokeNative_Int64 =
3066+ (Int64FuncPtr )(uintptr_t )invokeNative ;
3067+ static volatile Int32FuncPtr invokeNative_Int32 =
3068+ (Int32FuncPtr )(uintptr_t )invokeNative ;
3069+ static volatile VoidFuncPtr invokeNative_Void =
3070+ (VoidFuncPtr )(uintptr_t )invokeNative ;
30683071
30693072#if defined(BUILD_TARGET_ARM_VFP ) || defined(BUILD_TARGET_THUMB_VFP )
30703073#define MAX_REG_INTS 4
@@ -3520,7 +3523,7 @@ wasm_runtime_invoke_native(WASMExecEnv *exec_env, void *func_ptr,
35203523 || defined(BUILD_TARGET_THUMB ) || defined(BUILD_TARGET_MIPS ) \
35213524 || defined(BUILD_TARGET_XTENSA )
35223525typedef void (* GenericFunctionPointer )();
3523- int64
3526+ void
35243527invokeNative (GenericFunctionPointer f , uint32 * args , uint32 sz );
35253528
35263529typedef float64 (* Float64FuncPtr )(GenericFunctionPointer f , uint32 * , uint32 );
@@ -3529,13 +3532,16 @@ typedef int64 (*Int64FuncPtr)(GenericFunctionPointer f, uint32 *, uint32);
35293532typedef int32 (* Int32FuncPtr )(GenericFunctionPointer f , uint32 * , uint32 );
35303533typedef void (* VoidFuncPtr )(GenericFunctionPointer f , uint32 * , uint32 );
35313534
3532- static Int64FuncPtr invokeNative_Int64 = (Int64FuncPtr )invokeNative ;
3533- static Int32FuncPtr invokeNative_Int32 = (Int32FuncPtr )(uintptr_t )invokeNative ;
3534- static Float64FuncPtr invokeNative_Float64 =
3535+ static volatile Int64FuncPtr invokeNative_Int64 =
3536+ (Int64FuncPtr )(uintptr_t )invokeNative ;
3537+ static volatile Int32FuncPtr invokeNative_Int32 =
3538+ (Int32FuncPtr )(uintptr_t )invokeNative ;
3539+ static volatile Float64FuncPtr invokeNative_Float64 =
35353540 (Float64FuncPtr )(uintptr_t )invokeNative ;
3536- static Float32FuncPtr invokeNative_Float32 =
3541+ static volatile Float32FuncPtr invokeNative_Float32 =
35373542 (Float32FuncPtr )(uintptr_t )invokeNative ;
3538- static VoidFuncPtr invokeNative_Void = (VoidFuncPtr )(uintptr_t )invokeNative ;
3543+ static volatile VoidFuncPtr invokeNative_Void =
3544+ (VoidFuncPtr )(uintptr_t )invokeNative ;
35393545
35403546static inline void
35413547word_copy (uint32 * dest , uint32 * src , unsigned num )
@@ -3762,33 +3768,25 @@ typedef uint32x4_t __m128i;
37623768#endif /* end of WASM_ENABLE_SIMD != 0 */
37633769
37643770typedef void (* GenericFunctionPointer )();
3765- #if defined(__APPLE__ ) || defined(__MACH__ )
3766- /**
3767- * Define the return type as 'void' in MacOS, since after converting
3768- * 'int64 invokeNative' into 'float64 invokeNative_Float64', the
3769- * return value passing might be invalid, the caller reads the return
3770- * value from register rax but not xmm0.
3771- */
37723771void
37733772invokeNative (GenericFunctionPointer f , uint64 * args , uint64 n_stacks );
3774- #else
3775- int64
3776- invokeNative (GenericFunctionPointer f , uint64 * args , uint64 n_stacks );
3777- #endif
37783773
37793774typedef float64 (* Float64FuncPtr )(GenericFunctionPointer , uint64 * , uint64 );
37803775typedef float32 (* Float32FuncPtr )(GenericFunctionPointer , uint64 * , uint64 );
37813776typedef int64 (* Int64FuncPtr )(GenericFunctionPointer , uint64 * , uint64 );
37823777typedef int32 (* Int32FuncPtr )(GenericFunctionPointer , uint64 * , uint64 );
37833778typedef void (* VoidFuncPtr )(GenericFunctionPointer , uint64 * , uint64 );
37843779
3785- static Float64FuncPtr invokeNative_Float64 =
3780+ static volatile Float64FuncPtr invokeNative_Float64 =
37863781 (Float64FuncPtr )(uintptr_t )invokeNative ;
3787- static Float32FuncPtr invokeNative_Float32 =
3782+ static volatile Float32FuncPtr invokeNative_Float32 =
37883783 (Float32FuncPtr )(uintptr_t )invokeNative ;
3789- static Int64FuncPtr invokeNative_Int64 = (Int64FuncPtr )(uintptr_t )invokeNative ;
3790- static Int32FuncPtr invokeNative_Int32 = (Int32FuncPtr )(uintptr_t )invokeNative ;
3791- static VoidFuncPtr invokeNative_Void = (VoidFuncPtr )(uintptr_t )invokeNative ;
3784+ static volatile Int64FuncPtr invokeNative_Int64 =
3785+ (Int64FuncPtr )(uintptr_t )invokeNative ;
3786+ static volatile Int32FuncPtr invokeNative_Int32 =
3787+ (Int32FuncPtr )(uintptr_t )invokeNative ;
3788+ static volatile VoidFuncPtr invokeNative_Void =
3789+ (VoidFuncPtr )(uintptr_t )invokeNative ;
37923790
37933791#if WASM_ENABLE_SIMD != 0
37943792typedef v128 (* V128FuncPtr )(GenericFunctionPointer , uint64 * , uint64 );
0 commit comments