Floating point loads/stores.

Seem correct. Maybe not.
This commit is contained in:
Ben Vanik 2013-05-26 17:59:11 -07:00
parent a09170b2c6
commit c10d719d53
1 changed files with 293 additions and 234 deletions

View File

@ -883,274 +883,333 @@ XEEMITTER(lfd, 0xC8000000, D )(X64Emitter& e, X86Compiler& c, InstrDat
return 0; return 0;
} }
// XEEMITTER(lfdu, 0xCC000000, D )(X64Emitter& e, X86Compiler& c, InstrData& i) { XEEMITTER(lfdu, 0xCC000000, D )(X64Emitter& e, X86Compiler& c, InstrData& i) {
// // EA <- (RA) + EXTS(D) // EA <- (RA) + EXTS(D)
// // FRT <- MEM(EA, 8) // FRT <- MEM(EA, 8)
// // RA <- EA // RA <- EA
// GpVar ea = jit_insn_add(f, e.gpr_value(i.D.RA), e.get_int64(XEEXTS16(i.D.DS))); GpVar ea(c.newGpVar());
// GpVar v = e.ReadMemory(i.address, ea, 8, false); c.mov(ea, e.gpr_value(i.D.RA));
// v = b.CreateBitCast(v, jit_type_float64); c.add(ea, imm(XEEXTS16(i.D.DS)));
// e.update_fpr_value(i.D.RT, v); GpVar v = e.ReadMemory(i.address, ea, 8, false);
// e.update_gpr_value(i.D.RA, ea); XmmVar xmm_v(c.newXmmVar());
c.save(v); // Force to memory.
c.movq(xmm_v, v.m64());
e.update_fpr_value(i.D.RT, xmm_v);
e.update_gpr_value(i.D.RA, ea);
// return 0; return 0;
// } }
// XEEMITTER(lfdux, 0x7C0004EE, X )(X64Emitter& e, X86Compiler& c, InstrData& i) { XEEMITTER(lfdux, 0x7C0004EE, X )(X64Emitter& e, X86Compiler& c, InstrData& i) {
// // EA <- (RA) + (RB) // EA <- (RA) + (RB)
// // FRT <- MEM(EA, 8) // FRT <- MEM(EA, 8)
// // RA <- EA // RA <- EA
// GpVar ea = jit_insn_add(f, e.gpr_value(i.X.RA), e.gpr_value(i.X.RB)); GpVar ea(c.newGpVar());
// GpVar v = e.ReadMemory(i.address, ea, 8, false); c.mov(ea, e.gpr_value(i.X.RA));
// v = b.CreateBitCast(v, jit_type_float64); c.add(ea, e.gpr_value(i.X.RB));
// e.update_fpr_value(i.X.RT, v); GpVar v = e.ReadMemory(i.address, ea, 8, false);
// e.update_gpr_value(i.X.RA, ea); XmmVar xmm_v(c.newXmmVar());
c.save(v); // Force to memory.
c.movq(xmm_v, v.m64());
e.update_fpr_value(i.X.RT, xmm_v);
e.update_gpr_value(i.X.RA, ea);
// return 0; return 0;
// } }
// XEEMITTER(lfdx, 0x7C0004AE, X )(X64Emitter& e, X86Compiler& c, InstrData& i) { XEEMITTER(lfdx, 0x7C0004AE, X )(X64Emitter& e, X86Compiler& c, InstrData& i) {
// // if RA = 0 then // if RA = 0 then
// // b <- 0 // b <- 0
// // else // else
// // b <- (RA) // b <- (RA)
// // EA <- b + (RB) // EA <- b + (RB)
// // FRT <- MEM(EA, 8) // FRT <- MEM(EA, 8)
// GpVar ea = e.gpr_value(i.X.RB); GpVar ea(c.newGpVar());
// if (i.X.RA) { c.mov(ea, e.gpr_value(i.X.RB));
// ea = jit_insn_add(f, e.gpr_value(i.X.RA), ea); if (i.X.RA) {
// } c.add(ea, e.gpr_value(i.X.RA));
// GpVar v = e.ReadMemory(i.address, ea, 8, false); }
// v = b.CreateBitCast(v, jit_type_float64); GpVar v = e.ReadMemory(i.address, ea, 8, false);
// e.update_fpr_value(i.X.RT, v); XmmVar xmm_v(c.newXmmVar());
c.save(v); // Force to memory.
c.movq(xmm_v, v.m64());
e.update_fpr_value(i.X.RT, xmm_v);
// return 0; return 0;
// } }
// XEEMITTER(lfs, 0xC0000000, D )(X64Emitter& e, X86Compiler& c, InstrData& i) { XEEMITTER(lfs, 0xC0000000, D )(X64Emitter& e, X86Compiler& c, InstrData& i) {
// // if RA = 0 then // if RA = 0 then
// // b <- 0 // b <- 0
// // else // else
// // b <- (RA) // b <- (RA)
// // EA <- b + EXTS(D) // EA <- b + EXTS(D)
// // FRT <- DOUBLE(MEM(EA, 4)) // FRT <- DOUBLE(MEM(EA, 4))
// GpVar ea = e.get_int64(XEEXTS16(i.D.DS)); GpVar ea(c.newGpVar());
// if (i.D.RA) { if (i.D.RA) {
// ea = jit_insn_add(f, e.gpr_value(i.D.RA), ea); c.mov(ea, e.gpr_value(i.D.RA));
// } c.add(ea, imm(XEEXTS16(i.D.DS)));
// GpVar v = e.ReadMemory(i.address, ea, 4, false); } else {
// v = b.CreateFPExt(b.CreateBitCast(v, b.getFloatTy()), jit_type_float64); c.mov(ea, imm(XEEXTS16(i.D.DS)));
// e.update_fpr_value(i.D.RT, v); }
GpVar v = e.ReadMemory(i.address, ea, 4, false);
XmmVar xmm_v(c.newXmmVar());
c.movd(xmm_v, v.r32());
c.cvtss2sd(xmm_v, xmm_v);
e.update_fpr_value(i.D.RT, xmm_v);
// return 0; return 0;
// } }
// XEEMITTER(lfsu, 0xC4000000, D )(X64Emitter& e, X86Compiler& c, InstrData& i) { XEEMITTER(lfsu, 0xC4000000, D )(X64Emitter& e, X86Compiler& c, InstrData& i) {
// // EA <- (RA) + EXTS(D) // EA <- (RA) + EXTS(D)
// // FRT <- DOUBLE(MEM(EA, 4)) // FRT <- DOUBLE(MEM(EA, 4))
// // RA <- EA // RA <- EA
// GpVar ea = jit_insn_add(f, e.gpr_value(i.D.RA), e.get_int64(XEEXTS16(i.D.DS))); GpVar ea(c.newGpVar());
// GpVar v = e.ReadMemory(i.address, ea, 4, false); c.mov(ea, e.gpr_value(i.D.RA));
// v = b.CreateFPExt(b.CreateBitCast(v, b.getFloatTy()), jit_type_float64); c.add(ea, imm(XEEXTS16(i.D.DS)));
// e.update_fpr_value(i.D.RT, v); GpVar v = e.ReadMemory(i.address, ea, 4, false);
// e.update_gpr_value(i.D.RA, ea); XmmVar xmm_v(c.newXmmVar());
c.movd(xmm_v, v.r32());
c.cvtss2sd(xmm_v, xmm_v);
e.update_fpr_value(i.D.RT, xmm_v);
e.update_gpr_value(i.D.RA, ea);
// return 0; return 0;
// } }
// XEEMITTER(lfsux, 0x7C00046E, X )(X64Emitter& e, X86Compiler& c, InstrData& i) { XEEMITTER(lfsux, 0x7C00046E, X )(X64Emitter& e, X86Compiler& c, InstrData& i) {
// // EA <- (RA) + (RB) // EA <- (RA) + (RB)
// // FRT <- DOUBLE(MEM(EA, 4)) // FRT <- DOUBLE(MEM(EA, 4))
// // RA <- EA // RA <- EA
// GpVar ea = jit_insn_add(f, e.gpr_value(i.X.RA), e.gpr_value(i.X.RB)); GpVar ea(c.newGpVar());
// GpVar v = e.ReadMemory(i.address, ea, 4, false); c.mov(ea, e.gpr_value(i.X.RA));
// v = b.CreateFPExt(b.CreateBitCast(v, b.getFloatTy()), jit_type_float64); c.add(ea, e.gpr_value(i.X.RB));
// e.update_fpr_value(i.X.RT, v); GpVar v = e.ReadMemory(i.address, ea, 4, false);
// e.update_gpr_value(i.X.RA, ea); XmmVar xmm_v(c.newXmmVar());
c.movd(xmm_v, v.r32());
c.cvtss2sd(xmm_v, xmm_v);
e.update_fpr_value(i.X.RT, xmm_v);
e.update_gpr_value(i.X.RA, ea);
// return 0; return 0;
// } }
// XEEMITTER(lfsx, 0x7C00042E, X )(X64Emitter& e, X86Compiler& c, InstrData& i) { XEEMITTER(lfsx, 0x7C00042E, X )(X64Emitter& e, X86Compiler& c, InstrData& i) {
// // if RA = 0 then // if RA = 0 then
// // b <- 0 // b <- 0
// // else // else
// // b <- (RA) // b <- (RA)
// // EA <- b + (RB) // EA <- b + (RB)
// // FRT <- DOUBLE(MEM(EA, 4)) // FRT <- DOUBLE(MEM(EA, 4))
// GpVar ea = e.gpr_value(i.X.RB); GpVar ea(c.newGpVar());
// if (i.X.RA) { c.mov(ea, e.gpr_value(i.X.RB));
// ea = jit_insn_add(f, e.gpr_value(i.X.RA), ea); if (i.X.RA) {
// } c.add(ea, e.gpr_value(i.X.RA));
// GpVar v = e.ReadMemory(i.address, ea, 4, false); }
// v = b.CreateFPExt(b.CreateBitCast(v, b.getFloatTy()), jit_type_float64); GpVar v = e.ReadMemory(i.address, ea, 4, false);
// e.update_fpr_value(i.X.RT, v); XmmVar xmm_v(c.newXmmVar());
c.movd(xmm_v, v.r32());
c.cvtss2sd(xmm_v, xmm_v);
e.update_fpr_value(i.X.RT, xmm_v);
// return 0; return 0;
// } }
// Floating-point store (A-20) // Floating-point store (A-20)
// XEEMITTER(stfd, 0xD8000000, D )(X64Emitter& e, X86Compiler& c, InstrData& i) { XEEMITTER(stfd, 0xD8000000, D )(X64Emitter& e, X86Compiler& c, InstrData& i) {
// // if RA = 0 then // if RA = 0 then
// // b <- 0 // b <- 0
// // else // else
// // b <- (RA) // b <- (RA)
// // EA <- b + EXTS(D) // EA <- b + EXTS(D)
// // MEM(EA, 8) <- (FRS) // MEM(EA, 8) <- (FRS)
// GpVar ea = e.get_int64(XEEXTS16(i.D.DS)); GpVar ea(c.newGpVar());
// if (i.D.RA) { if (i.D.RA) {
// ea = jit_insn_add(f, e.gpr_value(i.D.RA), ea); c.mov(ea, e.gpr_value(i.D.RA));
// } c.add(ea, imm(XEEXTS16(i.D.DS)));
// GpVar v = e.fpr_value(i.D.RT); } else {
// v = b.CreateBitCast(v, jit_type_nint); c.mov(ea, imm(XEEXTS16(i.D.DS)));
// e.WriteMemory(i.address, ea, 8, v); }
XmmVar v = e.fpr_value(i.D.RT);
GpVar gpr_v(c.newGpVar());
c.save(gpr_v); // Force to memory.
c.movq(gpr_v.m64(), v);
e.WriteMemory(i.address, ea, 8, gpr_v);
// return 0; return 0;
// } }
// XEEMITTER(stfdu, 0xDC000000, D )(X64Emitter& e, X86Compiler& c, InstrData& i) { XEEMITTER(stfdu, 0xDC000000, D )(X64Emitter& e, X86Compiler& c, InstrData& i) {
// // EA <- (RA) + EXTS(D) // EA <- (RA) + EXTS(D)
// // MEM(EA, 8) <- (FRS) // MEM(EA, 8) <- (FRS)
// // RA <- EA // RA <- EA
// GpVar ea = jit_insn_add(f, e.gpr_value(i.D.RA), GpVar ea(c.newGpVar());
// e.get_int64(XEEXTS16(i.D.DS))); c.mov(ea, e.gpr_value(i.D.RA));
// GpVar v = e.fpr_value(i.D.RT); c.add(ea, imm(XEEXTS16(i.D.DS)));
// v = b.CreateBitCast(v, jit_type_nint); XmmVar v = e.fpr_value(i.D.RT);
// e.WriteMemory(i.address, ea, 8, v); GpVar gpr_v(c.newGpVar());
// e.update_gpr_value(i.D.RA, ea); c.save(gpr_v); // Force to memory.
c.movq(gpr_v.m64(), v);
e.WriteMemory(i.address, ea, 8, gpr_v);
e.update_gpr_value(i.D.RA, ea);
// return 0; return 0;
// } }
// XEEMITTER(stfdux, 0x7C0005EE, X )(X64Emitter& e, X86Compiler& c, InstrData& i) { XEEMITTER(stfdux, 0x7C0005EE, X )(X64Emitter& e, X86Compiler& c, InstrData& i) {
// // EA <- (RA) + (RB) // EA <- (RA) + (RB)
// // MEM(EA, 8) <- (FRS) // MEM(EA, 8) <- (FRS)
// // RA <- EA // RA <- EA
// GpVar ea = jit_insn_add(f, e.gpr_value(i.X.RA), e.gpr_value(i.X.RB)); GpVar ea(c.newGpVar());
// GpVar v = e.fpr_value(i.X.RT); c.mov(ea, e.gpr_value(i.X.RA));
// v = b.CreateBitCast(v, jit_type_nint); c.add(ea, e.gpr_value(i.X.RB));
// e.WriteMemory(i.address, ea, 8, v); XmmVar v = e.fpr_value(i.X.RT);
// e.update_gpr_value(i.X.RA, ea); GpVar gpr_v(c.newGpVar());
c.save(gpr_v); // Force to memory.
c.movq(gpr_v.m64(), v);
e.WriteMemory(i.address, ea, 8, gpr_v);
e.update_gpr_value(i.X.RA, ea);
// return 0; return 0;
// } }
// XEEMITTER(stfdx, 0x7C0005AE, X )(X64Emitter& e, X86Compiler& c, InstrData& i) { XEEMITTER(stfdx, 0x7C0005AE, X )(X64Emitter& e, X86Compiler& c, InstrData& i) {
// // if RA = 0 then // if RA = 0 then
// // b <- 0 // b <- 0
// // else // else
// // b <- (RA) // b <- (RA)
// // EA <- b + (RB) // EA <- b + (RB)
// // MEM(EA, 8) <- (FRS) // MEM(EA, 8) <- (FRS)
// GpVar ea = e.gpr_value(i.X.RB); GpVar ea(c.newGpVar());
// if (i.X.RA) { c.mov(ea, e.gpr_value(i.X.RB));
// ea = jit_insn_add(f, e.gpr_value(i.X.RA), ea); if (i.X.RA) {
// } c.add(ea, e.gpr_value(i.X.RA));
// GpVar v = e.fpr_value(i.X.RT); }
// v = b.CreateBitCast(v, jit_type_nint); XmmVar v = e.fpr_value(i.X.RT);
// e.WriteMemory(i.address, ea, 8, v); GpVar gpr_v(c.newGpVar());
c.save(gpr_v); // Force to memory.
c.movq(gpr_v.m64(), v);
e.WriteMemory(i.address, ea, 8, gpr_v);
// return 0; return 0;
// } }
// XEEMITTER(stfiwx, 0x7C0007AE, X )(X64Emitter& e, X86Compiler& c, InstrData& i) { XEEMITTER(stfiwx, 0x7C0007AE, X )(X64Emitter& e, X86Compiler& c, InstrData& i) {
// // if RA = 0 then // if RA = 0 then
// // b <- 0 // b <- 0
// // else // else
// // b <- (RA) // b <- (RA)
// // EA <- b + (RB) // EA <- b + (RB)
// // MEM(EA, 4) <- (FRS)[32:63] // MEM(EA, 4) <- (FRS)[32:63]
// GpVar ea = e.gpr_value(i.X.RB); GpVar ea(c.newGpVar());
// if (i.X.RA) { c.mov(ea, e.gpr_value(i.X.RB));
// ea = jit_insn_add(f, e.gpr_value(i.D.RA), ea); if (i.X.RA) {
// } c.add(ea, e.gpr_value(i.X.RA));
// GpVar v = e.fpr_value(i.X.RT); }
// v = b.CreateBitCast(v, jit_type_nint); XmmVar v = e.fpr_value(i.X.RT);
// e.WriteMemory(i.address, ea, 4, v); GpVar gpr_v(c.newGpVar());
c.movd(gpr_v.r32(), v);
e.WriteMemory(i.address, ea, 4, gpr_v);
// return 0; return 0;
// } }
// XEEMITTER(stfs, 0xD0000000, D )(X64Emitter& e, X86Compiler& c, InstrData& i) { XEEMITTER(stfs, 0xD0000000, D )(X64Emitter& e, X86Compiler& c, InstrData& i) {
// // if RA = 0 then // if RA = 0 then
// // b <- 0 // b <- 0
// // else // else
// // b <- (RA) // b <- (RA)
// // EA <- b + EXTS(D) // EA <- b + EXTS(D)
// // MEM(EA, 4) <- SINGLE(FRS) // MEM(EA, 4) <- SINGLE(FRS)
// GpVar ea = e.get_int64(XEEXTS16(i.D.DS)); GpVar ea(c.newGpVar());
// if (i.D.RA) { if (i.D.RA) {
// ea = jit_insn_add(f, e.gpr_value(i.D.RA), ea); c.mov(ea, e.gpr_value(i.D.RA));
// } c.add(ea, imm(XEEXTS16(i.D.DS)));
// GpVar v = e.fpr_value(i.D.RT); } else {
// v = b.CreateBitCast(b.CreateFPTrunc(v, b.getFloatTy()), b.getInt32Ty()); c.mov(ea, imm(XEEXTS16(i.D.DS)));
// e.WriteMemory(i.address, ea, 4, v); }
XmmVar v = e.fpr_value(i.D.RT);
c.cvtsd2ss(v, v);
GpVar gpr_v(c.newGpVar());
c.movd(gpr_v.r32(), v);
e.WriteMemory(i.address, ea, 4, gpr_v);
// return 0; return 0;
// } }
// XEEMITTER(stfsu, 0xD4000000, D )(X64Emitter& e, X86Compiler& c, InstrData& i) { XEEMITTER(stfsu, 0xD4000000, D )(X64Emitter& e, X86Compiler& c, InstrData& i) {
// // EA <- (RA) + EXTS(D) // EA <- (RA) + EXTS(D)
// // MEM(EA, 4) <- SINGLE(FRS) // MEM(EA, 4) <- SINGLE(FRS)
// // RA <- EA // RA <- EA
// GpVar ea = jit_insn_add(f, e.gpr_value(i.D.RA), GpVar ea(c.newGpVar());
// e.get_int64(XEEXTS16(i.D.DS))); c.mov(ea, e.gpr_value(i.D.RA));
// GpVar v = e.fpr_value(i.D.RT); c.add(ea, imm(XEEXTS16(i.D.DS)));
// v = b.CreateBitCast(b.CreateFPTrunc(v, b.getFloatTy()), b.getInt32Ty()); XmmVar v = e.fpr_value(i.D.RT);
// e.WriteMemory(i.address, ea, 4, v); c.cvtsd2ss(v, v);
// e.update_gpr_value(i.D.RA, ea); GpVar gpr_v(c.newGpVar());
c.movd(gpr_v.r32(), v);
e.WriteMemory(i.address, ea, 4, gpr_v);
e.update_gpr_value(i.D.RA, ea);
// return 0; return 0;
// } }
// XEEMITTER(stfsux, 0x7C00056E, X )(X64Emitter& e, X86Compiler& c, InstrData& i) { XEEMITTER(stfsux, 0x7C00056E, X )(X64Emitter& e, X86Compiler& c, InstrData& i) {
// // EA <- (RA) + (RB) // EA <- (RA) + (RB)
// // MEM(EA, 4) <- SINGLE(FRS) // MEM(EA, 4) <- SINGLE(FRS)
// // RA <- EA // RA <- EA
// GpVar ea = jit_insn_add(f, e.gpr_value(i.X.RA), e.gpr_value(i.X.RB)); GpVar ea(c.newGpVar());
// GpVar v = e.fpr_value(i.X.RT); c.mov(ea, e.gpr_value(i.X.RA));
// v = b.CreateBitCast(b.CreateFPTrunc(v, b.getFloatTy()), b.getInt32Ty()); c.add(ea, e.gpr_value(i.X.RB));
// e.WriteMemory(i.address, ea, 4, v); XmmVar v = e.fpr_value(i.X.RT);
// e.update_gpr_value(i.X.RA, ea); c.cvtsd2ss(v, v);
GpVar gpr_v(c.newGpVar());
c.movd(gpr_v.r32(), v);
e.WriteMemory(i.address, ea, 4, gpr_v);
e.update_gpr_value(i.X.RA, ea);
// return 0; return 0;
// } }
// XEEMITTER(stfsx, 0x7C00052E, X )(X64Emitter& e, X86Compiler& c, InstrData& i) { XEEMITTER(stfsx, 0x7C00052E, X )(X64Emitter& e, X86Compiler& c, InstrData& i) {
// // if RA = 0 then // if RA = 0 then
// // b <- 0 // b <- 0
// // else // else
// // b <- (RA) // b <- (RA)
// // EA <- b + (RB) // EA <- b + (RB)
// // MEM(EA, 4) <- SINGLE(FRS) // MEM(EA, 4) <- SINGLE(FRS)
// GpVar ea = e.gpr_value(i.X.RB); GpVar ea(c.newGpVar());
// if (i.X.RA) { c.mov(ea, e.gpr_value(i.X.RB));
// ea = jit_insn_add(f, e.gpr_value(i.X.RA), ea); if (i.X.RA) {
// } c.add(ea, e.gpr_value(i.X.RA));
// GpVar v = e.fpr_value(i.X.RT); }
// v = b.CreateBitCast(b.CreateFPTrunc(v, b.getFloatTy()), b.getInt32Ty()); XmmVar v = e.fpr_value(i.X.RT);
// e.WriteMemory(i.address, ea, 4, v); c.cvtsd2ss(v, v);
GpVar gpr_v(c.newGpVar());
c.movd(gpr_v.r32(), v);
e.WriteMemory(i.address, ea, 4, gpr_v);
// return 0; return 0;
// } }
// Cache management (A-27) // Cache management (A-27)
@ -1249,22 +1308,22 @@ void X64RegisterEmitCategoryMemory() {
XEREGISTERINSTR(stwcx, 0x7C00012D); XEREGISTERINSTR(stwcx, 0x7C00012D);
XEREGISTERINSTR(sync, 0x7C0004AC); XEREGISTERINSTR(sync, 0x7C0004AC);
XEREGISTERINSTR(lfd, 0xC8000000); XEREGISTERINSTR(lfd, 0xC8000000);
// XEREGISTERINSTR(lfdu, 0xCC000000); XEREGISTERINSTR(lfdu, 0xCC000000);
// XEREGISTERINSTR(lfdux, 0x7C0004EE); XEREGISTERINSTR(lfdux, 0x7C0004EE);
// XEREGISTERINSTR(lfdx, 0x7C0004AE); XEREGISTERINSTR(lfdx, 0x7C0004AE);
// XEREGISTERINSTR(lfs, 0xC0000000); XEREGISTERINSTR(lfs, 0xC0000000);
// XEREGISTERINSTR(lfsu, 0xC4000000); XEREGISTERINSTR(lfsu, 0xC4000000);
// XEREGISTERINSTR(lfsux, 0x7C00046E); XEREGISTERINSTR(lfsux, 0x7C00046E);
// XEREGISTERINSTR(lfsx, 0x7C00042E); XEREGISTERINSTR(lfsx, 0x7C00042E);
// XEREGISTERINSTR(stfd, 0xD8000000); XEREGISTERINSTR(stfd, 0xD8000000);
// XEREGISTERINSTR(stfdu, 0xDC000000); XEREGISTERINSTR(stfdu, 0xDC000000);
// XEREGISTERINSTR(stfdux, 0x7C0005EE); XEREGISTERINSTR(stfdux, 0x7C0005EE);
// XEREGISTERINSTR(stfdx, 0x7C0005AE); XEREGISTERINSTR(stfdx, 0x7C0005AE);
// XEREGISTERINSTR(stfiwx, 0x7C0007AE); XEREGISTERINSTR(stfiwx, 0x7C0007AE);
// XEREGISTERINSTR(stfs, 0xD0000000); XEREGISTERINSTR(stfs, 0xD0000000);
// XEREGISTERINSTR(stfsu, 0xD4000000); XEREGISTERINSTR(stfsu, 0xD4000000);
// XEREGISTERINSTR(stfsux, 0x7C00056E); XEREGISTERINSTR(stfsux, 0x7C00056E);
// XEREGISTERINSTR(stfsx, 0x7C00052E); XEREGISTERINSTR(stfsx, 0x7C00052E);
XEREGISTERINSTR(dcbf, 0x7C0000AC); XEREGISTERINSTR(dcbf, 0x7C0000AC);
XEREGISTERINSTR(dcbst, 0x7C00006C); XEREGISTERINSTR(dcbst, 0x7C00006C);
XEREGISTERINSTR(dcbt, 0x7C00022C); XEREGISTERINSTR(dcbt, 0x7C00022C);