220 |
#define ppc_alu_reg_imm(inst, opc, dreg, sreg, imm) \ |
#define ppc_alu_reg_imm(inst, opc, dreg, sreg, imm) \ |
221 |
do {\ |
do {\ |
222 |
int __value = (int)(imm);\ |
int __value = (int)(imm);\ |
223 |
if(__value >= -0x8000 && __value <= 0xFFFF) \ |
if(__value >= -0x8000 && __value <= 0x7FFF) \ |
224 |
{\ |
{\ |
225 |
*(inst)++ = ((((unsigned int)(opc))<< 26) \ |
*(inst)++ = ((((unsigned int)(opc))<< 26) \ |
226 |
| (((unsigned int)(dreg)) << 21) \ |
| (((unsigned int)(dreg)) << 21) \ |
433 |
*/ |
*/ |
434 |
#define ppc_jump(inst, target) \ |
#define ppc_jump(inst, target) \ |
435 |
do { \ |
do { \ |
436 |
int __ld_offset = (ppc_inst_ptr)(target) - ((inst) + 1);\ |
int __ld_offset = (target == 0) ? 0 : \ |
437 |
if(__ld_offset >= -0x8000 && __ld_offset <= 0xFFFF)\ |
(ppc_inst_ptr)(target) - ((inst) + 1);\ |
438 |
|
if(__ld_offset >= -0x8000 && __ld_offset <= 0x7FFF)\ |
439 |
{\ |
{\ |
440 |
*(inst)++ = ((18 << 26) | \ |
*(inst)++ = ((18 << 26) | \ |
441 |
(((unsigned int)__ld_offset) << 2));\ |
((((unsigned int)__ld_offset) & 0xFFFF) << 2));\ |
442 |
}\ |
}\ |
443 |
else\ |
else\ |
444 |
{\ |
{\ |
466 |
*/ |
*/ |
467 |
#define ppc_branch(inst,cond,target) \ |
#define ppc_branch(inst,cond,target) \ |
468 |
do { \ |
do { \ |
469 |
TODO_trap(inst);\ |
int __ld_offset = (target == 0 ) ? 0 : \ |
470 |
|
(ppc_inst_ptr)(target) - ((inst) + 1);\ |
471 |
|
if(__ld_offset >= -0x8000 && __ld_offset <= 0x7FFF)\ |
472 |
|
{\ |
473 |
|
*(inst)++ = ((16 << 26) \ |
474 |
|
| (((unsigned int)(cond)) << 16) \ |
475 |
|
| ((((unsigned int)__ld_offset) & 0xFFFF) << 2));\ |
476 |
|
}\ |
477 |
|
else\ |
478 |
|
{\ |
479 |
|
TODO_trap(inst);\ |
480 |
|
}\ |
481 |
} while (0) |
} while (0) |
482 |
|
|
483 |
/* |
/* |
485 |
*/ |
*/ |
486 |
#define ppc_patch(patch, inst) \ |
#define ppc_patch(patch, inst) \ |
487 |
do {\ |
do {\ |
488 |
TODO_trap(inst);\ |
ppc_inst_ptr __patch = (ppc_inst_ptr)(patch);\ |
489 |
|
int __ld_offset = (inst) - (__patch);\ |
490 |
|
if(__ld_offset < -0x8000 && __ld_offset > 0x7FFF)\ |
491 |
|
{\ |
492 |
|
TODO_trap(inst);\ |
493 |
|
}\ |
494 |
|
if(((*__patch) & (63 << 26)) == (16 << 26)) \ |
495 |
|
{\ |
496 |
|
(*__patch) = (*__patch) & ((~0xFFFF) | 3);\ |
497 |
|
(*__patch) = ((*__patch) | \ |
498 |
|
((((unsigned int)__ld_offset) & 0xFFFF) << 2));\ |
499 |
|
}\ |
500 |
|
else if(((*__patch) & (63 << 26)) == (18 << 26))\ |
501 |
|
{\ |
502 |
|
(*__patch) = (*__patch) & ((~0x3FFFFFF) | 3);\ |
503 |
|
(*__patch) = ((*__patch) | \ |
504 |
|
((((unsigned int)__ld_offset) & 0xFFFFFF) << 2));\ |
505 |
|
}\ |
506 |
} while(0); |
} while(0); |
507 |
|
|
508 |
/* |
/* |
593 |
#define ppc_alu_addc_imm(inst, dreg, sreg, imm) \ |
#define ppc_alu_addc_imm(inst, dreg, sreg, imm) \ |
594 |
do {\ |
do {\ |
595 |
int __value = (int)(imm);\ |
int __value = (int)(imm);\ |
596 |
if(__value >= -0x8000 && __value <= 0xFFFF) \ |
if(__value >= -0x8000 && __value <= 0x7FFF) \ |
597 |
{\ |
{\ |
598 |
*(inst)++ = ((21 << 26) \ |
*(inst)++ = ((21 << 26) \ |
599 |
| (((unsigned int)(dreg)) << 21) \ |
| (((unsigned int)(dreg)) << 21) \ |