OSDN Git Service

cd66376500df9d8aa6494d3656f20c62d57c2b9b
[heavyosecpu/HeavyOSECPU.git] / jitc.c
1 #include "osecpu.h"\r
2 #include "jitc.h"\r
3 \r
4 //\r
5 // JITC common functions (architecture not dependent)\r
6 //\r
7 \r
8 void errorHandler(HOSECPU_RuntimeEnvironment *r)\r
9 {\r
10         puts("security error! abort...");\r
11         printf("debugInfo0=%d, debugInfo1=%d\n", r->debugInfo0, r->debugInfo1);\r
12 #if (USE_DEBUGGER != 0)\r
13         dbgrMain(r);\r
14 #endif\r
15         exit(1);\r
16 }\r
17 \r
18 int jitCompCmdLen(const unsigned char *src)\r
19 {\r
20         //BCode命令長を取得する\r
21         int i = 1;\r
22         \r
23         if (0x01 <= *src && *src < 0x04){\r
24                 // LB, LIMM, PLIMM\r
25                 i = 6;\r
26         } else if (*src == 0x04){\r
27                 // CND\r
28                 i = 2;\r
29         } else if (0x08 <= *src && *src < 0x0d){\r
30                 // LMEM, SMEM, ??, ??, ??\r
31                 i = 8 + src[7] * 4;\r
32         } else if (0x0e <= *src && *src < 0x10){\r
33                 // PADD, PDIF\r
34                 i = 8;\r
35         } else if (0x10 <= *src && *src < 0x1c){\r
36                 // CP/OR, XOR, AND, ADD, SUB, MUL, SHL, SAR, DIV, MOD,\r
37                 i = 4;\r
38         } else if (0x1c <= *src && *src < 0x1f){\r
39                 // ??, ??, PCP\r
40                 i = 3;\r
41         } else if (*src == 0x1f){\r
42                 // ??\r
43                 i = 11;\r
44         } else if(0x20 <= *src && *src < 0x2e){\r
45                 // CMPE, CMPNE, CMPL, CMPGE, CMPLE, CMPG, TSTZ, TSTNZ,\r
46                 // PCMPE, PCMPNE, PCMPL, PCMPGE, PCMPLE, PCMPG,\r
47                 i = 4;\r
48         } else if (*src == 0x2f){\r
49                 // ??\r
50                 i = 4 + src[1];\r
51         } else if (0x30 <= *src && *src < 0x34){\r
52                 // ??, ??, MALLOC, ??\r
53                 i = 4;\r
54         } else if (0x3c <= *src && *src < 0x3e){\r
55                 // ??, ??\r
56                 i = 7;\r
57         } else if (*src == 0xfe){\r
58                 // REMARK\r
59                 i = 2 + src[1];\r
60         }\r
61 \r
62         return i;\r
63 }\r
64 \r
65 void PRegCopy(HOSECPU_PointerRegisterEntry *dst, HOSECPU_PointerRegisterEntry *src)\r
66 {\r
67         // なんか直接代入するとMacではアライメントエラーで落ちるのです...\r
68         // *dst = *src;\r
69 \r
70         dst->p = src->p;\r
71         dst->typ = src->typ;\r
72         dst->p0 = src->p0;\r
73         dst->p1 = src->p1;\r
74         dst->liveSign = src->liveSign;\r
75         dst->pls = src->pls;\r
76         dst->flags = src->flags;\r
77         dst->dummy = src->dummy;\r
78 }\r
79 \r
80 \r
81 \r
82 \r