mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-11-23 13:30:02 +00:00
some cleanup + fixes
This commit is contained in:
parent
547b168dcb
commit
8b3bb9615c
@ -17,6 +17,13 @@
|
|||||||
Write32((OPCD << 26) | (d << 21) | (a << 16) | (b << 11) | (OE << 10) | (((XO) & 0x1ff) << 1) | (Rc)); \
|
Write32((OPCD << 26) | (d << 21) | (a << 16) | (b << 11) | (OE << 10) | (((XO) & 0x1ff) << 1) | (Rc)); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 0 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
||||||
|
// | OPCD | D | A | B | C | XO |Rc|
|
||||||
|
#define A_FORM(OPCD, D, A, B, C, XO, Rc) { \
|
||||||
|
int a = (A), b = (B), c = (C), d = (D); \
|
||||||
|
Write32((OPCD << 26) | (d << 21) | (a << 16) | (b << 11) | (c << 6) | (XO << 1) | (Rc)); \
|
||||||
|
}
|
||||||
|
|
||||||
namespace PpcGen {
|
namespace PpcGen {
|
||||||
|
|
||||||
// Arithmetics ops
|
// Arithmetics ops
|
||||||
@ -359,10 +366,10 @@ namespace PpcGen {
|
|||||||
Write32((10<<26) | (dest << 16) | ((imm) & 0xffff));
|
Write32((10<<26) | (dest << 16) | ((imm) & 0xffff));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PPCXEmitter::CMP(PPCReg a, PPCReg b) {
|
void PPCXEmitter::CMP(PPCReg a, PPCReg b, CONDITION_REGISTER cr) {
|
||||||
Write32((31 << 26) | (a << 16) | (b << 11));
|
Write32((31 << 26) | (a << 16) | (b << 11));
|
||||||
}
|
}
|
||||||
void PPCXEmitter::CMPL(PPCReg a, PPCReg b) {
|
void PPCXEmitter::CMPL(PPCReg a, PPCReg b, CONDITION_REGISTER cr) {
|
||||||
Write32((31 << 26) | (a << 16) | (b << 11) | (1<<6));
|
Write32((31 << 26) | (a << 16) | (b << 11) | (1<<6));
|
||||||
}
|
}
|
||||||
void PPCXEmitter::MFCR (PPCReg dest) {
|
void PPCXEmitter::MFCR (PPCReg dest) {
|
||||||
@ -371,13 +378,18 @@ namespace PpcGen {
|
|||||||
void PPCXEmitter::MTCR (PPCReg dest) {
|
void PPCXEmitter::MTCR (PPCReg dest) {
|
||||||
Write32(0x7C000120 | (dest << 21) | (0xff<<12));
|
Write32(0x7C000120 | (dest << 21) | (0xff<<12));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PPCXEmitter::ISEL (PPCReg Rt, PPCReg Ra, PPCReg Rb, CONDITION_REGISTER cr) {
|
||||||
|
// Not working !!
|
||||||
|
A_FORM(31, Rt, Ra, Rb, cr, 15, 0);
|
||||||
|
Break();
|
||||||
|
}
|
||||||
|
|
||||||
// Others operation
|
// Others operation
|
||||||
void PPCXEmitter::ORI(PPCReg Rd, PPCReg Ra, unsigned short imm) {
|
void PPCXEmitter::ORI(PPCReg Rd, PPCReg Ra, unsigned short imm) {
|
||||||
u32 instr = (0x60000000 | (Ra << 21) | (Rd << 16) | (imm & 0xffff));
|
u32 instr = (0x60000000 | (Ra << 21) | (Rd << 16) | (imm & 0xffff));
|
||||||
Write32(instr);
|
Write32(instr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PPCXEmitter::XORI (PPCReg Rdest, PPCReg Ra, unsigned short imm) {
|
void PPCXEmitter::XORI (PPCReg Rdest, PPCReg Ra, unsigned short imm) {
|
||||||
u32 instr = (0x68000000 | (Ra << 21) | (Rdest << 16) | (imm & 0xffff));
|
u32 instr = (0x68000000 | (Ra << 21) | (Rdest << 16) | (imm & 0xffff));
|
||||||
Write32(instr);
|
Write32(instr);
|
||||||
@ -454,8 +466,8 @@ namespace PpcGen {
|
|||||||
Write32(0x7C000734 | (src << 21) | (dest << 16));
|
Write32(0x7C000734 | (src << 21) | (dest << 16));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PPCXEmitter::EQV (PPCReg dst, PPCReg a, PPCReg b) {
|
void PPCXEmitter::EQV (PPCReg Ra, PPCReg Rs, PPCReg Rb) {
|
||||||
X_FORM(31, a, dst, b, 284, 0);
|
X_FORM(31, Rs, Ra, Rb, 284, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PPCXEmitter::RLWINM (PPCReg dest, PPCReg src, int shift, int start, int end) {
|
void PPCXEmitter::RLWINM (PPCReg dest, PPCReg src, int shift, int start, int end) {
|
||||||
|
@ -294,13 +294,26 @@ namespace PpcGen
|
|||||||
void SRWI (PPCReg dest, PPCReg src, unsigned short imm);
|
void SRWI (PPCReg dest, PPCReg src, unsigned short imm);
|
||||||
|
|
||||||
// Compare
|
// Compare
|
||||||
|
enum CONDITION_REGISTER{
|
||||||
|
CR0,
|
||||||
|
CR1,
|
||||||
|
CR2,
|
||||||
|
CR3,
|
||||||
|
CR4,
|
||||||
|
CR5,
|
||||||
|
CR6,
|
||||||
|
CR7
|
||||||
|
};
|
||||||
|
|
||||||
void CMPLI (PPCReg dest, unsigned short imm);
|
void CMPLI (PPCReg dest, unsigned short imm);
|
||||||
void CMPI (PPCReg dest, unsigned short imm);
|
void CMPI (PPCReg dest, unsigned short imm);
|
||||||
void CMPL (PPCReg a, PPCReg b);
|
void CMPL (PPCReg a, PPCReg b, CONDITION_REGISTER cr = CR0);
|
||||||
void CMP (PPCReg a, PPCReg b);
|
void CMP (PPCReg a, PPCReg b, CONDITION_REGISTER cr = CR0);
|
||||||
void MFCR (PPCReg dest);
|
void MFCR (PPCReg dest);
|
||||||
void MTCR (PPCReg dest);
|
void MTCR (PPCReg dest);
|
||||||
|
|
||||||
|
void ISEL (PPCReg Rt, PPCReg Ra, PPCReg Rb, CONDITION_REGISTER cr = CR0);
|
||||||
|
|
||||||
void Prologue();
|
void Prologue();
|
||||||
void Epilogue();
|
void Epilogue();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user