Revision 0db1b20e
b/target-ppc/translate.c | ||
---|---|---|
478 | 478 |
PPC_DCRUX = 0x0000040000000000ULL, |
479 | 479 |
/* New floating-point extensions (PowerPC 2.0x) */ |
480 | 480 |
PPC_FLOAT_EXT = 0x0000080000000000ULL, |
481 |
/* New wait instruction (PowerPC 2.0x) */ |
|
482 |
PPC_WAIT = 0x0000100000000000ULL, |
|
481 | 483 |
}; |
482 | 484 |
|
483 | 485 |
/*****************************************************************************/ |
... | ... | |
2463 | 2465 |
|
2464 | 2466 |
/*** Memory synchronisation ***/ |
2465 | 2467 |
/* eieio */ |
2466 |
GEN_HANDLER(eieio, 0x1F, 0x16, 0x1A, 0x03FF0801, PPC_MEM_EIEIO)
|
|
2468 |
GEN_HANDLER(eieio, 0x1F, 0x16, 0x1A, 0x03FFF801, PPC_MEM_EIEIO)
|
|
2467 | 2469 |
{ |
2468 | 2470 |
} |
2469 | 2471 |
|
2470 | 2472 |
/* isync */ |
2471 |
GEN_HANDLER(isync, 0x13, 0x16, 0x04, 0x03FF0801, PPC_MEM)
|
|
2473 |
GEN_HANDLER(isync, 0x13, 0x16, 0x04, 0x03FFF801, PPC_MEM)
|
|
2472 | 2474 |
{ |
2473 | 2475 |
GEN_STOP(ctx); |
2474 | 2476 |
} |
... | ... | |
2610 | 2612 |
#endif /* defined(TARGET_PPC64) */ |
2611 | 2613 |
|
2612 | 2614 |
/* sync */ |
2613 |
GEN_HANDLER(sync, 0x1F, 0x16, 0x12, 0x03CF0801, PPC_MEM_SYNC)
|
|
2615 |
GEN_HANDLER(sync, 0x1F, 0x16, 0x12, 0x03BFF801, PPC_MEM_SYNC)
|
|
2614 | 2616 |
{ |
2615 | 2617 |
} |
2616 | 2618 |
|
2619 |
/* wait */ |
|
2620 |
GEN_HANDLER(wait, 0x1F, 0x1E, 0x01, 0x03FFF801, PPC_WAIT) |
|
2621 |
{ |
|
2622 |
/* Stop translation, as the CPU is supposed to sleep from now */ |
|
2623 |
/* XXX: TODO: handle this idle CPU case */ |
|
2624 |
GEN_STOP(ctx); |
|
2625 |
} |
|
2626 |
|
|
2617 | 2627 |
/*** Floating-point load ***/ |
2618 | 2628 |
#define GEN_LDF(width, opc, type) \ |
2619 | 2629 |
GEN_HANDLER(l##width, opc, 0xFF, 0xFF, 0x00000000, type) \ |
... | ... | |
3328 | 3338 |
* We just have to flush tb while invalidating instruction cache lines... |
3329 | 3339 |
*/ |
3330 | 3340 |
/* dcbf */ |
3331 |
GEN_HANDLER(dcbf, 0x1F, 0x16, 0x02, 0x03E00001, PPC_CACHE)
|
|
3341 |
GEN_HANDLER(dcbf, 0x1F, 0x16, 0x02, 0x03C00001, PPC_CACHE)
|
|
3332 | 3342 |
{ |
3333 | 3343 |
gen_addr_reg_index(ctx); |
3334 | 3344 |
op_ldst(lbz); |
... | ... | |
3360 | 3370 |
} |
3361 | 3371 |
|
3362 | 3372 |
/* dcbt */ |
3363 |
GEN_HANDLER(dcbt, 0x1F, 0x16, 0x08, 0x03E00001, PPC_CACHE)
|
|
3373 |
GEN_HANDLER(dcbt, 0x1F, 0x16, 0x08, 0x02000001, PPC_CACHE)
|
|
3364 | 3374 |
{ |
3375 |
/* interpreted as no-op */ |
|
3365 | 3376 |
/* XXX: specification say this is treated as a load by the MMU |
3366 | 3377 |
* but does not generate any exception |
3367 | 3378 |
*/ |
3368 | 3379 |
} |
3369 | 3380 |
|
3370 | 3381 |
/* dcbtst */ |
3371 |
GEN_HANDLER(dcbtst, 0x1F, 0x16, 0x07, 0x03E00001, PPC_CACHE)
|
|
3382 |
GEN_HANDLER(dcbtst, 0x1F, 0x16, 0x07, 0x02000001, PPC_CACHE)
|
|
3372 | 3383 |
{ |
3384 |
/* interpreted as no-op */ |
|
3373 | 3385 |
/* XXX: specification say this is treated as a load by the MMU |
3374 | 3386 |
* but does not generate any exception |
3375 | 3387 |
*/ |
... | ... | |
3468 | 3480 |
/* dcba */ |
3469 | 3481 |
GEN_HANDLER(dcba, 0x1F, 0x16, 0x17, 0x03E00001, PPC_CACHE_DCBA) |
3470 | 3482 |
{ |
3483 |
/* interpreted as no-op */ |
|
3484 |
/* XXX: specification say this is treated as a store by the MMU |
|
3485 |
* but does not generate any exception |
|
3486 |
*/ |
|
3471 | 3487 |
} |
3472 | 3488 |
|
3473 | 3489 |
/*** Segment register manipulation ***/ |
... | ... | |
5012 | 5028 |
} |
5013 | 5029 |
|
5014 | 5030 |
/* msync replaces sync on 440 */ |
5015 |
GEN_HANDLER(msync, 0x1F, 0x16, 0x12, 0x03FF0801, PPC_BOOKE)
|
|
5031 |
GEN_HANDLER(msync, 0x1F, 0x16, 0x12, 0x03FFF801, PPC_BOOKE)
|
|
5016 | 5032 |
{ |
5017 | 5033 |
/* interpreted as no-op */ |
5018 | 5034 |
} |
Also available in: Unified diff