Main codegen loop now running through instructions.
This commit is contained in:
parent
dad99769cb
commit
16d2b73a73
|
@ -29,10 +29,10 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// // This is a different codepath as we need to use llvm.sadd.with.overflow.
|
||||
//
|
||||
// Function* sadd_with_overflow = Intrinsic::getDeclaration(
|
||||
// e.gen_module(), Intrinsic::sadd_with_overflow, b.getInt64Ty());
|
||||
// Value* v = b.CreateCall2(sadd_with_overflow,
|
||||
// e.gen_module(), Intrinsic::sadd_with_overflow, jit_type_nint);
|
||||
// jit_value_t v = b.CreateCall2(sadd_with_overflow,
|
||||
// e.gpr_value(i.XO.RA), e.gpr_value(i.XO.RB));
|
||||
// Value* v0 = b.CreateExtractValue(v, 0);
|
||||
// jit_value_t v0 = b.CreateExtractValue(v, 0);
|
||||
// e.update_gpr_value(i.XO.RT, v0);
|
||||
// e.update_xer_with_overflow(b.CreateExtractValue(v, 1));
|
||||
//
|
||||
|
@ -44,7 +44,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// return 0;
|
||||
// } else {
|
||||
// // No OE bit setting.
|
||||
// Value* v = b.CreateAdd(e.gpr_value(i.XO.RA), e.gpr_value(i.XO.RB));
|
||||
// jit_value_t v = b.CreateAdd(e.gpr_value(i.XO.RA), e.gpr_value(i.XO.RB));
|
||||
// e.update_gpr_value(i.XO.RT, v);
|
||||
//
|
||||
// if (i.XO.Rc) {
|
||||
|
@ -73,7 +73,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// // else
|
||||
// // RT <- (RA) + EXTS(SI)
|
||||
//
|
||||
// Value* v = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// jit_value_t v = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// if (i.D.RA) {
|
||||
// v = b.CreateAdd(e.gpr_value(i.D.RA), v);
|
||||
// }
|
||||
|
@ -86,8 +86,8 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// // RT <- (RA) + EXTS(SI)
|
||||
//
|
||||
// Function* sadd_with_overflow = Intrinsic::getDeclaration(
|
||||
// e.gen_module(), Intrinsic::sadd_with_overflow, b.getInt64Ty());
|
||||
// Value* v = b.CreateCall2(sadd_with_overflow,
|
||||
// e.gen_module(), Intrinsic::sadd_with_overflow, jit_type_nint);
|
||||
// jit_value_t v = b.CreateCall2(sadd_with_overflow,
|
||||
// e.gpr_value(i.D.RA), b.getInt64(XEEXTS16(i.D.DS)));
|
||||
// e.update_gpr_value(i.D.RT, b.CreateExtractValue(v, 0));
|
||||
// e.update_xer_with_carry(b.CreateExtractValue(v, 1));
|
||||
|
@ -106,7 +106,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// // else
|
||||
// // RT <- (RA) + EXTS(SI) || i16.0
|
||||
//
|
||||
// Value* v = b.getInt64(XEEXTS16(i.D.DS) << 16);
|
||||
// jit_value_t v = b.getInt64(XEEXTS16(i.D.DS) << 16);
|
||||
// if (i.D.RA) {
|
||||
// v = b.CreateAdd(e.gpr_value(i.D.RA), v);
|
||||
// }
|
||||
|
@ -124,11 +124,11 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// // RT <- (RA) + CA
|
||||
//
|
||||
// Function* sadd_with_overflow = Intrinsic::getDeclaration(
|
||||
// e.gen_module(), Intrinsic::sadd_with_overflow, b.getInt64Ty());
|
||||
// Value* ca = b.CreateAnd(b.CreateLShr(e.xer_value(), 29), 0x1);
|
||||
// Value* v = b.CreateCall2(sadd_with_overflow,
|
||||
// e.gen_module(), Intrinsic::sadd_with_overflow, jit_type_nint);
|
||||
// jit_value_t ca = b.CreateAnd(b.CreateLShr(e.xer_value(), 29), 0x1);
|
||||
// jit_value_t v = b.CreateCall2(sadd_with_overflow,
|
||||
// e.gpr_value(i.XO.RA), ca);
|
||||
// Value* add_value = b.CreateExtractValue(v, 0);
|
||||
// jit_value_t add_value = b.CreateExtractValue(v, 0);
|
||||
// e.update_gpr_value(i.XO.RT, add_value);
|
||||
// if (i.XO.OE) {
|
||||
// // With XER[SO] update too.
|
||||
|
@ -166,8 +166,8 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// // RT[32:63] <- dividend ÷ divisor
|
||||
// // RT[0:31] <- undefined
|
||||
//
|
||||
// Value* dividend = b.CreateTrunc(e.gpr_value(i.XO.RA), b.getInt32Ty());
|
||||
// Value* divisor = b.CreateTrunc(e.gpr_value(i.XO.RB), b.getInt32Ty());
|
||||
// jit_value_t dividend = b.CreateTrunc(e.gpr_value(i.XO.RA), b.getInt32Ty());
|
||||
// jit_value_t divisor = b.CreateTrunc(e.gpr_value(i.XO.RB), b.getInt32Ty());
|
||||
//
|
||||
// // Note that we skip the zero handling block and just avoid the divide if
|
||||
// // we are OE=0.
|
||||
|
@ -187,8 +187,8 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
//
|
||||
// // Divide.
|
||||
// b.SetInsertPoint(nonzero_bb);
|
||||
// Value* v = b.CreateSDiv(dividend, divisor);
|
||||
// v = b.CreateSExt(v, b.getInt64Ty());
|
||||
// jit_value_t v = b.CreateSDiv(dividend, divisor);
|
||||
// v = b.CreateSExt(v, jit_type_nint);
|
||||
// e.update_gpr_value(i.XO.RT, v);
|
||||
//
|
||||
// // If we are OE=1 we need to clear the overflow bit.
|
||||
|
@ -219,8 +219,8 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// // RT[32:63] <- dividend ÷ divisor
|
||||
// // RT[0:31] <- undefined
|
||||
//
|
||||
// Value* dividend = b.CreateTrunc(e.gpr_value(i.XO.RA), b.getInt32Ty());
|
||||
// Value* divisor = b.CreateTrunc(e.gpr_value(i.XO.RB), b.getInt32Ty());
|
||||
// jit_value_t dividend = b.CreateTrunc(e.gpr_value(i.XO.RA), b.getInt32Ty());
|
||||
// jit_value_t divisor = b.CreateTrunc(e.gpr_value(i.XO.RB), b.getInt32Ty());
|
||||
//
|
||||
// // Note that we skip the zero handling block and just avoid the divide if
|
||||
// // we are OE=0.
|
||||
|
@ -240,8 +240,8 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
//
|
||||
// // Divide.
|
||||
// b.SetInsertPoint(nonzero_bb);
|
||||
// Value* v = b.CreateUDiv(dividend, divisor);
|
||||
// v = b.CreateZExt(v, b.getInt64Ty());
|
||||
// jit_value_t v = b.CreateUDiv(dividend, divisor);
|
||||
// v = b.CreateZExt(v, jit_type_nint);
|
||||
// e.update_gpr_value(i.XO.RT, v);
|
||||
//
|
||||
// // If we are OE=1 we need to clear the overflow bit.
|
||||
|
@ -295,8 +295,8 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// // overflows. It should be truncating the result, but I'm not sure what LLVM
|
||||
// // does.
|
||||
//
|
||||
// Value* v = b.CreateMul(e.gpr_value(i.D.RA), b.getInt64(XEEXTS16(i.D.DS)));
|
||||
// e.update_gpr_value(i.D.RT, b.CreateTrunc(v, b.getInt64Ty()));
|
||||
// jit_value_t v = b.CreateMul(e.gpr_value(i.D.RA), b.getInt64(XEEXTS16(i.D.DS)));
|
||||
// e.update_gpr_value(i.D.RT, b.CreateTrunc(v, jit_type_nint));
|
||||
//
|
||||
// return 0;
|
||||
//}
|
||||
|
@ -310,8 +310,8 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// return 1;
|
||||
// }
|
||||
//
|
||||
// Value* v = b.CreateMul(b.CreateSExt(e.gpr_value(i.XO.RA), b.getInt64Ty()),
|
||||
// b.CreateSExt(e.gpr_value(i.XO.RB), b.getInt64Ty()));
|
||||
// jit_value_t v = b.CreateMul(b.CreateSExt(e.gpr_value(i.XO.RA), jit_type_nint),
|
||||
// b.CreateSExt(e.gpr_value(i.XO.RB), jit_type_nint));
|
||||
// e.update_gpr_value(i.XO.RT, v);
|
||||
//
|
||||
// if (i.XO.Rc) {
|
||||
|
@ -333,10 +333,10 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// // This may just magically do that...
|
||||
//
|
||||
// Function* ssub_with_overflow = Intrinsic::getDeclaration(
|
||||
// e.gen_module(), Intrinsic::ssub_with_overflow, b.getInt64Ty());
|
||||
// Value* v = b.CreateCall2(ssub_with_overflow,
|
||||
// e.gen_module(), Intrinsic::ssub_with_overflow, jit_type_nint);
|
||||
// jit_value_t v = b.CreateCall2(ssub_with_overflow,
|
||||
// b.getInt64(0), e.gpr_value(i.XO.RA));
|
||||
// Value* v0 = b.CreateExtractValue(v, 0);
|
||||
// jit_value_t v0 = b.CreateExtractValue(v, 0);
|
||||
// e.update_gpr_value(i.XO.RT, v0);
|
||||
// e.update_xer_with_overflow(b.CreateExtractValue(v, 1));
|
||||
//
|
||||
|
@ -348,7 +348,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// return 0;
|
||||
// } else {
|
||||
// // No OE bit setting.
|
||||
// Value* v = b.CreateSub(b.getInt64(0), e.gpr_value(i.XO.RA));
|
||||
// jit_value_t v = b.CreateSub(b.getInt64(0), e.gpr_value(i.XO.RA));
|
||||
// e.update_gpr_value(i.XO.RT, v);
|
||||
//
|
||||
// if (i.XO.Rc) {
|
||||
|
@ -368,10 +368,10 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// // This is a different codepath as we need to use llvm.ssub.with.overflow.
|
||||
//
|
||||
// Function* ssub_with_overflow = Intrinsic::getDeclaration(
|
||||
// e.gen_module(), Intrinsic::ssub_with_overflow, b.getInt64Ty());
|
||||
// Value* v = b.CreateCall2(ssub_with_overflow,
|
||||
// e.gen_module(), Intrinsic::ssub_with_overflow, jit_type_nint);
|
||||
// jit_value_t v = b.CreateCall2(ssub_with_overflow,
|
||||
// e.gpr_value(i.XO.RB), e.gpr_value(i.XO.RA));
|
||||
// Value* v0 = b.CreateExtractValue(v, 0);
|
||||
// jit_value_t v0 = b.CreateExtractValue(v, 0);
|
||||
// e.update_gpr_value(i.XO.RT, v0);
|
||||
// e.update_xer_with_overflow(b.CreateExtractValue(v, 1));
|
||||
//
|
||||
|
@ -383,7 +383,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// return 0;
|
||||
// } else {
|
||||
// // No OE bit setting.
|
||||
// Value* v = b.CreateSub(e.gpr_value(i.XO.RB), e.gpr_value(i.XO.RA));
|
||||
// jit_value_t v = b.CreateSub(e.gpr_value(i.XO.RB), e.gpr_value(i.XO.RA));
|
||||
// e.update_gpr_value(i.XO.RT, v);
|
||||
//
|
||||
// if (i.XO.Rc) {
|
||||
|
@ -404,8 +404,8 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// // RT <- ¬(RA) + EXTS(SI) + 1
|
||||
//
|
||||
// Function* ssub_with_overflow = Intrinsic::getDeclaration(
|
||||
// e.gen_module(), Intrinsic::ssub_with_overflow, b.getInt64Ty());
|
||||
// Value* v = b.CreateCall2(ssub_with_overflow,
|
||||
// e.gen_module(), Intrinsic::ssub_with_overflow, jit_type_nint);
|
||||
// jit_value_t v = b.CreateCall2(ssub_with_overflow,
|
||||
// b.getInt64(XEEXTS16(i.D.DS)), e.gpr_value(i.D.RA));
|
||||
// e.update_gpr_value(i.D.RT, b.CreateExtractValue(v, 0));
|
||||
// e.update_xer_with_carry(b.CreateExtractValue(v, 1));
|
||||
|
@ -419,13 +419,13 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// // TODO(benvanik): possible that the add of rb+ca needs to also check for
|
||||
// // overflow!
|
||||
//
|
||||
// Value* ca = b.CreateAnd(b.CreateLShr(e.xer_value(), 29), 0x1);
|
||||
// jit_value_t ca = b.CreateAnd(b.CreateLShr(e.xer_value(), 29), 0x1);
|
||||
// Function* uadd_with_overflow = Intrinsic::getDeclaration(
|
||||
// e.gen_module(), Intrinsic::uadd_with_overflow, b.getInt64Ty());
|
||||
// Value* v = b.CreateCall2(uadd_with_overflow,
|
||||
// e.gen_module(), Intrinsic::uadd_with_overflow, jit_type_nint);
|
||||
// jit_value_t v = b.CreateCall2(uadd_with_overflow,
|
||||
// b.CreateNeg(e.gpr_value(i.XO.RA)),
|
||||
// b.CreateAdd(e.gpr_value(i.XO.RB), ca));
|
||||
// Value* v0 = b.CreateExtractValue(v, 0);
|
||||
// jit_value_t v0 = b.CreateExtractValue(v, 0);
|
||||
// e.update_gpr_value(i.XO.RT, v0);
|
||||
//
|
||||
// if (i.XO.OE) {
|
||||
|
@ -474,14 +474,14 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// uint32_t BF = i.X.RT >> 2;
|
||||
// uint32_t L = i.X.RT & 1;
|
||||
//
|
||||
// Value* lhs = e.gpr_value(i.X.RA);
|
||||
// Value* rhs = e.gpr_value(i.X.RB);
|
||||
// jit_value_t lhs = e.gpr_value(i.X.RA);
|
||||
// jit_value_t rhs = e.gpr_value(i.X.RB);
|
||||
// if (!L) {
|
||||
// // 32-bit - truncate and sign extend.
|
||||
// lhs = b.CreateTrunc(lhs, b.getInt32Ty());
|
||||
// lhs = b.CreateSExt(lhs, b.getInt64Ty());
|
||||
// lhs = b.CreateSExt(lhs, jit_type_nint);
|
||||
// rhs = b.CreateTrunc(rhs, b.getInt32Ty());
|
||||
// rhs = b.CreateSExt(rhs, b.getInt64Ty());
|
||||
// rhs = b.CreateSExt(rhs, jit_type_nint);
|
||||
// }
|
||||
//
|
||||
// e.update_cr_with_cond(BF, lhs, rhs, true);
|
||||
|
@ -505,14 +505,14 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// uint32_t BF = i.D.RT >> 2;
|
||||
// uint32_t L = i.D.RT & 1;
|
||||
//
|
||||
// Value* lhs = e.gpr_value(i.D.RA);
|
||||
// jit_value_t lhs = e.gpr_value(i.D.RA);
|
||||
// if (!L) {
|
||||
// // 32-bit - truncate and sign extend.
|
||||
// lhs = b.CreateTrunc(lhs, b.getInt32Ty());
|
||||
// lhs = b.CreateSExt(lhs, b.getInt64Ty());
|
||||
// lhs = b.CreateSExt(lhs, jit_type_nint);
|
||||
// }
|
||||
//
|
||||
// Value* rhs = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// jit_value_t rhs = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// e.update_cr_with_cond(BF, lhs, rhs, true);
|
||||
//
|
||||
// return 0;
|
||||
|
@ -536,14 +536,14 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// uint32_t BF = i.X.RT >> 2;
|
||||
// uint32_t L = i.X.RT & 1;
|
||||
//
|
||||
// Value* lhs = e.gpr_value(i.X.RA);
|
||||
// Value* rhs = e.gpr_value(i.X.RB);
|
||||
// jit_value_t lhs = e.gpr_value(i.X.RA);
|
||||
// jit_value_t rhs = e.gpr_value(i.X.RB);
|
||||
// if (!L) {
|
||||
// // 32-bit - truncate and zero extend.
|
||||
// lhs = b.CreateTrunc(lhs, b.getInt32Ty());
|
||||
// lhs = b.CreateZExt(lhs, b.getInt64Ty());
|
||||
// lhs = b.CreateZExt(lhs, jit_type_nint);
|
||||
// rhs = b.CreateTrunc(rhs, b.getInt32Ty());
|
||||
// rhs = b.CreateZExt(rhs, b.getInt64Ty());
|
||||
// rhs = b.CreateZExt(rhs, jit_type_nint);
|
||||
// }
|
||||
//
|
||||
// e.update_cr_with_cond(BF, lhs, rhs, false);
|
||||
|
@ -567,14 +567,14 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// uint32_t BF = i.D.RT >> 2;
|
||||
// uint32_t L = i.D.RT & 1;
|
||||
//
|
||||
// Value* lhs = e.gpr_value(i.D.RA);
|
||||
// jit_value_t lhs = e.gpr_value(i.D.RA);
|
||||
// if (!L) {
|
||||
// // 32-bit - truncate and zero extend.
|
||||
// lhs = b.CreateTrunc(lhs, b.getInt32Ty());
|
||||
// lhs = b.CreateZExt(lhs, b.getInt64Ty());
|
||||
// lhs = b.CreateZExt(lhs, jit_type_nint);
|
||||
// }
|
||||
//
|
||||
// Value* rhs = b.getInt64(i.D.DS);
|
||||
// jit_value_t rhs = b.getInt64(i.D.DS);
|
||||
// e.update_cr_with_cond(BF, lhs, rhs, false);
|
||||
//
|
||||
// return 0;
|
||||
|
@ -586,7 +586,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
//XEEMITTER(andx, 0x7C000038, X )(LibjitEmitter& e, jit_function_t f, InstrData& i) {
|
||||
// // RA <- (RS) & (RB)
|
||||
//
|
||||
// Value* v = b.CreateAnd(e.gpr_value(i.X.RT), e.gpr_value(i.X.RB));
|
||||
// jit_value_t v = b.CreateAnd(e.gpr_value(i.X.RT), e.gpr_value(i.X.RB));
|
||||
// e.update_gpr_value(i.X.RA, v);
|
||||
//
|
||||
// if (i.X.Rc) {
|
||||
|
@ -600,7 +600,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
//XEEMITTER(andcx, 0x7C000078, X )(LibjitEmitter& e, jit_function_t f, InstrData& i) {
|
||||
// // RA <- (RS) & ¬(RB)
|
||||
//
|
||||
// Value* v = b.CreateXor(e.gpr_value(i.X.RB), -1);
|
||||
// jit_value_t v = b.CreateXor(e.gpr_value(i.X.RB), -1);
|
||||
// v = b.CreateAnd(e.gpr_value(i.X.RT), v);
|
||||
// e.update_gpr_value(i.X.RA, v);
|
||||
//
|
||||
|
@ -615,7 +615,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
//XEEMITTER(andix, 0x70000000, D )(LibjitEmitter& e, jit_function_t f, InstrData& i) {
|
||||
// // RA <- (RS) & (i48.0 || UI)
|
||||
//
|
||||
// Value* v = b.CreateAnd(e.gpr_value(i.D.RT), (uint64_t)i.D.DS);
|
||||
// jit_value_t v = b.CreateAnd(e.gpr_value(i.D.RT), (uint64_t)i.D.DS);
|
||||
// e.update_gpr_value(i.D.RA, v);
|
||||
//
|
||||
// // With cr0 update.
|
||||
|
@ -627,7 +627,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
//XEEMITTER(andisx, 0x74000000, D )(LibjitEmitter& e, jit_function_t f, InstrData& i) {
|
||||
// // RA <- (RS) & (i32.0 || UI || i16.0)
|
||||
//
|
||||
// Value* v = b.CreateAnd(e.gpr_value(i.D.RT), ((uint64_t)i.D.DS) << 16);
|
||||
// jit_value_t v = b.CreateAnd(e.gpr_value(i.D.RT), ((uint64_t)i.D.DS) << 16);
|
||||
// e.update_gpr_value(i.D.RA, v);
|
||||
//
|
||||
// // With cr0 update.
|
||||
|
@ -648,16 +648,16 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// // n <- n + 1
|
||||
// // RA <- n - 32
|
||||
//
|
||||
// Value* v = e.gpr_value(i.X.RT);
|
||||
// jit_value_t v = e.gpr_value(i.X.RT);
|
||||
// v = b.CreateTrunc(v, b.getInt32Ty());
|
||||
//
|
||||
// std::vector<Type*> arg_types;
|
||||
// arg_types.push_back(b.getInt32Ty());
|
||||
// Function* ctlz = Intrinsic::getDeclaration(
|
||||
// e.fn()->getParent(), Intrinsic::ctlz, arg_types);
|
||||
// Value* count = b.CreateCall2(ctlz, v, b.getInt1(1));
|
||||
// jit_value_t count = b.CreateCall2(ctlz, v, b.getInt1(1));
|
||||
//
|
||||
// count = b.CreateZExt(count, b.getInt64Ty());
|
||||
// count = b.CreateZExt(count, jit_type_nint);
|
||||
// e.update_gpr_value(i.X.RA, count);
|
||||
//
|
||||
// if (i.X.Rc) {
|
||||
|
@ -678,9 +678,9 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// // RA[56:63] <- (RS)[56:63]
|
||||
// // RA[0:55] <- i56.s
|
||||
//
|
||||
// Value* v = e.gpr_value(i.X.RT);
|
||||
// v = b.CreateTrunc(v, b.getInt8Ty());
|
||||
// v = b.CreateSExt(v, b.getInt64Ty());
|
||||
// jit_value_t v = e.gpr_value(i.X.RT);
|
||||
// v = b.CreateTrunc(v, jit_type_ubyte);
|
||||
// v = b.CreateSExt(v, jit_type_nint);
|
||||
// e.update_gpr_value(i.X.RA, v);
|
||||
//
|
||||
// if (i.X.Rc) {
|
||||
|
@ -709,7 +709,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
//XEEMITTER(norx, 0x7C0000F8, X )(LibjitEmitter& e, jit_function_t f, InstrData& i) {
|
||||
// // RA <- ¬((RS) | (RB))
|
||||
//
|
||||
// Value* v = b.CreateOr(e.gpr_value(i.X.RT), e.gpr_value(i.X.RB));
|
||||
// jit_value_t v = b.CreateOr(e.gpr_value(i.X.RT), e.gpr_value(i.X.RB));
|
||||
// v = b.CreateXor(v, -1);
|
||||
// e.update_gpr_value(i.X.RA, v);
|
||||
//
|
||||
|
@ -724,7 +724,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
//XEEMITTER(orx, 0x7C000378, X )(LibjitEmitter& e, jit_function_t f, InstrData& i) {
|
||||
// // RA <- (RS) | (RB)
|
||||
//
|
||||
// Value* v = b.CreateOr(e.gpr_value(i.X.RT), e.gpr_value(i.X.RB));
|
||||
// jit_value_t v = b.CreateOr(e.gpr_value(i.X.RT), e.gpr_value(i.X.RB));
|
||||
// e.update_gpr_value(i.X.RA, v);
|
||||
//
|
||||
// if (i.X.Rc) {
|
||||
|
@ -743,7 +743,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
//XEEMITTER(ori, 0x60000000, D )(LibjitEmitter& e, jit_function_t f, InstrData& i) {
|
||||
// // RA <- (RS) | (i48.0 || UI)
|
||||
//
|
||||
// Value* v = b.CreateOr(e.gpr_value(i.D.RT), (uint64_t)i.D.DS);
|
||||
// jit_value_t v = b.CreateOr(e.gpr_value(i.D.RT), (uint64_t)i.D.DS);
|
||||
// e.update_gpr_value(i.D.RA, v);
|
||||
//
|
||||
// return 0;
|
||||
|
@ -752,7 +752,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
//XEEMITTER(oris, 0x64000000, D )(LibjitEmitter& e, jit_function_t f, InstrData& i) {
|
||||
// // RA <- (RS) | (i32.0 || UI || i16.0)
|
||||
//
|
||||
// Value* v = b.CreateOr(e.gpr_value(i.D.RT), ((uint64_t)i.D.DS) << 16);
|
||||
// jit_value_t v = b.CreateOr(e.gpr_value(i.D.RT), ((uint64_t)i.D.DS) << 16);
|
||||
// e.update_gpr_value(i.D.RA, v);
|
||||
//
|
||||
// return 0;
|
||||
|
@ -761,7 +761,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
//XEEMITTER(xorx, 0x7C000278, X )(LibjitEmitter& e, jit_function_t f, InstrData& i) {
|
||||
// // RA <- (RS) XOR (RB)
|
||||
//
|
||||
// Value* v = b.CreateXor(e.gpr_value(i.X.RT), e.gpr_value(i.X.RB));
|
||||
// jit_value_t v = b.CreateXor(e.gpr_value(i.X.RT), e.gpr_value(i.X.RB));
|
||||
// e.update_gpr_value(i.X.RA, v);
|
||||
//
|
||||
// if (i.X.Rc) {
|
||||
|
@ -775,7 +775,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
//XEEMITTER(xori, 0x68000000, D )(LibjitEmitter& e, jit_function_t f, InstrData& i) {
|
||||
// // RA <- (RS) XOR (i48.0 || UI)
|
||||
//
|
||||
// Value* v = b.CreateXor(e.gpr_value(i.D.RT), (uint64_t)i.D.DS);
|
||||
// jit_value_t v = b.CreateXor(e.gpr_value(i.D.RT), (uint64_t)i.D.DS);
|
||||
// e.update_gpr_value(i.D.RA, v);
|
||||
//
|
||||
// return 0;
|
||||
|
@ -784,7 +784,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
//XEEMITTER(xoris, 0x6C000000, D )(LibjitEmitter& e, jit_function_t f, InstrData& i) {
|
||||
// // RA <- (RS) XOR (i32.0 || UI || i16.0)
|
||||
//
|
||||
// Value* v = b.CreateXor(e.gpr_value(i.D.RT), ((uint64_t)i.D.DS) << 16);
|
||||
// jit_value_t v = b.CreateXor(e.gpr_value(i.D.RT), ((uint64_t)i.D.DS) << 16);
|
||||
// e.update_gpr_value(i.D.RA, v);
|
||||
//
|
||||
// return 0;
|
||||
|
@ -818,7 +818,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// // uint32_t sh = (i.MD.SH5 << 5) | i.MD.SH;
|
||||
// // uint32_t mb = (i.MD.MB5 << 5) | i.MD.MB;
|
||||
//
|
||||
// // Value* v = e.gpr_value(i.MD.RS);
|
||||
// // jit_value_t v = e.gpr_value(i.MD.RS);
|
||||
// // if (sh) {
|
||||
// // v = // rotate by sh
|
||||
// // }
|
||||
|
@ -853,7 +853,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// // RA <- r&m | (RA)&¬m
|
||||
//
|
||||
// // ROTL32(x, y) = rotl(i64.(x||x), y)
|
||||
// Value* v = b.CreateAnd(e.gpr_value(i.M.RT), UINT32_MAX);
|
||||
// jit_value_t v = b.CreateAnd(e.gpr_value(i.M.RT), UINT32_MAX);
|
||||
// v = b.CreateOr(b.CreateShl(v, 32), v);
|
||||
// // (v << shift) | (v >> (32 - shift));
|
||||
// v = b.CreateOr(b.CreateShl(v, i.M.SH), b.CreateLShr(v, 32 - i.M.SH));
|
||||
|
@ -880,10 +880,10 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// // Which seems to just select some bits and set cr0 for use with a branch.
|
||||
// // We can detect this and do less work.
|
||||
// if (!i.M.SH) {
|
||||
// Value* v = b.CreateAnd(
|
||||
// jit_value_t v = b.CreateAnd(
|
||||
// b.CreateTrunc(e.gpr_value(i.M.RT), b.getInt32Ty()),
|
||||
// b.getInt32((uint32_t)XEMASK(i.M.MB + 32, i.M.ME + 32)));
|
||||
// v = b.CreateZExt(v, b.getInt64Ty());
|
||||
// v = b.CreateZExt(v, jit_type_nint);
|
||||
// e.update_gpr_value(i.M.RA, v);
|
||||
// if (i.M.Rc) {
|
||||
// // With cr0 update.
|
||||
|
@ -893,7 +893,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// }
|
||||
//
|
||||
// // ROTL32(x, y) = rotl(i64.(x||x), y)
|
||||
// Value* v = b.CreateAnd(e.gpr_value(i.M.RT), UINT32_MAX);
|
||||
// jit_value_t v = b.CreateAnd(e.gpr_value(i.M.RT), UINT32_MAX);
|
||||
// v = b.CreateOr(b.CreateShl(v, 32), v);
|
||||
// // (v << shift) | (v >> (32 - shift));
|
||||
// v = b.CreateOr(b.CreateShl(v, i.M.SH), b.CreateLShr(v, 32 - i.M.SH));
|
||||
|
@ -930,7 +930,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// // m <- i64.0
|
||||
// // RA <- r & m
|
||||
//
|
||||
// Value* v = b.CreateShl(e.gpr_value(i.X.RT), e.gpr_value(i.X.RB));
|
||||
// jit_value_t v = b.CreateShl(e.gpr_value(i.X.RT), e.gpr_value(i.X.RB));
|
||||
// v = b.CreateAnd(v, UINT32_MAX);
|
||||
// e.update_gpr_value(i.X.RA, v);
|
||||
//
|
||||
|
@ -965,11 +965,11 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// // RA <- r&m | (i64.s)&¬m
|
||||
// // CA <- s & ((r&¬m)[32:63]≠0)
|
||||
//
|
||||
// Value* rs64 = e.gpr_value(i.X.RT);
|
||||
// Value* rs32 = b.CreateTrunc(rs64, b.getInt32Ty());
|
||||
// jit_value_t rs64 = e.gpr_value(i.X.RT);
|
||||
// jit_value_t rs32 = b.CreateTrunc(rs64, b.getInt32Ty());
|
||||
//
|
||||
// Value* v;
|
||||
// Value* ca;
|
||||
// jit_value_t v;
|
||||
// jit_value_t ca;
|
||||
// if (!i.X.RB) {
|
||||
// // No shift, just a fancy sign extend and CA clearer.
|
||||
// v = rs32;
|
||||
|
@ -982,7 +982,7 @@ XEEMITTER(addx, 0x7C000214, XO )(LibjitEmitter& e, jit_function_t f, Ins
|
|||
// ca = b.CreateAnd(b.CreateICmpSLT(v, b.getInt32(0)),
|
||||
// b.CreateICmpSLT(rs64, b.getInt64(0)));
|
||||
// }
|
||||
// v = b.CreateSExt(v, b.getInt64Ty());
|
||||
// v = b.CreateSExt(v, jit_type_nint);
|
||||
// e.update_gpr_value(i.X.RA, v);
|
||||
// e.update_xer_with_carry(ca);
|
||||
//
|
||||
|
|
|
@ -30,7 +30,7 @@ namespace libjit {
|
|||
// // NOTE: we avoid spilling registers until we know that the target is not
|
||||
// // a basic block within this function.
|
||||
|
||||
// Value* target;
|
||||
// jit_value_t target;
|
||||
// switch (reg) {
|
||||
// case kXEPPCRegLR:
|
||||
// target = e.lr_value();
|
||||
|
@ -51,7 +51,7 @@ namespace libjit {
|
|||
// BasicBlock* next_block = e.GetNextBasicBlock();
|
||||
// BasicBlock* mismatch_bb = BasicBlock::Create(*e.context(), "lr_mismatch",
|
||||
// e.fn(), next_block);
|
||||
// Value* lr_cmp = b.CreateICmpEQ(target, ++(e.fn()->arg_begin()));
|
||||
// jit_value_t lr_cmp = b.CreateICmpEQ(target, ++(e.fn()->arg_begin()));
|
||||
// // The return block will spill registers for us.
|
||||
// b.CreateCondBr(lr_cmp, e.GetReturnBasicBlock(), mismatch_bb);
|
||||
// b.SetInsertPoint(mismatch_bb);
|
||||
|
@ -86,7 +86,7 @@ namespace libjit {
|
|||
// XEASSERTNOTNULL(fn_block->outgoing_function);
|
||||
// Function* target_fn = e.GetFunction(fn_block->outgoing_function);
|
||||
// Function::arg_iterator args = e.fn()->arg_begin();
|
||||
// Value* state_ptr = args;
|
||||
// jit_value_t state_ptr = args;
|
||||
// BasicBlock* next_bb = e.GetNextBasicBlock();
|
||||
// if (!lk || !next_bb) {
|
||||
// // Tail. No need to refill the local register values, just return.
|
||||
|
@ -169,12 +169,12 @@ namespace libjit {
|
|||
// e.update_lr_value(b.getInt32(i.address + 4));
|
||||
// }
|
||||
|
||||
// Value* ctr_ok = NULL;
|
||||
// jit_value_t ctr_ok = NULL;
|
||||
// if (XESELECTBITS(i.B.BO, 2, 2)) {
|
||||
// // Ignore ctr.
|
||||
// } else {
|
||||
// // Decrement counter.
|
||||
// Value* ctr = e.ctr_value();
|
||||
// jit_value_t ctr = e.ctr_value();
|
||||
// ctr = b.CreateSub(ctr, b.getInt64(1));
|
||||
// e.update_ctr_value(ctr);
|
||||
|
||||
|
@ -186,11 +186,11 @@ namespace libjit {
|
|||
// }
|
||||
// }
|
||||
|
||||
// Value* cond_ok = NULL;
|
||||
// jit_value_t cond_ok = NULL;
|
||||
// if (XESELECTBITS(i.B.BO, 4, 4)) {
|
||||
// // Ignore cond.
|
||||
// } else {
|
||||
// Value* cr = e.cr_value(i.B.BI >> 2);
|
||||
// jit_value_t cr = e.cr_value(i.B.BI >> 2);
|
||||
// cr = b.CreateAnd(cr, 1 << (i.B.BI & 3));
|
||||
// if (XESELECTBITS(i.B.BO, 3, 3)) {
|
||||
// cond_ok = b.CreateICmpNE(cr, b.getInt64(0));
|
||||
|
@ -200,7 +200,7 @@ namespace libjit {
|
|||
// }
|
||||
|
||||
// // We do a bit of optimization here to make the llvm assembly easier to read.
|
||||
// Value* ok = NULL;
|
||||
// jit_value_t ok = NULL;
|
||||
// if (ctr_ok && cond_ok) {
|
||||
// ok = b.CreateAnd(ctr_ok, cond_ok);
|
||||
// } else if (ctr_ok) {
|
||||
|
@ -255,11 +255,11 @@ namespace libjit {
|
|||
// e.update_lr_value(b.getInt32(i.address + 4));
|
||||
// }
|
||||
|
||||
// Value* cond_ok = NULL;
|
||||
// jit_value_t cond_ok = NULL;
|
||||
// if (XESELECTBITS(i.XL.BO, 4, 4)) {
|
||||
// // Ignore cond.
|
||||
// } else {
|
||||
// Value* cr = e.cr_value(i.XL.BI >> 2);
|
||||
// jit_value_t cr = e.cr_value(i.XL.BI >> 2);
|
||||
// cr = b.CreateAnd(cr, 1 << (i.XL.BI & 3));
|
||||
// if (XESELECTBITS(i.XL.BO, 3, 3)) {
|
||||
// cond_ok = b.CreateICmpNE(cr, b.getInt64(0));
|
||||
|
@ -269,7 +269,7 @@ namespace libjit {
|
|||
// }
|
||||
|
||||
// // We do a bit of optimization here to make the llvm assembly easier to read.
|
||||
// Value* ok = NULL;
|
||||
// jit_value_t ok = NULL;
|
||||
// if (cond_ok) {
|
||||
// ok = cond_ok;
|
||||
// }
|
||||
|
@ -318,12 +318,12 @@ namespace libjit {
|
|||
// e.update_lr_value(b.getInt32(i.address + 4));
|
||||
// }
|
||||
|
||||
// Value* ctr_ok = NULL;
|
||||
// jit_value_t ctr_ok = NULL;
|
||||
// if (XESELECTBITS(i.XL.BO, 2, 2)) {
|
||||
// // Ignore ctr.
|
||||
// } else {
|
||||
// // Decrement counter.
|
||||
// Value* ctr = e.ctr_value();
|
||||
// jit_value_t ctr = e.ctr_value();
|
||||
// ctr = b.CreateSub(ctr, b.getInt64(1));
|
||||
|
||||
// // Ctr check.
|
||||
|
@ -334,11 +334,11 @@ namespace libjit {
|
|||
// }
|
||||
// }
|
||||
|
||||
// Value* cond_ok = NULL;
|
||||
// jit_value_t cond_ok = NULL;
|
||||
// if (XESELECTBITS(i.XL.BO, 4, 4)) {
|
||||
// // Ignore cond.
|
||||
// } else {
|
||||
// Value* cr = e.cr_value(i.XL.BI >> 2);
|
||||
// jit_value_t cr = e.cr_value(i.XL.BI >> 2);
|
||||
// cr = b.CreateAnd(cr, 1 << (i.XL.BI & 3));
|
||||
// if (XESELECTBITS(i.XL.BO, 3, 3)) {
|
||||
// cond_ok = b.CreateICmpNE(cr, b.getInt64(0));
|
||||
|
@ -348,7 +348,7 @@ namespace libjit {
|
|||
// }
|
||||
|
||||
// // We do a bit of optimization here to make the llvm assembly easier to read.
|
||||
// Value* ok = NULL;
|
||||
// jit_value_t ok = NULL;
|
||||
// if (ctr_ok && cond_ok) {
|
||||
// ok = b.CreateAnd(ctr_ok, cond_ok);
|
||||
// } else if (ctr_ok) {
|
||||
|
@ -441,7 +441,7 @@ namespace libjit {
|
|||
// // Trap (A-25)
|
||||
|
||||
// int XeEmitTrap(LibjitEmitter& e, jit_function_t f, InstrData& i,
|
||||
// Value* va, Value* vb, uint32_t TO) {
|
||||
// jit_value_t va, jit_value_t vb, uint32_t TO) {
|
||||
// // if (a < b) & TO[0] then TRAP
|
||||
// // if (a > b) & TO[1] then TRAP
|
||||
// // if (a = b) & TO[2] then TRAP
|
||||
|
@ -488,35 +488,35 @@ namespace libjit {
|
|||
// // a < b
|
||||
// BasicBlock* bb = *(it++);
|
||||
// b.SetInsertPoint(bb);
|
||||
// Value* cmp = b.CreateICmpSLT(va, vb);
|
||||
// jit_value_t cmp = b.CreateICmpSLT(va, vb);
|
||||
// b.CreateCondBr(cmp, trap_bb, *it);
|
||||
// }
|
||||
// if (TO & (1 << 3)) {
|
||||
// // a > b
|
||||
// BasicBlock* bb = *(it++);
|
||||
// b.SetInsertPoint(bb);
|
||||
// Value* cmp = b.CreateICmpSGT(va, vb);
|
||||
// jit_value_t cmp = b.CreateICmpSGT(va, vb);
|
||||
// b.CreateCondBr(cmp, trap_bb, *it);
|
||||
// }
|
||||
// if (TO & (1 << 2)) {
|
||||
// // a = b
|
||||
// BasicBlock* bb = *(it++);
|
||||
// b.SetInsertPoint(bb);
|
||||
// Value* cmp = b.CreateICmpEQ(va, vb);
|
||||
// jit_value_t cmp = b.CreateICmpEQ(va, vb);
|
||||
// b.CreateCondBr(cmp, trap_bb, *it);
|
||||
// }
|
||||
// if (TO & (1 << 1)) {
|
||||
// // a <u b
|
||||
// BasicBlock* bb = *(it++);
|
||||
// b.SetInsertPoint(bb);
|
||||
// Value* cmp = b.CreateICmpULT(va, vb);
|
||||
// jit_value_t cmp = b.CreateICmpULT(va, vb);
|
||||
// b.CreateCondBr(cmp, trap_bb, *it);
|
||||
// }
|
||||
// if (TO & (1 << 0)) {
|
||||
// // a >u b
|
||||
// BasicBlock* bb = *(it++);
|
||||
// b.SetInsertPoint(bb);
|
||||
// Value* cmp = b.CreateICmpUGT(va, vb);
|
||||
// jit_value_t cmp = b.CreateICmpUGT(va, vb);
|
||||
// b.CreateCondBr(cmp, trap_bb, *it);
|
||||
// }
|
||||
|
||||
|
@ -573,10 +573,10 @@ namespace libjit {
|
|||
// return XeEmitTrap(e, b, i,
|
||||
// b.CreateSExt(b.CreateTrunc(e.gpr_value(i.X.RA),
|
||||
// b.getInt32Ty()),
|
||||
// b.getInt64Ty()),
|
||||
// jit_type_nint),
|
||||
// b.CreateSExt(b.CreateTrunc(e.gpr_value(i.X.RB),
|
||||
// b.getInt32Ty()),
|
||||
// b.getInt64Ty()),
|
||||
// jit_type_nint),
|
||||
// i.X.RT);
|
||||
// }
|
||||
|
||||
|
@ -590,7 +590,7 @@ namespace libjit {
|
|||
// return XeEmitTrap(e, b, i,
|
||||
// b.CreateSExt(b.CreateTrunc(e.gpr_value(i.D.RA),
|
||||
// b.getInt32Ty()),
|
||||
// b.getInt64Ty()),
|
||||
// jit_type_nint),
|
||||
// b.getInt64(XEEXTS16(i.D.DS)),
|
||||
// i.D.RT);
|
||||
// }
|
||||
|
@ -611,7 +611,7 @@ namespace libjit {
|
|||
// // RT <- i32.0 || SPR(n)
|
||||
|
||||
// const uint32_t n = ((i.XFX.spr & 0x1F) << 5) | ((i.XFX.spr >> 5) & 0x1F);
|
||||
// Value* v = NULL;
|
||||
// jit_value_t v = NULL;
|
||||
// switch (n) {
|
||||
// case 1:
|
||||
// // XER
|
||||
|
@ -652,7 +652,7 @@ namespace libjit {
|
|||
// // else
|
||||
// // SPR(n) <- (RS)[32:63]
|
||||
|
||||
// Value* v = e.gpr_value(i.XFX.RT);
|
||||
// jit_value_t v = e.gpr_value(i.XFX.RT);
|
||||
|
||||
// const uint32_t n = ((i.XFX.spr & 0x1F) << 5) | ((i.XFX.spr >> 5) & 0x1F);
|
||||
// switch (n) {
|
||||
|
|
|
@ -29,11 +29,11 @@ namespace libjit {
|
|||
// // EA <- b + EXTS(D)
|
||||
// // RT <- i56.0 || MEM(EA, 1)
|
||||
|
||||
// Value* ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// jit_value_t ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// if (i.D.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.D.RA), ea);
|
||||
// }
|
||||
// Value* v = e.ReadMemory(i.address, ea, 1, false);
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 1, false);
|
||||
// e.update_gpr_value(i.D.RT, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -44,8 +44,8 @@ namespace libjit {
|
|||
// // RT <- i56.0 || MEM(EA, 1)
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.D.RA), b.getInt64(XEEXTS16(i.D.DS)));
|
||||
// Value* v = e.ReadMemory(i.address, ea, 1, false);
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.D.RA), b.getInt64(XEEXTS16(i.D.DS)));
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 1, false);
|
||||
// e.update_gpr_value(i.D.RT, v);
|
||||
// e.update_gpr_value(i.D.RA, ea);
|
||||
|
||||
|
@ -57,8 +57,8 @@ namespace libjit {
|
|||
// // RT <- i56.0 || MEM(EA, 1)
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// Value* v = e.ReadMemory(i.address, ea, 1, false);
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 1, false);
|
||||
// e.update_gpr_value(i.X.RT, v);
|
||||
// e.update_gpr_value(i.X.RA, ea);
|
||||
|
||||
|
@ -73,11 +73,11 @@ namespace libjit {
|
|||
// // EA <- b + (RB)
|
||||
// // RT <- i56.0 || MEM(EA, 1)
|
||||
|
||||
// Value* ea = e.gpr_value(i.X.RB);
|
||||
// jit_value_t ea = e.gpr_value(i.X.RB);
|
||||
// if (i.X.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.X.RA), ea);
|
||||
// }
|
||||
// Value* v = e.ReadMemory(i.address, ea, 1, false);
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 1, false);
|
||||
// e.update_gpr_value(i.X.RT, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -91,11 +91,11 @@ namespace libjit {
|
|||
// // EA <- b + EXTS(DS || 0b00)
|
||||
// // RT <- MEM(EA, 8)
|
||||
|
||||
// Value* ea = b.getInt64(XEEXTS16(i.DS.DS << 2));
|
||||
// jit_value_t ea = b.getInt64(XEEXTS16(i.DS.DS << 2));
|
||||
// if (i.DS.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.DS.RA), ea);
|
||||
// }
|
||||
// Value* v = e.ReadMemory(i.address, ea, 8, false);
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 8, false);
|
||||
// e.update_gpr_value(i.DS.RT, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -106,9 +106,9 @@ namespace libjit {
|
|||
// // RT <- MEM(EA, 8)
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.DS.RA),
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.DS.RA),
|
||||
// b.getInt64(XEEXTS16(i.DS.DS << 2)));
|
||||
// Value* v = e.ReadMemory(i.address, ea, 8, false);
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 8, false);
|
||||
// e.update_gpr_value(i.DS.RT, v);
|
||||
// e.update_gpr_value(i.DS.RA, ea);
|
||||
|
||||
|
@ -133,12 +133,12 @@ namespace libjit {
|
|||
// // EA <- b + EXTS(D)
|
||||
// // RT <- EXTS(MEM(EA, 2))
|
||||
|
||||
// Value* ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// jit_value_t ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// if (i.D.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.D.RA), ea);
|
||||
// }
|
||||
// Value* v = b.CreateSExt(e.ReadMemory(i.address, ea, 2, false),
|
||||
// b.getInt64Ty());
|
||||
// jit_value_t v = b.CreateSExt(e.ReadMemory(i.address, ea, 2, false),
|
||||
// jit_type_nint);
|
||||
// e.update_gpr_value(i.D.RT, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -162,12 +162,12 @@ namespace libjit {
|
|||
// // EA <- b + (RB)
|
||||
// // RT <- EXTS(MEM(EA, 2))
|
||||
|
||||
// Value* ea = e.gpr_value(i.X.RB);
|
||||
// jit_value_t ea = e.gpr_value(i.X.RB);
|
||||
// if (i.X.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.X.RA), ea);
|
||||
// }
|
||||
// Value* v = b.CreateSExt(e.ReadMemory(i.address, ea, 2, false),
|
||||
// b.getInt64Ty());
|
||||
// jit_value_t v = b.CreateSExt(e.ReadMemory(i.address, ea, 2, false),
|
||||
// jit_type_nint);
|
||||
// e.update_gpr_value(i.X.RT, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -181,11 +181,11 @@ namespace libjit {
|
|||
// // EA <- b + EXTS(D)
|
||||
// // RT <- i48.0 || MEM(EA, 2)
|
||||
|
||||
// Value* ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// jit_value_t ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// if (i.D.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.D.RA), ea);
|
||||
// }
|
||||
// Value* v = e.ReadMemory(i.address, ea, 2, false);
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 2, false);
|
||||
// e.update_gpr_value(i.D.RT, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -196,8 +196,8 @@ namespace libjit {
|
|||
// // RT <- i48.0 || MEM(EA, 2)
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.D.RA), b.getInt64(XEEXTS16(i.D.DS)));
|
||||
// Value* v = e.ReadMemory(i.address, ea, 2, false);
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.D.RA), b.getInt64(XEEXTS16(i.D.DS)));
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 2, false);
|
||||
// e.update_gpr_value(i.D.RT, v);
|
||||
// e.update_gpr_value(i.D.RA, ea);
|
||||
|
||||
|
@ -209,8 +209,8 @@ namespace libjit {
|
|||
// // RT <- i48.0 || MEM(EA, 2)
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// Value* v = e.ReadMemory(i.address, ea, 2, false);
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 2, false);
|
||||
// e.update_gpr_value(i.X.RT, v);
|
||||
// e.update_gpr_value(i.X.RA, ea);
|
||||
|
||||
|
@ -225,11 +225,11 @@ namespace libjit {
|
|||
// // EA <- b + (RB)
|
||||
// // RT <- i48.0 || MEM(EA, 2)
|
||||
|
||||
// Value* ea = e.gpr_value(i.X.RB);
|
||||
// jit_value_t ea = e.gpr_value(i.X.RB);
|
||||
// if (i.X.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.X.RA), ea);
|
||||
// }
|
||||
// Value* v = e.ReadMemory(i.address, ea, 2, false);
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 2, false);
|
||||
// e.update_gpr_value(i.X.RT, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -243,12 +243,12 @@ namespace libjit {
|
|||
// // EA <- b + EXTS(D || 00)
|
||||
// // RT <- EXTS(MEM(EA, 4))
|
||||
|
||||
// Value* ea = b.getInt64(XEEXTS16(i.DS.DS << 2));
|
||||
// jit_value_t ea = b.getInt64(XEEXTS16(i.DS.DS << 2));
|
||||
// if (i.DS.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.DS.RA), ea);
|
||||
// }
|
||||
// Value* v = b.CreateSExt(e.ReadMemory(i.address, ea, 4, false),
|
||||
// b.getInt64Ty());
|
||||
// jit_value_t v = b.CreateSExt(e.ReadMemory(i.address, ea, 4, false),
|
||||
// jit_type_nint);
|
||||
// e.update_gpr_value(i.DS.RT, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -259,9 +259,9 @@ namespace libjit {
|
|||
// // RT <- EXTS(MEM(EA, 4))
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// Value* v = b.CreateSExt(e.ReadMemory(i.address, ea, 4, false),
|
||||
// b.getInt64Ty());
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// jit_value_t v = b.CreateSExt(e.ReadMemory(i.address, ea, 4, false),
|
||||
// jit_type_nint);
|
||||
// e.update_gpr_value(i.X.RT, v);
|
||||
// e.update_gpr_value(i.X.RA, ea);
|
||||
|
||||
|
@ -276,12 +276,12 @@ namespace libjit {
|
|||
// // EA <- b + (RB)
|
||||
// // RT <- EXTS(MEM(EA, 4))
|
||||
|
||||
// Value* ea = e.gpr_value(i.X.RB);
|
||||
// jit_value_t ea = e.gpr_value(i.X.RB);
|
||||
// if (i.X.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.X.RA), ea);
|
||||
// }
|
||||
// Value* v = b.CreateSExt(e.ReadMemory(i.address, ea, 4, false),
|
||||
// b.getInt64Ty());
|
||||
// jit_value_t v = b.CreateSExt(e.ReadMemory(i.address, ea, 4, false),
|
||||
// jit_type_nint);
|
||||
// e.update_gpr_value(i.X.RT, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -295,11 +295,11 @@ namespace libjit {
|
|||
// // EA <- b + EXTS(D)
|
||||
// // RT <- i32.0 || MEM(EA, 4)
|
||||
|
||||
// Value* ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// jit_value_t ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// if (i.D.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.D.RA), ea);
|
||||
// }
|
||||
// Value* v = e.ReadMemory(i.address, ea, 4, false);
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 4, false);
|
||||
// e.update_gpr_value(i.D.RT, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -310,8 +310,8 @@ namespace libjit {
|
|||
// // RT <- i32.0 || MEM(EA, 4)
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.D.RA), b.getInt64(XEEXTS16(i.D.DS)));
|
||||
// Value* v = e.ReadMemory(i.address, ea, 4, false);
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.D.RA), b.getInt64(XEEXTS16(i.D.DS)));
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 4, false);
|
||||
// e.update_gpr_value(i.D.RT, v);
|
||||
// e.update_gpr_value(i.D.RA, ea);
|
||||
|
||||
|
@ -323,8 +323,8 @@ namespace libjit {
|
|||
// // RT <- i32.0 || MEM(EA, 4)
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// Value* v = e.ReadMemory(i.address, ea, 4, false);
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 4, false);
|
||||
// e.update_gpr_value(i.X.RT, v);
|
||||
// e.update_gpr_value(i.X.RA, ea);
|
||||
|
||||
|
@ -339,11 +339,11 @@ namespace libjit {
|
|||
// // EA <- b + (RB)
|
||||
// // RT <- i32.0 || MEM(EA, 4)
|
||||
|
||||
// Value* ea = e.gpr_value(i.X.RB);
|
||||
// jit_value_t ea = e.gpr_value(i.X.RB);
|
||||
// if (i.X.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.X.RA), ea);
|
||||
// }
|
||||
// Value* v = e.ReadMemory(i.address, ea, 4, false);
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 4, false);
|
||||
// e.update_gpr_value(i.X.RT, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -360,11 +360,11 @@ namespace libjit {
|
|||
// // EA <- b + EXTS(D)
|
||||
// // MEM(EA, 1) <- (RS)[56:63]
|
||||
|
||||
// Value* ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// jit_value_t ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// if (i.D.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.D.RA), ea);
|
||||
// }
|
||||
// Value* v = e.gpr_value(i.D.RT);
|
||||
// jit_value_t v = e.gpr_value(i.D.RT);
|
||||
// e.WriteMemory(i.address, ea, 1, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -375,8 +375,8 @@ namespace libjit {
|
|||
// // MEM(EA, 1) <- (RS)[56:63]
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.D.RA), b.getInt64(XEEXTS16(i.D.DS)));
|
||||
// Value* v = e.gpr_value(i.D.RT);
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.D.RA), b.getInt64(XEEXTS16(i.D.DS)));
|
||||
// jit_value_t v = e.gpr_value(i.D.RT);
|
||||
// e.WriteMemory(i.address, ea, 1, v);
|
||||
// e.update_gpr_value(i.D.RA, ea);
|
||||
|
||||
|
@ -388,8 +388,8 @@ namespace libjit {
|
|||
// // MEM(EA, 1) <- (RS)[56:63]
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// Value* v = e.gpr_value(i.X.RT);
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// jit_value_t v = e.gpr_value(i.X.RT);
|
||||
// e.WriteMemory(i.address, ea, 1, v);
|
||||
// e.update_gpr_value(i.X.RA, ea);
|
||||
|
||||
|
@ -404,11 +404,11 @@ namespace libjit {
|
|||
// // EA <- b + (RB)
|
||||
// // MEM(EA, 1) <- (RS)[56:63]
|
||||
|
||||
// Value* ea = e.gpr_value(i.X.RB);
|
||||
// jit_value_t ea = e.gpr_value(i.X.RB);
|
||||
// if (i.D.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.X.RA), ea);
|
||||
// }
|
||||
// Value* v = e.gpr_value(i.X.RT);
|
||||
// jit_value_t v = e.gpr_value(i.X.RT);
|
||||
// e.WriteMemory(i.address, ea, 1, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -422,11 +422,11 @@ namespace libjit {
|
|||
// // EA <- b + EXTS(DS || 0b00)
|
||||
// // MEM(EA, 8) <- (RS)
|
||||
|
||||
// Value* ea = b.getInt64(XEEXTS16(i.DS.DS << 2));
|
||||
// jit_value_t ea = b.getInt64(XEEXTS16(i.DS.DS << 2));
|
||||
// if (i.DS.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.DS.RA), ea);
|
||||
// }
|
||||
// Value* v = e.gpr_value(i.DS.RT);
|
||||
// jit_value_t v = e.gpr_value(i.DS.RT);
|
||||
// e.WriteMemory(i.address, ea, 8, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -437,9 +437,9 @@ namespace libjit {
|
|||
// // MEM(EA, 8) <- (RS)
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.DS.RA),
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.DS.RA),
|
||||
// b.getInt64(XEEXTS16(i.DS.DS << 2)));
|
||||
// Value* v = e.gpr_value(i.DS.RT);
|
||||
// jit_value_t v = e.gpr_value(i.DS.RT);
|
||||
// e.WriteMemory(i.address, ea, 8, v);
|
||||
// e.update_gpr_value(i.DS.RA, ea);
|
||||
|
||||
|
@ -454,11 +454,11 @@ namespace libjit {
|
|||
// // EA <- b + (RB)
|
||||
// // MEM(EA, 8) <- (RS)
|
||||
|
||||
// Value* ea = e.gpr_value(i.X.RB);
|
||||
// jit_value_t ea = e.gpr_value(i.X.RB);
|
||||
// if (i.X.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.X.RA), ea);
|
||||
// }
|
||||
// Value* v = e.gpr_value(i.X.RT);
|
||||
// jit_value_t v = e.gpr_value(i.X.RT);
|
||||
// e.WriteMemory(i.address, ea, 8, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -469,8 +469,8 @@ namespace libjit {
|
|||
// // MEM(EA, 8) <- (RS)
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// Value* v = e.gpr_value(i.X.RT);
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// jit_value_t v = e.gpr_value(i.X.RT);
|
||||
// e.WriteMemory(i.address, ea, 8, v);
|
||||
// e.update_gpr_value(i.X.RA, ea);
|
||||
|
||||
|
@ -485,11 +485,11 @@ namespace libjit {
|
|||
// // EA <- b + EXTS(D)
|
||||
// // MEM(EA, 2) <- (RS)[48:63]
|
||||
|
||||
// Value* ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// jit_value_t ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// if (i.D.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.D.RA), ea);
|
||||
// }
|
||||
// Value* v = e.gpr_value(i.D.RT);
|
||||
// jit_value_t v = e.gpr_value(i.D.RT);
|
||||
// e.WriteMemory(i.address, ea, 2, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -500,9 +500,9 @@ namespace libjit {
|
|||
// // MEM(EA, 2) <- (RS)[48:63]
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.D.RA),
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.D.RA),
|
||||
// b.getInt64(XEEXTS16(i.D.DS)));
|
||||
// Value* v = e.gpr_value(i.D.RT);
|
||||
// jit_value_t v = e.gpr_value(i.D.RT);
|
||||
// e.WriteMemory(i.address, ea, 2, v);
|
||||
// e.update_gpr_value(i.D.RA, ea);
|
||||
|
||||
|
@ -514,8 +514,8 @@ namespace libjit {
|
|||
// // MEM(EA, 2) <- (RS)[48:63]
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// Value* v = e.gpr_value(i.X.RT);
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// jit_value_t v = e.gpr_value(i.X.RT);
|
||||
// e.WriteMemory(i.address, ea, 2, v);
|
||||
// e.update_gpr_value(i.X.RA, ea);
|
||||
|
||||
|
@ -530,11 +530,11 @@ namespace libjit {
|
|||
// // EA <- b + (RB)
|
||||
// // MEM(EA, 2) <- (RS)[48:63]
|
||||
|
||||
// Value* ea = e.gpr_value(i.X.RB);
|
||||
// jit_value_t ea = e.gpr_value(i.X.RB);
|
||||
// if (i.D.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.X.RA), ea);
|
||||
// }
|
||||
// Value* v = e.gpr_value(i.X.RT);
|
||||
// jit_value_t v = e.gpr_value(i.X.RT);
|
||||
// e.WriteMemory(i.address, ea, 2, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -548,11 +548,11 @@ namespace libjit {
|
|||
// // EA <- b + EXTS(D)
|
||||
// // MEM(EA, 4) <- (RS)[32:63]
|
||||
|
||||
// Value* ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// jit_value_t ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// if (i.D.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.D.RA), ea);
|
||||
// }
|
||||
// Value* v = e.gpr_value(i.D.RT);
|
||||
// jit_value_t v = e.gpr_value(i.D.RT);
|
||||
// e.WriteMemory(i.address, ea, 4, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -563,9 +563,9 @@ namespace libjit {
|
|||
// // MEM(EA, 4) <- (RS)[32:63]
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.D.RA),
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.D.RA),
|
||||
// b.getInt64(XEEXTS16(i.D.DS)));
|
||||
// Value* v = e.gpr_value(i.D.RT);
|
||||
// jit_value_t v = e.gpr_value(i.D.RT);
|
||||
// e.WriteMemory(i.address, ea, 4, v);
|
||||
// e.update_gpr_value(i.D.RA, ea);
|
||||
|
||||
|
@ -577,8 +577,8 @@ namespace libjit {
|
|||
// // MEM(EA, 4) <- (RS)[32:63]
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// Value* v = e.gpr_value(i.X.RT);
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// jit_value_t v = e.gpr_value(i.X.RT);
|
||||
// e.WriteMemory(i.address, ea, 4, v);
|
||||
// e.update_gpr_value(i.X.RA, ea);
|
||||
|
||||
|
@ -593,11 +593,11 @@ namespace libjit {
|
|||
// // EA <- b + (RB)
|
||||
// // MEM(EA, 4) <- (RS)[32:63]
|
||||
|
||||
// Value* ea = e.gpr_value(i.X.RB);
|
||||
// jit_value_t ea = e.gpr_value(i.X.RB);
|
||||
// if (i.X.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.X.RA), ea);
|
||||
// }
|
||||
// Value* v = e.gpr_value(i.X.RT);
|
||||
// jit_value_t v = e.gpr_value(i.X.RT);
|
||||
// e.WriteMemory(i.address, ea, 4, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -703,11 +703,11 @@ namespace libjit {
|
|||
|
||||
// // TODO(benvanik): make this right
|
||||
|
||||
// Value* ea = e.gpr_value(i.X.RB);
|
||||
// jit_value_t ea = e.gpr_value(i.X.RB);
|
||||
// if (i.X.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.X.RA), ea);
|
||||
// }
|
||||
// Value* v = e.ReadMemory(i.address, ea, 4, /* acquire */ true);
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 4, /* acquire */ true);
|
||||
// e.update_gpr_value(i.X.RT, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -731,11 +731,11 @@ namespace libjit {
|
|||
|
||||
// // TODO(benvanik): make this right
|
||||
|
||||
// Value* ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// jit_value_t ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// if (i.D.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.D.RA), ea);
|
||||
// }
|
||||
// Value* v = e.gpr_value(i.D.RT);
|
||||
// jit_value_t v = e.gpr_value(i.D.RT);
|
||||
// e.WriteMemory(i.address, ea, 4, v, /* release */ true);
|
||||
|
||||
// // We always succeed.
|
||||
|
@ -760,12 +760,12 @@ namespace libjit {
|
|||
// // EA <- b + EXTS(D)
|
||||
// // FRT <- MEM(EA, 8)
|
||||
|
||||
// Value* ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// jit_value_t ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// if (i.D.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.D.RA), ea);
|
||||
// }
|
||||
// Value* v = e.ReadMemory(i.address, ea, 8, false);
|
||||
// v = b.CreateBitCast(v, b.getDoubleTy());
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 8, false);
|
||||
// v = b.CreateBitCast(v, jit_type_float64);
|
||||
// e.update_fpr_value(i.D.RT, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -776,9 +776,9 @@ namespace libjit {
|
|||
// // FRT <- MEM(EA, 8)
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.D.RA), b.getInt64(XEEXTS16(i.D.DS)));
|
||||
// Value* v = e.ReadMemory(i.address, ea, 8, false);
|
||||
// v = b.CreateBitCast(v, b.getDoubleTy());
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.D.RA), b.getInt64(XEEXTS16(i.D.DS)));
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 8, false);
|
||||
// v = b.CreateBitCast(v, jit_type_float64);
|
||||
// e.update_fpr_value(i.D.RT, v);
|
||||
// e.update_gpr_value(i.D.RA, ea);
|
||||
|
||||
|
@ -790,9 +790,9 @@ namespace libjit {
|
|||
// // FRT <- MEM(EA, 8)
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// Value* v = e.ReadMemory(i.address, ea, 8, false);
|
||||
// v = b.CreateBitCast(v, b.getDoubleTy());
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 8, false);
|
||||
// v = b.CreateBitCast(v, jit_type_float64);
|
||||
// e.update_fpr_value(i.X.RT, v);
|
||||
// e.update_gpr_value(i.X.RA, ea);
|
||||
|
||||
|
@ -807,12 +807,12 @@ namespace libjit {
|
|||
// // EA <- b + (RB)
|
||||
// // FRT <- MEM(EA, 8)
|
||||
|
||||
// Value* ea = e.gpr_value(i.X.RB);
|
||||
// jit_value_t ea = e.gpr_value(i.X.RB);
|
||||
// if (i.X.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.X.RA), ea);
|
||||
// }
|
||||
// Value* v = e.ReadMemory(i.address, ea, 8, false);
|
||||
// v = b.CreateBitCast(v, b.getDoubleTy());
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 8, false);
|
||||
// v = b.CreateBitCast(v, jit_type_float64);
|
||||
// e.update_fpr_value(i.X.RT, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -826,12 +826,12 @@ namespace libjit {
|
|||
// // EA <- b + EXTS(D)
|
||||
// // FRT <- DOUBLE(MEM(EA, 4))
|
||||
|
||||
// Value* ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// jit_value_t ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// if (i.D.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.D.RA), ea);
|
||||
// }
|
||||
// Value* v = e.ReadMemory(i.address, ea, 4, false);
|
||||
// v = b.CreateFPExt(b.CreateBitCast(v, b.getFloatTy()), b.getDoubleTy());
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 4, false);
|
||||
// v = b.CreateFPExt(b.CreateBitCast(v, b.getFloatTy()), jit_type_float64);
|
||||
// e.update_fpr_value(i.D.RT, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -842,9 +842,9 @@ namespace libjit {
|
|||
// // FRT <- DOUBLE(MEM(EA, 4))
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.D.RA), b.getInt64(XEEXTS16(i.D.DS)));
|
||||
// Value* v = e.ReadMemory(i.address, ea, 4, false);
|
||||
// v = b.CreateFPExt(b.CreateBitCast(v, b.getFloatTy()), b.getDoubleTy());
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.D.RA), b.getInt64(XEEXTS16(i.D.DS)));
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 4, false);
|
||||
// v = b.CreateFPExt(b.CreateBitCast(v, b.getFloatTy()), jit_type_float64);
|
||||
// e.update_fpr_value(i.D.RT, v);
|
||||
// e.update_gpr_value(i.D.RA, ea);
|
||||
|
||||
|
@ -856,9 +856,9 @@ namespace libjit {
|
|||
// // FRT <- DOUBLE(MEM(EA, 4))
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// Value* v = e.ReadMemory(i.address, ea, 4, false);
|
||||
// v = b.CreateFPExt(b.CreateBitCast(v, b.getFloatTy()), b.getDoubleTy());
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 4, false);
|
||||
// v = b.CreateFPExt(b.CreateBitCast(v, b.getFloatTy()), jit_type_float64);
|
||||
// e.update_fpr_value(i.X.RT, v);
|
||||
// e.update_gpr_value(i.X.RA, ea);
|
||||
|
||||
|
@ -873,12 +873,12 @@ namespace libjit {
|
|||
// // EA <- b + (RB)
|
||||
// // FRT <- DOUBLE(MEM(EA, 4))
|
||||
|
||||
// Value* ea = e.gpr_value(i.X.RB);
|
||||
// jit_value_t ea = e.gpr_value(i.X.RB);
|
||||
// if (i.X.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.X.RA), ea);
|
||||
// }
|
||||
// Value* v = e.ReadMemory(i.address, ea, 4, false);
|
||||
// v = b.CreateFPExt(b.CreateBitCast(v, b.getFloatTy()), b.getDoubleTy());
|
||||
// jit_value_t v = e.ReadMemory(i.address, ea, 4, false);
|
||||
// v = b.CreateFPExt(b.CreateBitCast(v, b.getFloatTy()), jit_type_float64);
|
||||
// e.update_fpr_value(i.X.RT, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -895,12 +895,12 @@ namespace libjit {
|
|||
// // EA <- b + EXTS(D)
|
||||
// // MEM(EA, 8) <- (FRS)
|
||||
|
||||
// Value* ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// jit_value_t ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// if (i.D.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.D.RA), ea);
|
||||
// }
|
||||
// Value* v = e.fpr_value(i.D.RT);
|
||||
// v = b.CreateBitCast(v, b.getInt64Ty());
|
||||
// jit_value_t v = e.fpr_value(i.D.RT);
|
||||
// v = b.CreateBitCast(v, jit_type_nint);
|
||||
// e.WriteMemory(i.address, ea, 8, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -911,10 +911,10 @@ namespace libjit {
|
|||
// // MEM(EA, 8) <- (FRS)
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.D.RA),
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.D.RA),
|
||||
// b.getInt64(XEEXTS16(i.D.DS)));
|
||||
// Value* v = e.fpr_value(i.D.RT);
|
||||
// v = b.CreateBitCast(v, b.getInt64Ty());
|
||||
// jit_value_t v = e.fpr_value(i.D.RT);
|
||||
// v = b.CreateBitCast(v, jit_type_nint);
|
||||
// e.WriteMemory(i.address, ea, 8, v);
|
||||
// e.update_gpr_value(i.D.RA, ea);
|
||||
|
||||
|
@ -926,9 +926,9 @@ namespace libjit {
|
|||
// // MEM(EA, 8) <- (FRS)
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// Value* v = e.fpr_value(i.X.RT);
|
||||
// v = b.CreateBitCast(v, b.getInt64Ty());
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// jit_value_t v = e.fpr_value(i.X.RT);
|
||||
// v = b.CreateBitCast(v, jit_type_nint);
|
||||
// e.WriteMemory(i.address, ea, 8, v);
|
||||
// e.update_gpr_value(i.X.RA, ea);
|
||||
|
||||
|
@ -943,12 +943,12 @@ namespace libjit {
|
|||
// // EA <- b + (RB)
|
||||
// // MEM(EA, 8) <- (FRS)
|
||||
|
||||
// Value* ea = e.gpr_value(i.X.RB);
|
||||
// jit_value_t ea = e.gpr_value(i.X.RB);
|
||||
// if (i.X.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.X.RA), ea);
|
||||
// }
|
||||
// Value* v = e.fpr_value(i.X.RT);
|
||||
// v = b.CreateBitCast(v, b.getInt64Ty());
|
||||
// jit_value_t v = e.fpr_value(i.X.RT);
|
||||
// v = b.CreateBitCast(v, jit_type_nint);
|
||||
// e.WriteMemory(i.address, ea, 8, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -962,12 +962,12 @@ namespace libjit {
|
|||
// // EA <- b + (RB)
|
||||
// // MEM(EA, 4) <- (FRS)[32:63]
|
||||
|
||||
// Value* ea = e.gpr_value(i.X.RB);
|
||||
// jit_value_t ea = e.gpr_value(i.X.RB);
|
||||
// if (i.X.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.D.RA), ea);
|
||||
// }
|
||||
// Value* v = e.fpr_value(i.X.RT);
|
||||
// v = b.CreateBitCast(v, b.getInt64Ty());
|
||||
// jit_value_t v = e.fpr_value(i.X.RT);
|
||||
// v = b.CreateBitCast(v, jit_type_nint);
|
||||
// e.WriteMemory(i.address, ea, 4, v);
|
||||
|
||||
// return 0;
|
||||
|
@ -981,11 +981,11 @@ namespace libjit {
|
|||
// // EA <- b + EXTS(D)
|
||||
// // MEM(EA, 4) <- SINGLE(FRS)
|
||||
|
||||
// Value* ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// jit_value_t ea = b.getInt64(XEEXTS16(i.D.DS));
|
||||
// if (i.D.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.D.RA), ea);
|
||||
// }
|
||||
// Value* v = e.fpr_value(i.D.RT);
|
||||
// jit_value_t v = e.fpr_value(i.D.RT);
|
||||
// v = b.CreateBitCast(b.CreateFPTrunc(v, b.getFloatTy()), b.getInt32Ty());
|
||||
// e.WriteMemory(i.address, ea, 4, v);
|
||||
|
||||
|
@ -997,9 +997,9 @@ namespace libjit {
|
|||
// // MEM(EA, 4) <- SINGLE(FRS)
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.D.RA),
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.D.RA),
|
||||
// b.getInt64(XEEXTS16(i.D.DS)));
|
||||
// Value* v = e.fpr_value(i.D.RT);
|
||||
// jit_value_t v = e.fpr_value(i.D.RT);
|
||||
// v = b.CreateBitCast(b.CreateFPTrunc(v, b.getFloatTy()), b.getInt32Ty());
|
||||
// e.WriteMemory(i.address, ea, 4, v);
|
||||
// e.update_gpr_value(i.D.RA, ea);
|
||||
|
@ -1012,8 +1012,8 @@ namespace libjit {
|
|||
// // MEM(EA, 4) <- SINGLE(FRS)
|
||||
// // RA <- EA
|
||||
|
||||
// Value* ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// Value* v = e.fpr_value(i.X.RT);
|
||||
// jit_value_t ea = b.CreateAdd(e.gpr_value(i.X.RA), e.gpr_value(i.X.RB));
|
||||
// jit_value_t v = e.fpr_value(i.X.RT);
|
||||
// v = b.CreateBitCast(b.CreateFPTrunc(v, b.getFloatTy()), b.getInt32Ty());
|
||||
// e.WriteMemory(i.address, ea, 4, v);
|
||||
// e.update_gpr_value(i.X.RA, ea);
|
||||
|
@ -1029,11 +1029,11 @@ namespace libjit {
|
|||
// // EA <- b + (RB)
|
||||
// // MEM(EA, 4) <- SINGLE(FRS)
|
||||
|
||||
// Value* ea = e.gpr_value(i.X.RB);
|
||||
// jit_value_t ea = e.gpr_value(i.X.RB);
|
||||
// if (i.X.RA) {
|
||||
// ea = b.CreateAdd(e.gpr_value(i.X.RA), ea);
|
||||
// }
|
||||
// Value* v = e.fpr_value(i.X.RT);
|
||||
// jit_value_t v = e.fpr_value(i.X.RT);
|
||||
// v = b.CreateBitCast(b.CreateFPTrunc(v, b.getFloatTy()), b.getInt32Ty());
|
||||
// e.WriteMemory(i.address, ea, 4, v);
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -36,13 +36,12 @@ public:
|
|||
jit_function_t fn();
|
||||
sdb::FunctionBlock* fn_block();
|
||||
|
||||
void PushInsertPoint();
|
||||
void PopInsertPoint();
|
||||
|
||||
void GenerateBasicBlocks();
|
||||
// llvm::BasicBlock* GetBasicBlock(uint32_t address);
|
||||
// llvm::BasicBlock* GetNextBasicBlock();
|
||||
// llvm::BasicBlock* GetReturnBasicBlock();
|
||||
int branch_to_block(uint32_t address);
|
||||
int branch_to_block_if(uint32_t address, jit_value_t value);
|
||||
int branch_to_block_if_not(uint32_t address, jit_value_t value);
|
||||
int branch_to_return();
|
||||
int branch_to_return_if(jit_value_t value);
|
||||
int branch_to_return_if_not(jit_value_t value);
|
||||
|
||||
int GenerateIndirectionBranch(uint32_t cia, jit_value_t target,
|
||||
bool lk, bool likely_local);
|
||||
|
@ -92,6 +91,7 @@ private:
|
|||
int MakePresentImportFunction();
|
||||
int MakeMissingImportFunction();
|
||||
|
||||
void GenerateBasicBlocks();
|
||||
void GenerateSharedBlocks();
|
||||
int PrepareBasicBlock(sdb::FunctionBlock* block);
|
||||
void GenerateBasicBlock(sdb::FunctionBlock* block);
|
||||
|
@ -109,15 +109,11 @@ private:
|
|||
sdb::FunctionSymbol* symbol_;
|
||||
jit_function_t fn_;
|
||||
sdb::FunctionBlock* fn_block_;
|
||||
// llvm::BasicBlock* return_block_;
|
||||
// llvm::BasicBlock* internal_indirection_block_;
|
||||
// llvm::BasicBlock* external_indirection_block_;
|
||||
// llvm::BasicBlock* bb_;
|
||||
jit_label_t return_block_;
|
||||
jit_label_t internal_indirection_block_;
|
||||
jit_label_t external_indirection_block_;
|
||||
|
||||
// std::vector<std::pair<llvm::BasicBlock*, llvm::BasicBlock::iterator> >
|
||||
// insert_points_;
|
||||
|
||||
//std::map<uint32_t, llvm::BasicBlock*> bbs_;
|
||||
std::map<uint32_t, jit_label_t> bbs_;
|
||||
|
||||
// Address of the instruction being generated.
|
||||
uint32_t cia_;
|
||||
|
|
|
@ -292,7 +292,7 @@ void InstrDisasm::AddSImmOperand(uint64_t value, size_t width,
|
|||
o.type = InstrOperand::kImmediate;
|
||||
o.imm.is_signed = true;
|
||||
o.imm.value = value;
|
||||
o.imm.width = value;
|
||||
o.imm.width = width;
|
||||
o.display = display;
|
||||
operands.push_back(o);
|
||||
}
|
||||
|
@ -303,7 +303,7 @@ void InstrDisasm::AddUImmOperand(uint64_t value, size_t width,
|
|||
o.type = InstrOperand::kImmediate;
|
||||
o.imm.is_signed = false;
|
||||
o.imm.value = value;
|
||||
o.imm.width = value;
|
||||
o.imm.width = width;
|
||||
o.display = display;
|
||||
operands.push_back(o);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue