Commit 8aefac35 authored by Junliang Yan's avatar Junliang Yan Committed by Commit Bot

PPC: fix debug build error

R=joransiu@ca.ibm.com

Change-Id: I28c7f3d018a03adb843b0426510c2ba669324b76
Reviewed-on: https://chromium-review.googlesource.com/996593Reviewed-by: 's avatarJoran Siu <joransiu@ca.ibm.com>
Commit-Queue: Junliang Yan <jyan@ca.ibm.com>
Cr-Commit-Position: refs/heads/master@{#52413}
parent ad221d14
......@@ -2326,7 +2326,8 @@ void CodeGenerator::AssembleReturn(InstructionOperand* pop) {
// Constant pool is unavailable since the frame has been destructed
ConstantPoolUnavailableScope constant_pool_unavailable(tasm());
if (pop->IsImmediate()) {
DCHECK_EQ(Constant::kInt32, g.ToConstant(pop).type());
DCHECK(Constant::kInt32 == g.ToConstant(pop).type() ||
Constant::kInt64 == g.ToConstant(pop).type());
pop_count += g.ToConstant(pop).ToInt32();
} else {
__ Drop(g.ToRegister(pop));
......
......@@ -427,11 +427,11 @@ const int kEndOfChain = -4;
enum {
kUnboundMovLabelOffsetOpcode = 0 << 26,
kUnboundAddLabelOffsetOpcode = 1 << 26,
kUnboundMovLabelAddrOpcode = 2 << 26,
kUnboundJumpTableEntryOpcode = 3 << 26
kUnboundAddLabelLongOffsetOpcode = 2 << 26,
kUnboundMovLabelAddrOpcode = 3 << 26,
kUnboundJumpTableEntryOpcode = 4 << 26
};
int Assembler::target_at(int pos) {
Instr instr = instr_at(pos);
// check which type of branch this is 16 or 26 bit offset
......@@ -448,6 +448,7 @@ int Assembler::target_at(int pos) {
break;
case kUnboundMovLabelOffsetOpcode:
case kUnboundAddLabelOffsetOpcode:
case kUnboundAddLabelLongOffsetOpcode:
case kUnboundMovLabelAddrOpcode:
case kUnboundJumpTableEntryOpcode:
link = SIGN_EXT_IMM26(instr & kImm26Mask);
......@@ -508,15 +509,21 @@ void Assembler::target_at_put(int pos, int target_pos, bool* is_branch) {
patcher.bitwise_mov32(dst, offset);
break;
}
case kUnboundAddLabelLongOffsetOpcode:
case kUnboundAddLabelOffsetOpcode: {
// dst = base + position + immediate
Instr operands = instr_at(pos + kInstrSize);
Register dst = Register::from_code((operands >> 21) & 0x1F);
Register base = Register::from_code((operands >> 16) & 0x1F);
int32_t offset = target_pos + SIGN_EXT_IMM16(operands & kImm16Mask);
PatchingAssembler patcher(isolate_data(),
reinterpret_cast<byte*>(buffer_ + pos), 2);
Register dst = Register::from_code((operands >> 27) & 0x1F);
Register base = Register::from_code((operands >> 22) & 0x1F);
int32_t delta = (opcode == kUnboundAddLabelLongOffsetOpcode)
? static_cast<int32_t>(instr_at(pos + 2 * kInstrSize))
: (SIGN_EXT_IMM22(operands & kImm22Mask));
int32_t offset = target_pos + delta;
PatchingAssembler patcher(
isolate_data(), reinterpret_cast<byte*>(buffer_ + pos),
2 + static_cast<int32_t>(opcode == kUnboundAddLabelLongOffsetOpcode));
patcher.bitwise_add32(dst, base, offset);
if (opcode == kUnboundAddLabelLongOffsetOpcode) patcher.nop();
break;
}
case kUnboundMovLabelAddrOpcode: {
......@@ -1483,11 +1490,16 @@ void Assembler::add_label_offset(Register dst, Register base, Label* label,
DCHECK_EQ(0, link & 3);
link >>= 2;
DCHECK(is_int26(link));
DCHECK(is_int16(delta));
BlockTrampolinePoolScope block_trampoline_pool(this);
emit(kUnboundAddLabelOffsetOpcode | (link & kImm26Mask));
emit(dst.code() * B21 | base.code() * B16 | (delta & kImm16Mask));
emit((is_int22(delta) ? kUnboundAddLabelOffsetOpcode
: kUnboundAddLabelLongOffsetOpcode) |
(link & kImm26Mask));
emit(dst.code() * B27 | base.code() * B22 | (delta & kImm22Mask));
if (!is_int22(delta)) {
emit(delta);
}
}
}
......
......@@ -39,6 +39,9 @@ const int kLoadDoubleMaxReachBits = 15;
// sign-extend the least significant 16-bits of value <imm>
#define SIGN_EXT_IMM16(imm) ((static_cast<int>(imm) << 16) >> 16)
// sign-extend the least significant 22-bits of value <imm>
#define SIGN_EXT_IMM22(imm) ((static_cast<int>(imm) << 10) >> 10)
// sign-extend the least significant 26-bits of value <imm>
#define SIGN_EXT_IMM26(imm) ((static_cast<int>(imm) << 6) >> 6)
......@@ -2596,6 +2599,7 @@ enum {
kImm24Mask = (1 << 24) - 1,
kOff16Mask = (1 << 16) - 1,
kImm16Mask = (1 << 16) - 1,
kImm22Mask = (1 << 22) - 1,
kImm26Mask = (1 << 26) - 1,
kBOfieldMask = 0x1f << 21,
kOpcodeMask = 0x3f << 26,
......
......@@ -840,8 +840,9 @@ void TurboAssembler::LoadPC(Register dst) {
void TurboAssembler::LoadConstantPoolPointerRegister() {
LoadPC(kConstantPoolRegister);
int32_t delta = -pc_offset() + 4;
add_label_offset(kConstantPoolRegister, kConstantPoolRegister,
ConstantPoolPosition(), -pc_offset() + 4);
ConstantPoolPosition(), delta);
}
void TurboAssembler::StubPrologue(StackFrame::Type type) {
......@@ -1750,7 +1751,7 @@ void MacroAssembler::AssertConstructor(Register object) {
if (emit_debug_code()) {
STATIC_ASSERT(kSmiTag == 0);
TestIfSmi(object, r0);
Check(ne, AbortReason::kOperandIsASmiAndNotAConstructor);
Check(ne, AbortReason::kOperandIsASmiAndNotAConstructor, cr0);
push(object);
LoadP(object, FieldMemOperand(object, HeapObject::kMapOffset));
lbz(object, FieldMemOperand(object, Map::kBitFieldOffset));
......@@ -2410,7 +2411,7 @@ void TurboAssembler::LoadP(Register dst, const MemOperand& mem,
if (!is_int16(offset)) {
/* cannot use d-form */
DCHECK_EQ(scratch, no_reg);
DCHECK_NE(scratch, no_reg);
mov(scratch, Operand(offset));
LoadPX(dst, MemOperand(mem.ra(), scratch));
} else {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment