rld*
This commit is contained in:
parent
28ff739449
commit
dc0848f7ba
|
@ -853,125 +853,93 @@ XEEMITTER(xoris, 0x6C000000, D )(PPCFunctionBuilder& f, InstrData& i) {
|
||||||
|
|
||||||
// Integer rotate (A-6)
|
// Integer rotate (A-6)
|
||||||
|
|
||||||
//XEEMITTER(rld, 0x78000000, MDS)(PPCFunctionBuilder& f, InstrData& i) {
|
XEEMITTER(rld, 0x78000000, MDS)(PPCFunctionBuilder& f, InstrData& i) {
|
||||||
// if (i.MD.idx == 0) {
|
if (i.MD.idx == 0) {
|
||||||
// // XEEMITTER(rldiclx, 0x78000000, MD )
|
// XEEMITTER(rldiclx, 0x78000000, MD )
|
||||||
// // n <- sh[5] || sh[0:4]
|
// n <- sh[5] || sh[0:4]
|
||||||
// // r <- ROTL64((RS), n)
|
// r <- ROTL64((RS), n)
|
||||||
// // b <- mb[5] || mb[0:4]
|
// b <- mb[5] || mb[0:4]
|
||||||
// // m <- MASK(b, 63)
|
// m <- MASK(b, 63)
|
||||||
// // RA <- r & m
|
// RA <- r & m
|
||||||
//
|
uint32_t sh = (i.MD.SH5 << 5) | i.MD.SH;
|
||||||
// uint32_t sh = (i.MD.SH5 << 5) | i.MD.SH;
|
uint32_t mb = (i.MD.MB5 << 5) | i.MD.MB;
|
||||||
// uint32_t mb = (i.MD.MB5 << 5) | i.MD.MB;
|
uint64_t m = XEMASK(mb, 63);
|
||||||
// uint64_t m = XEMASK(mb, 63);
|
Value* v = f.LoadGPR(i.MD.RT);
|
||||||
//
|
if (sh) {
|
||||||
// GpVar v(c.newGpVar());
|
v = f.RotateLeft(v, f.LoadConstant((int8_t)sh));
|
||||||
// c.mov(v, f.LoadGPR(i.MD.RT));
|
}
|
||||||
// if (sh) {
|
if (m != 0xFFFFFFFFFFFFFFFF) {
|
||||||
// c.rol(v, imm(sh));
|
v = f.And(v, f.LoadConstant(m));
|
||||||
// }
|
}
|
||||||
// if (m != 0xFFFFFFFFFFFFFFFF) {
|
if (i.MD.Rc) {
|
||||||
// GpVar mask(c.newGpVar());
|
f.UpdateCR(0, v);
|
||||||
// c.mov(mask, imm(m));
|
}
|
||||||
// c.and_(v, mask);
|
f.StoreGPR(i.MD.RA, v);
|
||||||
// }
|
return 0;
|
||||||
// f.StoreGPR(i.MD.RA, v);
|
} else if (i.MD.idx == 1) {
|
||||||
//
|
// XEEMITTER(rldicrx, 0x78000004, MD )
|
||||||
// if (i.MD.Rc) {
|
// n <- sh[5] || sh[0:4]
|
||||||
// // With cr0 update.
|
// r <- ROTL64((RS), n)
|
||||||
// f.UpdateCR(0, v);
|
// e <- me[5] || me[0:4]
|
||||||
// }
|
// m <- MASK(0, e)
|
||||||
//
|
// RA <- r & m
|
||||||
// e.clear_constant_gpr_value(i.MD.RA);
|
uint32_t sh = (i.MD.SH5 << 5) | i.MD.SH;
|
||||||
//
|
uint32_t mb = (i.MD.MB5 << 5) | i.MD.MB;
|
||||||
// return 0;
|
uint64_t m = XEMASK(0, mb);
|
||||||
// } else if (i.MD.idx == 1) {
|
Value* v = f.LoadGPR(i.MD.RT);
|
||||||
// // XEEMITTER(rldicrx, 0x78000004, MD )
|
if (sh) {
|
||||||
// // n <- sh[5] || sh[0:4]
|
v = f.RotateLeft(v, f.LoadConstant((int8_t)sh));
|
||||||
// // r <- ROTL64((RS), n)
|
}
|
||||||
// // e <- me[5] || me[0:4]
|
if (m != 0xFFFFFFFFFFFFFFFF) {
|
||||||
// // m <- MASK(0, e)
|
v = f.And(v, f.LoadConstant(m));
|
||||||
// // RA <- r & m
|
}
|
||||||
//
|
if (i.MD.Rc) {
|
||||||
// uint32_t sh = (i.MD.SH5 << 5) | i.MD.SH;
|
f.UpdateCR(0, v);
|
||||||
// uint32_t mb = (i.MD.MB5 << 5) | i.MD.MB;
|
}
|
||||||
// uint64_t m = XEMASK(0, mb);
|
f.StoreGPR(i.MD.RA, v);
|
||||||
//
|
return 0;
|
||||||
// GpVar v(c.newGpVar());
|
} else if (i.MD.idx == 2) {
|
||||||
// c.mov(v, f.LoadGPR(i.MD.RT));
|
// XEEMITTER(rldicx, 0x78000008, MD )
|
||||||
// if (sh) {
|
XEINSTRNOTIMPLEMENTED();
|
||||||
// c.rol(v, imm(sh));
|
return 1;
|
||||||
// }
|
} else if (i.MDS.idx == 8) {
|
||||||
// if (m != 0xFFFFFFFFFFFFFFFF) {
|
// XEEMITTER(rldclx, 0x78000010, MDS)
|
||||||
// GpVar mask(c.newGpVar());
|
XEINSTRNOTIMPLEMENTED();
|
||||||
// c.mov(mask, imm(m));
|
return 1;
|
||||||
// c.and_(v, mask);
|
} else if (i.MDS.idx == 9) {
|
||||||
// }
|
// XEEMITTER(rldcrx, 0x78000012, MDS)
|
||||||
// f.StoreGPR(i.MD.RA, v);
|
XEINSTRNOTIMPLEMENTED();
|
||||||
//
|
return 1;
|
||||||
// if (i.MD.Rc) {
|
} else if (i.MD.idx == 3) {
|
||||||
// // With cr0 update.
|
// XEEMITTER(rldimix, 0x7800000C, MD )
|
||||||
// f.UpdateCR(0, v);
|
// n <- sh[5] || sh[0:4]
|
||||||
// }
|
// r <- ROTL64((RS), n)
|
||||||
//
|
// b <- me[5] || me[0:4]
|
||||||
// e.clear_constant_gpr_value(i.MD.RA);
|
// m <- MASK(b, ¬n)
|
||||||
//
|
// RA <- (r & m) | ((RA)&¬m)
|
||||||
// return 0;
|
uint32_t sh = (i.MD.SH5 << 5) | i.MD.SH;
|
||||||
// } else if (i.MD.idx == 2) {
|
uint32_t mb = (i.MD.MB5 << 5) | i.MD.MB;
|
||||||
// // XEEMITTER(rldicx, 0x78000008, MD )
|
uint64_t m = XEMASK(mb, ~sh);
|
||||||
// XEINSTRNOTIMPLEMENTED();
|
Value* v = f.LoadGPR(i.MD.RT);
|
||||||
// return 1;
|
if (sh) {
|
||||||
// } else if (i.MDS.idx == 8) {
|
v = f.RotateLeft(v, f.LoadConstant((int8_t)sh));
|
||||||
// // XEEMITTER(rldclx, 0x78000010, MDS)
|
}
|
||||||
// XEINSTRNOTIMPLEMENTED();
|
if (m != 0xFFFFFFFFFFFFFFFF) {
|
||||||
// return 1;
|
Value* ra = f.LoadGPR(i.MD.RA);
|
||||||
// } else if (i.MDS.idx == 9) {
|
v = f.Or(
|
||||||
// // XEEMITTER(rldcrx, 0x78000012, MDS)
|
f.And(v, f.LoadConstant(m)),
|
||||||
// XEINSTRNOTIMPLEMENTED();
|
f.And(ra, f.LoadConstant(~m)));
|
||||||
// return 1;
|
}
|
||||||
// } else if (i.MD.idx == 3) {
|
if (i.MD.Rc) {
|
||||||
// // XEEMITTER(rldimix, 0x7800000C, MD )
|
f.UpdateCR(0, v);
|
||||||
// // n <- sh[5] || sh[0:4]
|
}
|
||||||
// // r <- ROTL64((RS), n)
|
f.StoreGPR(i.MD.RA, v);
|
||||||
// // b <- me[5] || me[0:4]
|
return 0;
|
||||||
// // m <- MASK(b, ¬n)
|
} else {
|
||||||
// // RA <- (r & m) | ((RA)&¬m)
|
XEINSTRNOTIMPLEMENTED();
|
||||||
//
|
return 1;
|
||||||
// uint32_t sh = (i.MD.SH5 << 5) | i.MD.SH;
|
}
|
||||||
// uint32_t mb = (i.MD.MB5 << 5) | i.MD.MB;
|
}
|
||||||
// uint64_t m = XEMASK(mb, ~sh);
|
|
||||||
//
|
|
||||||
// GpVar v(c.newGpVar());
|
|
||||||
// c.mov(v, f.LoadGPR(i.MD.RT));
|
|
||||||
// if (sh) {
|
|
||||||
// c.rol(v, imm(sh));
|
|
||||||
// }
|
|
||||||
// if (m != 0xFFFFFFFFFFFFFFFF) {
|
|
||||||
// GpVar mask(c.newGpVar());
|
|
||||||
// c.mov(mask, e.get_uint64(m));
|
|
||||||
// c.and_(v, mask);
|
|
||||||
// GpVar ra(c.newGpVar());
|
|
||||||
// c.mov(ra, f.LoadGPR(i.MD.RA));
|
|
||||||
// c.not_(mask);
|
|
||||||
// c.and_(ra, mask);
|
|
||||||
// c.or_(v, ra);
|
|
||||||
// }
|
|
||||||
// f.StoreGPR(i.MD.RA, v);
|
|
||||||
//
|
|
||||||
// if (i.MD.Rc) {
|
|
||||||
// // With cr0 update.
|
|
||||||
// f.UpdateCR(0, v);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// e.clear_constant_gpr_value(i.MD.RA);
|
|
||||||
//
|
|
||||||
// return 0;
|
|
||||||
// } else {
|
|
||||||
// XEINSTRNOTIMPLEMENTED();
|
|
||||||
// return 1;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
XEEMITTER(rlwimix, 0x50000000, M )(PPCFunctionBuilder& f, InstrData& i) {
|
XEEMITTER(rlwimix, 0x50000000, M )(PPCFunctionBuilder& f, InstrData& i) {
|
||||||
// n <- SH
|
// n <- SH
|
||||||
|
@ -1372,7 +1340,7 @@ void RegisterEmitCategoryALU() {
|
||||||
XEREGISTERINSTR(xorx, 0x7C000278);
|
XEREGISTERINSTR(xorx, 0x7C000278);
|
||||||
XEREGISTERINSTR(xori, 0x68000000);
|
XEREGISTERINSTR(xori, 0x68000000);
|
||||||
XEREGISTERINSTR(xoris, 0x6C000000);
|
XEREGISTERINSTR(xoris, 0x6C000000);
|
||||||
// XEREGISTERINSTR(rld, 0x78000000);
|
XEREGISTERINSTR(rld, 0x78000000);
|
||||||
// -- // XEREGISTERINSTR(rldclx, 0x78000010);
|
// -- // XEREGISTERINSTR(rldclx, 0x78000010);
|
||||||
// -- // XEREGISTERINSTR(rldcrx, 0x78000012);
|
// -- // XEREGISTERINSTR(rldcrx, 0x78000012);
|
||||||
// -- // XEREGISTERINSTR(rldicx, 0x78000008);
|
// -- // XEREGISTERINSTR(rldicx, 0x78000008);
|
||||||
|
|
Loading…
Reference in New Issue