37 |
|
|
38 |
|
|
39 |
|
/* NativeOp instruction format: |
40 |
< |
+------------+--------------------------+--+----------+------------+ |
41 |
< |
| 6 | |FN| OP | 2 | |
42 |
< |
+------------+--------------------------+--+----------+------------+ |
43 |
< |
0 5 |6 19 20 21 25 26 31 |
40 |
> |
+------------+-------------------------+--+-----------+------------+ |
41 |
> |
| 6 | |FN| OP | 2 | |
42 |
> |
+------------+-------------------------+--+-----------+------------+ |
43 |
> |
0 5 |6 18 19 20 25 26 31 |
44 |
|
*/ |
45 |
|
|
46 |
< |
#define POWERPC_NATIVE_OP(LR, OP) \ |
47 |
< |
(POWERPC_EMUL_OP | ((LR) << 11) | (((uint32)OP) << 6) | 2) |
46 |
> |
#define POWERPC_NATIVE_OP(FN, OP) \ |
47 |
> |
(POWERPC_EMUL_OP | ((FN) << 12) | (((uint32)OP) << 6) | 2) |
48 |
|
|
49 |
|
/* |
50 |
|
* Return the fake PowerPC opcode to handle specified native code |
55 |
|
{ |
56 |
|
uint32 opcode; |
57 |
|
switch (selector) { |
58 |
– |
case NATIVE_DISABLE_INTERRUPT: |
59 |
– |
case NATIVE_ENABLE_INTERRUPT: |
58 |
|
case NATIVE_CHECK_LOAD_INVOC: |
59 |
|
opcode = POWERPC_NATIVE_OP(0, selector); |
60 |
|
break; |
149 |
|
assert(xlm_index != -1 && check_load_invoc_index != -1); |
150 |
|
|
151 |
|
uint32 check_load_invoc_opcode = NativeOpcode(NATIVE_CHECK_LOAD_INVOC); |
152 |
< |
uintptr base; |
152 |
> |
uint32 base; |
153 |
|
|
154 |
|
// GetResource() |
155 |
|
get_resource_func = base = SheepMem::Reserve(get_resource_template_size); |
215 |
|
native_op[NATIVE_R_GET_RESOURCE].func = r_get_resource_func; |
216 |
|
#endif |
217 |
|
#else |
218 |
< |
#if defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) |
218 |
> |
#if defined(__linux__) || defined(__NetBSD__) || (defined(__APPLE__) && defined(__MACH__)) |
219 |
|
#define DEFINE_NATIVE_OP(ID, FUNC) do { \ |
220 |
|
uintptr base = SheepMem::Reserve(8); \ |
221 |
|
WriteMacInt32(base + 0, (uint32)FUNC); \ |