mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
new op
This commit is contained in:
parent
7795af3622
commit
b84cdbf17d
2 changed files with 96 additions and 9 deletions
|
@ -541,6 +541,31 @@ namespace PpcGen {
|
|||
Break();
|
||||
D_FORM(54, FRt, Ra, offset);
|
||||
}
|
||||
|
||||
|
||||
void PPCXEmitter::MOVI2F (PPCReg dest, float imm, bool negate) {
|
||||
u32 tmp;
|
||||
|
||||
union convert {
|
||||
unsigned int i;
|
||||
float f;
|
||||
} fc;
|
||||
|
||||
fc.f = imm;
|
||||
|
||||
MOVI2R(R6, fc.i);
|
||||
|
||||
// R7 = imm
|
||||
MOVI2R(R7, (u32)&tmp);
|
||||
STW(R6, R7);
|
||||
|
||||
// dest = R7
|
||||
LFS(dest, R7, 0);
|
||||
|
||||
if (negate == true) {
|
||||
FNEG(dest, dest);
|
||||
}
|
||||
}
|
||||
|
||||
void PPCXEmitter::SaveFloatSwap(PPCReg FRt, PPCReg Base, PPCReg offset) {
|
||||
// used for swapping float ...
|
||||
|
@ -637,15 +662,32 @@ namespace PpcGen {
|
|||
|
||||
// Fpu mul add
|
||||
void PPCXEmitter::FMADD (PPCReg FRt, PPCReg FRa, PPCReg FRc, PPCReg FRb) {
|
||||
Break();
|
||||
A_FORM(63, FRt, FRa, FRb, FRc, 29, 0);
|
||||
}
|
||||
void PPCXEmitter::FMSUB (PPCReg FRt, PPCReg FRa, PPCReg FRc, PPCReg FRb) {
|
||||
Break();
|
||||
A_FORM(63, FRt, FRa, FRb, FRc, 28, 0);
|
||||
}
|
||||
void PPCXEmitter::FMADDS (PPCReg FRt, PPCReg FRa, PPCReg FRc, PPCReg FRb) {
|
||||
Break();
|
||||
A_FORM(59, FRt, FRa, FRb, FRc, 29, 0);
|
||||
}
|
||||
void PPCXEmitter::FMSUBS (PPCReg FRt, PPCReg FRa, PPCReg FRc, PPCReg FRb) {
|
||||
A_FORM(59, FRt, FRa, FRb, FRc, 28, 0);
|
||||
}
|
||||
|
||||
// Fpu sel
|
||||
void PPCXEmitter::FSEL (PPCReg FRt, PPCReg FRa, PPCReg FRc, PPCReg FRb) {
|
||||
A_FORM(63, FRt, FRa, FRb, FRc, 23, 0);
|
||||
}
|
||||
void PPCXEmitter::FMIN (PPCReg FRt, PPCReg FRa, PPCReg FRb) {
|
||||
PPCReg safe = FPR3; // hope it's safe !!
|
||||
FSUBS(safe, FRa, FRb);
|
||||
FSEL(FRt, safe, FRa, FRb);
|
||||
Break();
|
||||
}
|
||||
void PPCXEmitter::FMAX (PPCReg FRt, PPCReg FRa, PPCReg FRb) {
|
||||
PPCReg safe = FPR3; // hope it's safe !!
|
||||
FSUBS(safe, FRa, FRb);
|
||||
FSEL(FRt, safe, FRb, FRa);
|
||||
Break();
|
||||
}
|
||||
|
||||
|
|
|
@ -82,12 +82,26 @@ namespace PpcGen
|
|||
|
||||
|
||||
// Vmx (128)
|
||||
VR0 = 0,
|
||||
// Used to pass vector function parameters and return values
|
||||
VR1, VR2, VR3, VR4,
|
||||
VR5, VR6, VR7, VR8,
|
||||
VR9, VR10, VR11, VR12,
|
||||
VR13, // ...
|
||||
VR0 = 0, VR1, VR2, VR3, VR4,
|
||||
VR5, VR6, VR7, VR8, VR9,
|
||||
VR10, VR11, VR12, VR13, VR14,
|
||||
VR15, VR16, VR17, VR18, VR19,
|
||||
VR20, VR21, VR22, VR23, VR24,
|
||||
VR25, VR26, VR27, VR28, VR29,
|
||||
VR30, VR31, VR32, VR33, VR34,
|
||||
VR35, VR36, VR37, VR38, VR39,
|
||||
VR40, VR41, VR42, VR43, VR44,
|
||||
VR45, VR46, VR47, VR48, VR49,
|
||||
VR50, VR51, VR52, VR53, VR54,
|
||||
VR55, VR56, VR57, VR58, VR59,
|
||||
VR60, VR61, VR62, VR63, VR64,
|
||||
VR65, VR66, VR67, VR68, VR69,
|
||||
VR70, VR71, VR72, VR73, VR74,
|
||||
VR75, VR76, VR77, VR78, VR79,
|
||||
VR80, VR81, VR82, VR83, VR84,
|
||||
VR85, VR86, VR87, VR88, VR89,
|
||||
VR90, VR91, VR92, VR93, VR94,
|
||||
VR95, VR96, VR97, VR98, VR99, //...
|
||||
|
||||
// Others regs
|
||||
LR, CTR, XER, FPSCR,
|
||||
|
@ -339,6 +353,8 @@ namespace PpcGen
|
|||
void SFD (PPCReg FRt, PPCReg Ra, unsigned short offset = 0);
|
||||
void SaveFloatSwap(PPCReg FRt, PPCReg Ra, PPCReg offset);
|
||||
void LoadFloatSwap(PPCReg FRt, PPCReg Ra, PPCReg offset);
|
||||
// dest = LIS(imm) + ORI(+imm)
|
||||
void MOVI2F (PPCReg dest, float imm, bool negate = false);
|
||||
|
||||
// Fpu move instruction
|
||||
void FMR (PPCReg FRt, PPCReg FRb);
|
||||
|
@ -363,12 +379,41 @@ namespace PpcGen
|
|||
void FRE (PPCReg FRt, PPCReg FRb);
|
||||
void FRES (PPCReg FRt, PPCReg FRb);
|
||||
|
||||
// FSEL ...
|
||||
void FSEL (PPCReg FRt, PPCReg FRa, PPCReg FRc, PPCReg FRb);
|
||||
void FMIN (PPCReg FRt, PPCReg FRa, PPCReg FRb);
|
||||
void FMAX (PPCReg FRt, PPCReg FRa, PPCReg FRb);
|
||||
|
||||
// Fpu mul add
|
||||
void FMADD (PPCReg FRt, PPCReg FRa, PPCReg FRc, PPCReg FRb);
|
||||
void FMSUB (PPCReg FRt, PPCReg FRa, PPCReg FRc, PPCReg FRb);
|
||||
void FMADDS (PPCReg FRt, PPCReg FRa, PPCReg FRc, PPCReg FRb);
|
||||
void FMSUBS (PPCReg FRt, PPCReg FRa, PPCReg FRc, PPCReg FRb);
|
||||
|
||||
|
||||
// VPU - lvx128
|
||||
void LoadVector(PPCReg Rd, PPCReg Ra, PPCReg Rb);
|
||||
void SaveVector(PPCReg Rd, PPCReg Ra, PPCReg Rb);
|
||||
void LoadVectorSwap(PPCReg Rd, PPCReg Ra, PPCReg Rb);
|
||||
void SaveVectorSwap(PPCReg Rd, PPCReg Ra, PPCReg Rb);
|
||||
|
||||
void MOVI2V (PPCReg dest, float imm);
|
||||
|
||||
void VADDFP (PPCReg Rd, PPCReg Ra); // Vector Add Floating Point
|
||||
void VMADDFP (PPCReg Rd, PPCReg Ra, PPCReg Rb); // Vector Multiply Add Floating Point
|
||||
void VMAXFP (PPCReg Rd, PPCReg Ra); // Vector Maximum Floating Point
|
||||
void VMINFP (PPCReg Rd, PPCReg Ra); // Vector Minimum Floating Point
|
||||
void VMSUM3FP (PPCReg Rd, PPCReg Ra); // 3-operand Dot Product
|
||||
void VMSUM4FP (PPCReg Rd, PPCReg Ra); // 4-operand Dot Product
|
||||
void VMULFP (PPCReg Rd, PPCReg Ra); // Vector Multiply Floating Point
|
||||
void VNMSUBFP (PPCReg Rd, PPCReg Ra, PPCReg Rb); // Vector Negate Multiply-Subtract Floating Point
|
||||
void VSUBFP (PPCReg Rd, PPCReg Ra); // Vector Subtract Floating Point
|
||||
|
||||
void VCMPBFP (PPCReg Rd, PPCReg Ra); // Vector Compare Bounds Floating Point
|
||||
void VCMPEQFP (PPCReg Rd, PPCReg Ra); // Vector Compare Equal-to-Floating Point
|
||||
void VCMPGEFP (PPCReg Rd, PPCReg Ra); // Vector Compare Greater-Than-or-Equal-to Floating Point
|
||||
void VCMPGTFP (PPCReg Rd, PPCReg Ra); // Vector Compare Greater-Than Floating Point
|
||||
|
||||
|
||||
|
||||
void QuickCallFunction(void *func);
|
||||
|
|
Loading…
Add table
Reference in a new issue