mirror of https://github.com/OpenMW/openmw.git
added first batch of opcodes
parent
d80cb3461c
commit
c6a37b2e18
@ -0,0 +1,33 @@
|
|||||||
|
#ifndef INTERPRETER_GENERICOPCODES_H_INCLUDED
|
||||||
|
#define INTERPRETER_GENERICOPCODES_H_INCLUDED
|
||||||
|
|
||||||
|
#include "opcodes.hpp"
|
||||||
|
#include "runtime.hpp"
|
||||||
|
|
||||||
|
namespace Interpreter
|
||||||
|
{
|
||||||
|
class OpPushInt : public Opcode1
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual void execute (Runtime& runtime, unsigned int arg0)
|
||||||
|
{
|
||||||
|
runtime.push (arg0);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class OpIntToFloat : public Opcode0
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual void execute (Runtime& runtime)
|
||||||
|
{
|
||||||
|
Type_Data data = runtime[0];
|
||||||
|
Type_Float floatValue = static_cast<Type_Float> (data);
|
||||||
|
runtime[0] = *reinterpret_cast<Type_Data *> (&floatValue);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,24 @@
|
|||||||
|
|
||||||
|
#include "installopcodes.hpp"
|
||||||
|
|
||||||
|
#include "interpreter.hpp"
|
||||||
|
#include "genericopcodes.hpp"
|
||||||
|
#include "localopcodes.hpp"
|
||||||
|
|
||||||
|
namespace Interpreter
|
||||||
|
{
|
||||||
|
void installOpcodes (Interpreter& interpreter)
|
||||||
|
{
|
||||||
|
// generic
|
||||||
|
interpreter.installSegment0 (0, new OpPushInt);
|
||||||
|
interpreter.installSegment5 (3, new OpIntToFloat);
|
||||||
|
|
||||||
|
// local variables
|
||||||
|
interpreter.installSegment5 (0, new OpStoreLocalShort);
|
||||||
|
interpreter.installSegment5 (1, new OpStoreLocalLong);
|
||||||
|
interpreter.installSegment5 (2, new OpStoreLocalFloat);
|
||||||
|
interpreter.installSegment5 (4, new OpFetchIntLiteral);
|
||||||
|
interpreter.installSegment5 (5, new OpFetchFloatLiteral);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
|||||||
|
#ifndef INTERPRETER_INSTALLOPCODES_H_INCLUDED
|
||||||
|
#define INTERPRETER_INSTALLOPCODES_H_INCLUDED
|
||||||
|
|
||||||
|
namespace Interpreter
|
||||||
|
{
|
||||||
|
class Interpreter;
|
||||||
|
|
||||||
|
void installOpcodes (Interpreter& interpreter);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,82 @@
|
|||||||
|
#ifndef INTERPRETER_LOCALOPCODES_H_INCLUDED
|
||||||
|
#define INTERPRETER_LOCALOPCODES_H_INCLUDED
|
||||||
|
|
||||||
|
#include "opcodes.hpp"
|
||||||
|
#include "runtime.hpp"
|
||||||
|
#include "context.hpp"
|
||||||
|
|
||||||
|
namespace Interpreter
|
||||||
|
{
|
||||||
|
class OpStoreLocalShort : public Opcode0
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual void execute (Runtime& runtime)
|
||||||
|
{
|
||||||
|
Type_Data data = runtime[0];
|
||||||
|
int index = runtime[1];
|
||||||
|
|
||||||
|
runtime.getContext().setLocalShort (index, *reinterpret_cast<int *> (&data));
|
||||||
|
|
||||||
|
runtime.pop();
|
||||||
|
runtime.pop();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class OpStoreLocalLong : public Opcode0
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual void execute (Runtime& runtime)
|
||||||
|
{
|
||||||
|
Type_Data data = runtime[0];
|
||||||
|
int index = runtime[1];
|
||||||
|
|
||||||
|
runtime.getContext().setLocalLong (index, *reinterpret_cast<int *> (&data));
|
||||||
|
|
||||||
|
runtime.pop();
|
||||||
|
runtime.pop();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class OpStoreLocalFloat : public Opcode0
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual void execute (Runtime& runtime)
|
||||||
|
{
|
||||||
|
Type_Data data = runtime[0];
|
||||||
|
int index = runtime[1];
|
||||||
|
|
||||||
|
runtime.getContext().setLocalFloat (index, *reinterpret_cast<float *> (&data));
|
||||||
|
|
||||||
|
runtime.pop();
|
||||||
|
runtime.pop();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class OpFetchIntLiteral : public Opcode0
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual void execute (Runtime& runtime)
|
||||||
|
{
|
||||||
|
int intValue = runtime.getIntegerLiteral (runtime[0]);
|
||||||
|
runtime[0] = intValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class OpFetchFloatLiteral : public Opcode0
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual void execute (Runtime& runtime)
|
||||||
|
{
|
||||||
|
float floatValue = runtime.getFloatLiteral (runtime[0]);
|
||||||
|
runtime[0] = *reinterpret_cast<Type_Data *> (&floatValue);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue