File: installopcodes.cpp

package info (click to toggle)
openmw 0.49.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 33,992 kB
  • sloc: cpp: 372,479; xml: 2,149; sh: 1,403; python: 797; makefile: 26
file content (87 lines) | stat: -rw-r--r-- 4,493 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "installopcodes.hpp"

#include <functional>

#include "controlopcodes.hpp"
#include "genericopcodes.hpp"
#include "interpreter.hpp"
#include "localopcodes.hpp"
#include "mathopcodes.hpp"
#include "miscopcodes.hpp"

namespace Interpreter
{
    void installOpcodes(Interpreter& interpreter)
    {
        // generic
        interpreter.installSegment0<OpPushInt>(0);
        interpreter.installSegment5<OpIntToFloat>(3);
        interpreter.installSegment5<OpFloatToInt>(6);
        interpreter.installSegment5<OpNegateInt>(7);
        interpreter.installSegment5<OpNegateFloat>(8);
        interpreter.installSegment5<OpIntToFloat1>(17);
        interpreter.installSegment5<OpFloatToInt1>(18);

        // local variables, global variables & literals
        interpreter.installSegment5<OpStoreLocalShort>(0);
        interpreter.installSegment5<OpStoreLocalLong>(1);
        interpreter.installSegment5<OpStoreLocalFloat>(2);
        interpreter.installSegment5<OpFetchIntLiteral>(4);
        interpreter.installSegment5<OpFetchFloatLiteral>(5);
        interpreter.installSegment5<OpFetchLocalShort>(21);
        interpreter.installSegment5<OpFetchLocalLong>(22);
        interpreter.installSegment5<OpFetchLocalFloat>(23);
        interpreter.installSegment5<OpStoreGlobalShort>(39);
        interpreter.installSegment5<OpStoreGlobalLong>(40);
        interpreter.installSegment5<OpStoreGlobalFloat>(41);
        interpreter.installSegment5<OpFetchGlobalShort>(42);
        interpreter.installSegment5<OpFetchGlobalLong>(43);
        interpreter.installSegment5<OpFetchGlobalFloat>(44);
        interpreter.installSegment5<OpStoreMemberShort<false>>(59);
        interpreter.installSegment5<OpStoreMemberLong<false>>(60);
        interpreter.installSegment5<OpStoreMemberFloat<false>>(61);
        interpreter.installSegment5<OpFetchMemberShort<false>>(62);
        interpreter.installSegment5<OpFetchMemberLong<false>>(63);
        interpreter.installSegment5<OpFetchMemberFloat<false>>(64);
        interpreter.installSegment5<OpStoreMemberShort<true>>(65);
        interpreter.installSegment5<OpStoreMemberLong<true>>(66);
        interpreter.installSegment5<OpStoreMemberFloat<true>>(67);
        interpreter.installSegment5<OpFetchMemberShort<true>>(68);
        interpreter.installSegment5<OpFetchMemberLong<true>>(69);
        interpreter.installSegment5<OpFetchMemberFloat<true>>(70);

        // math
        interpreter.installSegment5<OpAddInt<Type_Integer>>(9);
        interpreter.installSegment5<OpAddInt<Type_Float>>(10);
        interpreter.installSegment5<OpSubInt<Type_Integer>>(11);
        interpreter.installSegment5<OpSubInt<Type_Float>>(12);
        interpreter.installSegment5<OpMulInt<Type_Integer>>(13);
        interpreter.installSegment5<OpMulInt<Type_Float>>(14);
        interpreter.installSegment5<OpDivInt<Type_Integer>>(15);
        interpreter.installSegment5<OpDivInt<Type_Float>>(16);
        interpreter.installSegment5<OpCompare<Type_Integer, std::equal_to<Type_Integer>>>(26);
        interpreter.installSegment5<OpCompare<Type_Integer, std::not_equal_to<Type_Integer>>>(27);
        interpreter.installSegment5<OpCompare<Type_Integer, std::less<Type_Integer>>>(28);
        interpreter.installSegment5<OpCompare<Type_Integer, std::less_equal<Type_Integer>>>(29);
        interpreter.installSegment5<OpCompare<Type_Integer, std::greater<Type_Integer>>>(30);
        interpreter.installSegment5<OpCompare<Type_Integer, std::greater_equal<Type_Integer>>>(31);

        interpreter.installSegment5<OpCompare<Type_Float, std::equal_to<Type_Float>>>(32);
        interpreter.installSegment5<OpCompare<Type_Float, std::not_equal_to<Type_Float>>>(33);
        interpreter.installSegment5<OpCompare<Type_Float, std::less<Type_Float>>>(34);
        interpreter.installSegment5<OpCompare<Type_Float, std::less_equal<Type_Float>>>(35);
        interpreter.installSegment5<OpCompare<Type_Float, std::greater<Type_Float>>>(36);
        interpreter.installSegment5<OpCompare<Type_Float, std::greater_equal<Type_Float>>>(37);

        // control structures
        interpreter.installSegment5<OpReturn>(20);
        interpreter.installSegment5<OpSkipZero>(24);
        interpreter.installSegment5<OpSkipNonZero>(25);
        interpreter.installSegment0<OpJumpForward>(1);
        interpreter.installSegment0<OpJumpBackward>(2);

        // misc
        interpreter.installSegment3<OpMessageBox>(0);
        interpreter.installSegment5<OpReport>(58);
    }
}