[Jit] add more instruction

This commit is contained in:
Ced2911 2013-09-16 22:25:53 +02:00 committed by Unknown W. Brackets
parent 09210a2ce9
commit 2ac5d38b90
2 changed files with 46 additions and 0 deletions

View file

@ -44,6 +44,13 @@
X_FORM(OPCD, crbD, crbA, crbB, XO, LK); \
}
// 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 | S | A | SH | MB | ME |Rc|
#define M_FORM(OPCD, RS, RA, SH, MB, ME, Rc) { \
int rs = (RS), ra = (RA), sh = (SH); \
Write32((OPCD << 26) | (rs << 21) | (ra << 16) | (sh << 11) | ((MB) << 6) | ((ME) << 1) | (Rc)); \
}
namespace PpcGen {
// Mul stuff
@ -508,6 +515,10 @@ namespace PpcGen {
Write32(0x7C000734 | (src << 21) | (dest << 16));
}
void PPCXEmitter::EXTSW (PPCReg Rt, PPCReg Ra) {
X_FORM(31, Rt, Ra, 0, 986, 0);
}
void PPCXEmitter::EQV (PPCReg Ra, PPCReg Rs, PPCReg Rb) {
X_FORM(31, Rs, Ra, Rb, 284, 0);
}
@ -516,6 +527,10 @@ namespace PpcGen {
Write32((21<<26) | (src << 21) | (dest << 16) | (shift << 11) | (start << 6) | (end << 1));
}
void PPCXEmitter::RLDICL (PPCReg Rs, PPCReg Ra, int sh, int mb) {
Write32((30 << 26) | (Rs << 21) | (Ra << 16) | (sh << 11) | ((mb) << 6) | ((sh) << 1) | (0));
}
// Shift Instructions
void PPCXEmitter::SRAW (PPCReg dest, PPCReg src, PPCReg shift) {
X_FORM(31, src, dest, shift, 792, 0);
@ -622,6 +637,24 @@ namespace PpcGen {
// Load the final value
LFS(FRt, R7, 0);
}
void PPCXEmitter::MTFSB0(int bt) {
X_FORM(63, bt, 0, 0, 70, 0);
}
void PPCXEmitter::FCTID (PPCReg FRt, PPCReg FRb) {
X_FORM(63, FRt, 0, FRb, 846, 0);
}
void PPCXEmitter::FCFID (PPCReg FRt, PPCReg FRb) {
X_FORM(63, FRt, 0, FRb, 846, 0);
}
void PPCXEmitter::FRSP (PPCReg FRt, PPCReg FRb) {
X_FORM(63, FRt, 0, FRb, 12, 0);
}
void PPCXEmitter::FCTIW (PPCReg FRt, PPCReg FRb) {
X_FORM(63, FRt, 0, FRb, 14, 0);
}
void PPCXEmitter::STFIWX(PPCReg FRt, PPCReg FRa, PPCReg FRb) {
X_FORM(31, FRt, FRa, FRb, 983, 0);
}
// Fpu move instruction
void PPCXEmitter::FMR (PPCReg FRt, PPCReg FRb) {

View file

@ -293,10 +293,13 @@ namespace PpcGen
// sign
void EXTSB (PPCReg dest, PPCReg src);
void EXTSH (PPCReg dest, PPCReg src);
void EXTSW (PPCReg dest, PPCReg src);
//
void RLWINM (PPCReg dest, PPCReg src, int shift, int start, int end);
void RLDICL (PPCReg Rt, PPCReg Rs, int sh, int mb);
// Shift Instructions
void SRAW (PPCReg dest, PPCReg src, PPCReg shift);
void SRAWI (PPCReg dest, PPCReg src, unsigned short imm);
@ -359,6 +362,16 @@ namespace PpcGen
// Fpu move instruction
void FMR (PPCReg FRt, PPCReg FRb);
// fpu
void MTFSB0 (int bt);
void FCFID (PPCReg FRt, PPCReg FRb);
void FCTID (PPCReg FRt, PPCReg FRb);
void FRSP (PPCReg FRt, PPCReg FRb);
void FCTIW (PPCReg FRt, PPCReg FRb);
void STFIWX (PPCReg FRt, PPCReg FRa, PPCReg FRb);
// Fpu
void FNEG (PPCReg FRt, PPCReg FRb);
void FABS (PPCReg FRt, PPCReg FRb);
void FNABS (PPCReg FRt, PPCReg FRb);