@@ -39,6 +39,8 @@ m3ApiRawFunction(m3_libc_memset)
39
39
m3ApiGetArg (int32_t , i_value )
40
40
m3ApiGetArg (int32_t , i_size )
41
41
42
+ m3ApiCheckMem (i_ptr , i_size );
43
+
42
44
u32 result = m3ApiPtrToOffset (memset (i_ptr , i_value , i_size ));
43
45
m3ApiReturn (result );
44
46
}
@@ -51,15 +53,33 @@ m3ApiRawFunction(m3_libc_memmove)
51
53
m3ApiGetArgMem (void * , i_src )
52
54
m3ApiGetArg (int32_t , i_size )
53
55
56
+ m3ApiCheckMem (o_dst , i_size );
57
+ m3ApiCheckMem (i_src , i_size );
58
+
54
59
u32 result = m3ApiPtrToOffset (memmove (o_dst , i_src , i_size ));
55
60
m3ApiReturn (result );
56
61
}
57
62
58
- m3ApiRawFunction (m3_libc_clock )
63
+ m3ApiRawFunction (m3_libc_print )
59
64
{
60
65
m3ApiReturnType (uint32_t )
61
66
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 ));
63
83
}
64
84
65
85
static
@@ -76,33 +96,11 @@ m3ApiRawFunction(m3_spectest_dummy)
76
96
m3ApiSuccess ();
77
97
}
78
98
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
-
100
99
M3Result m3_LinkSpecTest (IM3Module module )
101
100
{
102
101
M3Result result = m3Err_none ;
103
102
104
103
const char * spectest = "spectest" ;
105
- const char * wasm3 = "wasm3" ;
106
104
107
105
_ (SuppressLookupFailure (m3_LinkRawFunction (module , spectest , "print" , "v()" , & m3_spectest_dummy )));
108
106
_ (SuppressLookupFailure (m3_LinkRawFunction (module , spectest , "print_i32" , "v(i)" , & m3_spectest_dummy )));
@@ -112,10 +110,6 @@ _ (SuppressLookupFailure (m3_LinkRawFunction (module, spectest, "print_f64",
112
110
_ (SuppressLookupFailure (m3_LinkRawFunction (module , spectest , "print_i32_f32" , "v(if)" , & m3_spectest_dummy )));
113
111
_ (SuppressLookupFailure (m3_LinkRawFunction (module , spectest , "print_i64_f64" , "v(IF)" , & m3_spectest_dummy )));
114
112
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
-
119
113
_catch :
120
114
return result ;
121
115
}
@@ -127,12 +121,13 @@ M3Result m3_LinkLibC (IM3Module module)
127
121
128
122
const char * env = "env" ;
129
123
124
+ _ (SuppressLookupFailure (m3_LinkRawFunction (module , env , "_debug" , "i(*i)" , & m3_libc_print )));
130
125
_ (SuppressLookupFailure (m3_LinkRawFunction (module , env , "_memset" , "*(*ii)" , & m3_libc_memset )));
131
126
_ (SuppressLookupFailure (m3_LinkRawFunction (module , env , "_memmove" , "*(**i)" , & m3_libc_memmove )));
132
127
_ (SuppressLookupFailure (m3_LinkRawFunction (module , env , "_memcpy" , "*(**i)" , & m3_libc_memmove ))); // just alias of memmove
133
128
_ (SuppressLookupFailure (m3_LinkRawFunction (module , env , "_abort" , "v()" , & m3_libc_abort )));
134
129
_ (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 )));
136
131
137
132
_catch :
138
133
return result ;
0 commit comments