141 |
#define IL_MEMCMP(dst,src,len) (ILMemCmp((dst), (src), (len))) |
#define IL_MEMCMP(dst,src,len) (ILMemCmp((dst), (src), (len))) |
142 |
#endif |
#endif |
143 |
|
|
144 |
|
/* |
145 |
|
* Defining macros to declare variables in the interpreter loop volatile. |
146 |
|
* This is done to fix problems with gcc's optimized code. |
147 |
|
*/ |
148 |
|
#ifdef __GNUC__ |
149 |
|
#if (__GNUC__ == 4) && defined(CVM_X86) |
150 |
|
#define IL_PC_VOLATILE volatile |
151 |
|
#define IL_STACKTOP_VOLATILE volatile |
152 |
|
#define IL_FRAME_VOLATILE volatile |
153 |
|
#define IL_STACKMAX_VOLATILE volatile |
154 |
|
#define IL_METHOD_VOLATILE volatile |
155 |
|
#define IL_METHODTOCALL_VOLATILE volatile |
156 |
|
#define IL_CALLFRAME_VOLATILE volatile |
157 |
|
#define IL_TEMPPTR_VOLATILE volatile |
158 |
|
#endif |
159 |
|
#if (__GNUC__ == 4) && defined(CVM_X86_64) |
160 |
|
#define IL_PC_VOLATILE volatile |
161 |
|
#define IL_STACKTOP_VOLATILE volatile |
162 |
|
#define IL_FRAME_VOLATILE volatile |
163 |
|
#define IL_STACKMAX_VOLATILE volatile |
164 |
|
#define IL_METHOD_VOLATILE volatile |
165 |
|
#define IL_METHODTOCALL_VOLATILE volatile |
166 |
|
#define IL_CALLFRAME_VOLATILE volatile |
167 |
|
#define IL_TEMPPTR_VOLATILE volatile |
168 |
|
#endif |
169 |
|
#endif |
170 |
|
#ifndef IL_PC_VOLATILE |
171 |
|
#define IL_PC_VOLATILE |
172 |
|
#endif |
173 |
|
#ifndef IL_STACKTOP_VOLATILE |
174 |
|
#define IL_STACKTOP_VOLATILE |
175 |
|
#endif |
176 |
|
#ifndef IL_FRAME_VOLATILE |
177 |
|
#define IL_FRAME_VOLATILE |
178 |
|
#endif |
179 |
|
#ifndef IL_STACKMAX_VOLATILE |
180 |
|
#define IL_STACKMAX_VOLATILE |
181 |
|
#endif |
182 |
|
#ifndef IL_METHOD_VOLATILE |
183 |
|
#define IL_METHOD_VOLATILE |
184 |
|
#endif |
185 |
|
#ifndef IL_METHODTOCALL_VOLATILE |
186 |
|
#define IL_METHODTOCALL_VOLATILE |
187 |
|
#endif |
188 |
|
#ifndef IL_CALLFRAME_VOLATILE |
189 |
|
#define IL_CALLFRAME_VOLATILE |
190 |
|
#endif |
191 |
|
#ifndef IL_TEMPPTR_VOLATILE |
192 |
|
#define IL_TEMPPTR_VOLATILE |
193 |
|
#endif |
194 |
|
|
195 |
#if defined(IL_USE_INTERRUPT_BASED_X) |
#if defined(IL_USE_INTERRUPT_BASED_X) |
196 |
#if defined(IL_INTERRUPT_HAVE_X86_CONTEXT) && defined(REGISTER_ASM_X86) |
#if defined(IL_INTERRUPT_HAVE_X86_CONTEXT) && defined(REGISTER_ASM_X86) |
197 |
/* If the interrupt subsystem can provide us the x86 registers at the |
/* If the interrupt subsystem can provide us the x86 registers at the |
569 |
|
|
570 |
int _ILCVMInterpreter(ILExecThread *thread) |
int _ILCVMInterpreter(ILExecThread *thread) |
571 |
{ |
{ |
572 |
REGISTER_ASM_PC(unsigned char *volatile pc); |
REGISTER_ASM_PC(unsigned char *IL_PC_VOLATILE pc); |
573 |
REGISTER_ASM_STACK(CVMWord *stacktop); |
REGISTER_ASM_STACK(CVMWord *IL_STACKTOP_VOLATILE stacktop); |
574 |
REGISTER_ASM_FRAME(CVMWord *frame); |
REGISTER_ASM_FRAME(CVMWord *IL_FRAME_VOLATILE frame); |
575 |
int divResult; |
int divResult; |
576 |
CVMWord *volatile stackmax; |
CVMWord *IL_STACKMAX_VOLATILE stackmax; |
577 |
ILMethod *volatile method; |
ILMethod *IL_METHOD_VOLATILE method; |
578 |
void *nativeArgs[CVM_MAX_NATIVE_ARGS + 1]; |
void *nativeArgs[CVM_MAX_NATIVE_ARGS + 1]; |
579 |
|
|
580 |
/* Define local variables that are used by the instruction categories */ |
/* Define local variables that are used by the instruction categories */ |