@@ -39,6 +39,8 @@ m3ApiRawFunction(m3_libc_memset)
3939 m3ApiGetArg (int32_t , i_value )
4040 m3ApiGetArg (int32_t , i_size )
4141
42+ m3ApiCheckMem (i_ptr , i_size );
43+
4244 u32 result = m3ApiPtrToOffset (memset (i_ptr , i_value , i_size ));
4345 m3ApiReturn (result );
4446}
@@ -51,15 +53,33 @@ m3ApiRawFunction(m3_libc_memmove)
5153 m3ApiGetArgMem (void * , i_src )
5254 m3ApiGetArg (int32_t , i_size )
5355
56+ m3ApiCheckMem (o_dst , i_size );
57+ m3ApiCheckMem (i_src , i_size );
58+
5459 u32 result = m3ApiPtrToOffset (memmove (o_dst , i_src , i_size ));
5560 m3ApiReturn (result );
5661}
5762
58- m3ApiRawFunction (m3_libc_clock )
63+ m3ApiRawFunction (m3_libc_print )
5964{
6065 m3ApiReturnType (uint32_t )
6166
62- m3ApiReturn (clock ());
67+ m3ApiGetArgMem (void * , i_ptr )
68+ m3ApiGetArg (uint32_t , i_size )
69+
70+ m3ApiCheckMem (i_ptr , i_size );
71+
72+ fwrite (i_ptr , i_size , 1 , stdout );
73+ fflush (stdout );
74+
75+ m3ApiReturn (i_size );
76+ }
77+
78+ m3ApiRawFunction (m3_libc_clock_ms )
79+ {
80+ m3ApiReturnType (uint32_t )
81+
82+ m3ApiReturn (clock () / (CLOCKS_PER_SEC /1000 ));
6383}
6484
6585static
@@ -76,33 +96,11 @@ m3ApiRawFunction(m3_spectest_dummy)
7696 m3ApiSuccess ();
7797}
7898
79- m3ApiRawFunction (m3_wasm3_raw_sum )
80- {
81- m3ApiReturnType (int64_t )
82- m3ApiGetArg (int32_t , val1 )
83- m3ApiGetArg (int32_t , val2 )
84- m3ApiGetArg (int32_t , val3 )
85- m3ApiGetArg (int32_t , val4 )
86-
87- m3ApiReturn (val1 + val2 + val3 + val4 );
88-
89- m3ApiSuccess ();
90- }
91-
92- /* TODO: implement direct native function calls (using libffi?)
93- i64 m3_wasm3_native_sum(i32 val1, i32 val2, i32 val3, i32 val4)
94- {
95- return val1 + val2 + val3 + val4;
96- }
97- */
98-
99-
10099M3Result m3_LinkSpecTest (IM3Module module )
101100{
102101 M3Result result = m3Err_none ;
103102
104103 const char * spectest = "spectest" ;
105- const char * wasm3 = "wasm3" ;
106104
107105_ (SuppressLookupFailure (m3_LinkRawFunction (module , spectest , "print" , "v()" , & m3_spectest_dummy )));
108106_ (SuppressLookupFailure (m3_LinkRawFunction (module , spectest , "print_i32" , "v(i)" , & m3_spectest_dummy )));
@@ -112,10 +110,6 @@ _ (SuppressLookupFailure (m3_LinkRawFunction (module, spectest, "print_f64",
112110_ (SuppressLookupFailure (m3_LinkRawFunction (module , spectest , "print_i32_f32" , "v(if)" , & m3_spectest_dummy )));
113111_ (SuppressLookupFailure (m3_LinkRawFunction (module , spectest , "print_i64_f64" , "v(IF)" , & m3_spectest_dummy )));
114112
115-
116- _ (SuppressLookupFailure (m3_LinkRawFunction (module , wasm3 , "raw_sum" , "I(iiii)" , & m3_wasm3_raw_sum )));
117- //_ (SuppressLookupFailure (m3_LinkCFunction (module, wasm3, "native_sum", "I(iiii)", &m3_wasm3_native_sum)));
118-
119113_catch :
120114 return result ;
121115}
@@ -127,12 +121,13 @@ M3Result m3_LinkLibC (IM3Module module)
127121
128122 const char * env = "env" ;
129123
124+ _ (SuppressLookupFailure (m3_LinkRawFunction (module , env , "_debug" , "i(*i)" , & m3_libc_print )));
130125_ (SuppressLookupFailure (m3_LinkRawFunction (module , env , "_memset" , "*(*ii)" , & m3_libc_memset )));
131126_ (SuppressLookupFailure (m3_LinkRawFunction (module , env , "_memmove" , "*(**i)" , & m3_libc_memmove )));
132127_ (SuppressLookupFailure (m3_LinkRawFunction (module , env , "_memcpy" , "*(**i)" , & m3_libc_memmove ))); // just alias of memmove
133128_ (SuppressLookupFailure (m3_LinkRawFunction (module , env , "_abort" , "v()" , & m3_libc_abort )));
134129_ (SuppressLookupFailure (m3_LinkRawFunction (module , env , "_exit" , "v(i)" , & m3_libc_exit )));
135- _ (SuppressLookupFailure (m3_LinkRawFunction (module , env , "_clock " , "i()" , & m3_libc_clock )));
130+ _ (SuppressLookupFailure (m3_LinkRawFunction (module , env , "clock_ms " , "i()" , & m3_libc_clock_ms )));
136131
137132_catch :
138133 return result ;
0 commit comments