@@ -16,15 +16,15 @@ inline char* global = nullptr;
1616
1717struct Interpreter
1818{
19- char * stack;
20- char * stackFrameStart;
21- char * stackFrameEnd;
19+ volatile char * stack;
20+ volatile char * stackFrameStart;
21+ volatile char * stackFrameEnd;
2222 int threadID;
2323 DCCallVM* dcCallVM;
2424
2525 Interpreter (size_t stackSize)
2626 {
27- stack = new char [stackSize];
27+ stack = new volatile char [stackSize];
2828 stackFrameStart = stack;
2929 stackFrameEnd = stack;
3030 dcCallVM = CreateDynCallVM ();
@@ -121,7 +121,7 @@ struct Interpreter
121121 threadID = CurrentThreadID ();
122122 }
123123
124- void * Interpret (SpiteIR::IR* ir)
124+ volatile void * Interpret (SpiteIR::IR* ir)
125125 {
126126 SpiteIR::Function* entry = ir->entry ;
127127 Initialize (ir, entry->parent );
@@ -169,23 +169,23 @@ struct Interpreter
169169 {
170170 SpiteIR::Operand& param = params->at (i);
171171 SpiteIR::Argument* arg = args.at (i);
172- CopyValue (param.reg , arg->value .type , stackFrameStart + offset, frame);
172+ CopyValue (param.reg , arg->value .type , ( void *)( stackFrameStart + offset) , frame);
173173 offset += param.type ->size ;
174174 }
175175 }
176176
177- void * InterpretFunction (SpiteIR::Function* func, size_t start, eastl::vector<SpiteIR::Operand>* params = nullptr )
177+ volatile void * InterpretFunction (SpiteIR::Function* func, size_t start, eastl::vector<SpiteIR::Operand>* params = nullptr )
178178 {
179179 #ifdef _INTERPRETER_EXTS
180180 RunFunctionExtensions (func, params, this );
181181 #endif
182182
183- char * prevStackStart = stackFrameStart;
184- char * prevStackEnd = stackFrameEnd;
183+ volatile char * prevStackStart = stackFrameStart;
184+ volatile char * prevStackEnd = stackFrameEnd;
185185 stackFrameStart = stackFrameStart + start;
186186 InterpretAllocations (func->block ->allocations );
187187
188- if (params) MoveParams (params, func->arguments , prevStackStart);
188+ if (params) MoveParams (params, func->arguments , ( char *) prevStackStart);
189189
190190 InterpretBlock (func->block );
191191 stackFrameStart = prevStackStart;
@@ -204,8 +204,8 @@ struct Interpreter
204204 RunFunctionExtensions (func, ¶ms, this );
205205 #endif
206206
207- char * prevStackStart = stackFrameStart;
208- char * prevStackEnd = stackFrameEnd;
207+ volatile char * prevStackStart = stackFrameStart;
208+ volatile char * prevStackEnd = stackFrameEnd;
209209 stackFrameStart = stackFrameEnd;
210210 InterpretAllocations (func->block ->allocations );
211211
@@ -221,18 +221,18 @@ struct Interpreter
221221 InterpretBlock (func->block );
222222 stackFrameStart = prevStackStart;
223223 stackFrameEnd = prevStackEnd;
224- return stackFrameStart;
224+ return ( void *) stackFrameStart;
225225 }
226226
227- inline void CopyValue (size_t src, SpiteIR::Type* type, void * dst, char * frame)
227+ inline void CopyValue (size_t src, SpiteIR::Type* type, volatile void * dst, volatile char * frame)
228228 {
229- memcpy (dst, frame + src, type->size );
229+ memcpy (( void *) dst, ( void *)( frame + src) , type->size );
230230 }
231231
232- inline void CopyRegValue (SpiteIR::Operand& src, SpiteIR::Operand& dst, char * frame)
232+ inline void CopyRegValue (SpiteIR::Operand& src, SpiteIR::Operand& dst, volatile char * frame)
233233 {
234- void * dstPtr = stackFrameStart + dst.reg ;
235- memcpy (dstPtr, frame + src.reg , dst.type ->size );
234+ void * dstPtr = ( void *)( stackFrameStart + dst.reg ) ;
235+ memcpy (dstPtr, ( void *)( frame + src.reg ) , dst.type ->size );
236236 }
237237
238238 inline void InterpretInstruction (SpiteIR::Instruction& inst, SpiteIR::Label*& label)
@@ -385,7 +385,7 @@ struct Interpreter
385385 StoreOperand (src, stackFrameStart + storeInst.store .dst .reg );
386386 }
387387
388- inline void StoreOperand (SpiteIR::Operand& src, void * dst)
388+ inline void StoreOperand (SpiteIR::Operand& src, volatile void * dst)
389389 {
390390 switch (src.kind )
391391 {
@@ -477,7 +477,7 @@ struct Interpreter
477477 inline void InterpretStorePtr (SpiteIR::Instruction& storeInst)
478478 {
479479 char * ptr = *(char **)(void *)(stackFrameStart + storeInst.store .dst .reg );
480- char * src = stackFrameStart + storeInst.store .src .reg ;
480+ char * src = ( char *)( stackFrameStart + storeInst.store .src .reg ) ;
481481 memcpy (ptr, src, storeInst.store .src .type ->size );
482482 }
483483
@@ -490,14 +490,14 @@ struct Interpreter
490490
491491 inline void InterpretReference (SpiteIR::Instruction& storeInst)
492492 {
493- void * ref = ( stackFrameStart + storeInst.store .src .reg ) ;
493+ volatile void * ref = stackFrameStart + storeInst.store .src .reg ;
494494 *(size_t *)(stackFrameStart + storeInst.store .dst .reg ) = (size_t )ref;
495495 }
496496
497497 inline void InterpretDereference (SpiteIR::Instruction& storeInst)
498498 {
499499 char * ptr = *(char **)(void *)(stackFrameStart + storeInst.store .src .reg );
500- char * dst = stackFrameStart + storeInst.store .dst .reg ;
500+ char * dst = ( char *)( stackFrameStart + storeInst.store .dst .reg ) ;
501501 memcpy (dst, ptr, storeInst.store .dst .type ->size );
502502 }
503503
@@ -723,7 +723,7 @@ struct Interpreter
723723 paramPtrs.push_back ((void *)(stackFrameStart + param.reg ));
724724 }
725725
726- CallExternalFunction (func, paramPtrs, stackFrameStart + dst, dcCallVM, this );
726+ CallExternalFunction (func, paramPtrs, ( char *)( stackFrameStart + dst) , dcCallVM, this );
727727 }
728728
729729 inline void InterpretCall (SpiteIR::Instruction& callInst)
0 commit comments