@@ -111,6 +111,7 @@ void CForwardCallbackJIT::naked_main()
111
111
}
112
112
113
113
// setup meta globals
114
+ mov (dword_ptr[globals + mg_mres], MRES_UNSET);
114
115
mov (dword_ptr[globals + mg_status], MRES_UNSET);
115
116
mov (dword_ptr[globals + mg_esp_save], esp);
116
117
@@ -140,21 +141,10 @@ void CForwardCallbackJIT::naked_main()
140
141
jecxz (go_next_plugin);
141
142
jnz (go_next_plugin);
142
143
143
- if (plug == m_jitdata->plugins ->front ()) { // init meta globals
144
- xor_ (eax, eax);
145
- mov (dword_ptr[globals + mg_mres], MRES_IGNORED);
146
- mov (dword_ptr[globals + mg_prev_mres], eax); // MRES_UNSET
147
- mov (dword_ptr[globals + mg_status], eax); // NULL
148
-
149
- // FIXME: in some cases causes a crash
150
- // mov(dword_ptr[globals + mg_mres], MRES_IGNORED);
151
- // mov(dword_ptr[globals + mg_prev_mres], MRES_UNSET);
152
- }
153
- else {
154
- mov (eax, dword_ptr[globals + mg_mres]);
155
- mov (dword_ptr[globals + mg_mres], MRES_IGNORED);
156
- mov (dword_ptr[globals + mg_prev_mres], eax);
157
- }
144
+ // update meta globals
145
+ mov (eax, dword_ptr[globals + mg_mres]);
146
+ mov (dword_ptr[globals + mg_mres], MRES_IGNORED);
147
+ mov (dword_ptr[globals + mg_prev_mres], eax);
158
148
159
149
call_func (ecx);
160
150
@@ -241,21 +231,10 @@ void CForwardCallbackJIT::naked_main()
241
231
jecxz (go_next_plugin);
242
232
jnz (go_next_plugin);
243
233
244
- if (plug == m_jitdata->plugins ->front ()) { // init meta globals
245
- xor_ (eax, eax);
246
- mov (dword_ptr[globals + mg_mres], MRES_IGNORED);
247
- mov (dword_ptr[globals + mg_prev_mres], eax); // MRES_UNSET
248
- mov (dword_ptr[globals + mg_status], eax); // NULL
249
-
250
- // FIXME: in some cases causes a crash
251
- // mov(dword_ptr[globals + mg_mres], MRES_IGNORED);
252
- // mov(dword_ptr[globals + mg_prev_mres], MRES_UNSET);
253
- }
254
- else {
255
- mov (eax, dword_ptr[globals + mg_mres]);
256
- mov (dword_ptr[globals + mg_mres], MRES_IGNORED);
257
- mov (dword_ptr[globals + mg_prev_mres], eax);
258
- }
234
+ // update meta globals
235
+ mov (eax, dword_ptr[globals + mg_mres]);
236
+ mov (dword_ptr[globals + mg_mres], MRES_IGNORED);
237
+ mov (dword_ptr[globals + mg_prev_mres], eax);
259
238
260
239
call_func (ecx);
261
240
@@ -289,12 +268,6 @@ void CForwardCallbackJIT::naked_main()
289
268
call_func (ecx);
290
269
}
291
270
292
- // restore meta globals
293
- movaps (xmm0, xmmword_ptr[esp + mg_backup + sizeof (int ) * 2 ]);
294
- movq (xmm1, qword_ptr[esp + mg_backup]);
295
- movaps (xmmword_ptr[globals], xmm0);
296
- movq (qword_ptr[globals + xmmreg_size], xmm1);
297
-
298
271
// setup return value and override it if needed
299
272
if (m_jitdata->rettype == rt_integer) {
300
273
mov (eax, dword_ptr[esp + orig_ret]);
@@ -308,6 +281,12 @@ void CForwardCallbackJIT::naked_main()
308
281
fld (dword_ptr[eax]);
309
282
}
310
283
284
+ // restore meta globals
285
+ movaps (xmm0, xmmword_ptr[esp + mg_backup + sizeof (int ) * 2 ]);
286
+ movq (xmm1, qword_ptr[esp + mg_backup]);
287
+ movaps (xmmword_ptr[globals], xmm0);
288
+ movq (qword_ptr[globals + xmmreg_size], xmm1);
289
+
311
290
// epilogue
312
291
mov (esp, ebp);
313
292
pop (ebp);
0 commit comments