summaryrefslogtreecommitdiff
path: root/deps/v8/src/ppc/macro-assembler-ppc.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/ppc/macro-assembler-ppc.cc')
-rw-r--r--deps/v8/src/ppc/macro-assembler-ppc.cc75
1 files changed, 27 insertions, 48 deletions
diff --git a/deps/v8/src/ppc/macro-assembler-ppc.cc b/deps/v8/src/ppc/macro-assembler-ppc.cc
index 94bb328bc9..e5b2434755 100644
--- a/deps/v8/src/ppc/macro-assembler-ppc.cc
+++ b/deps/v8/src/ppc/macro-assembler-ppc.cc
@@ -16,6 +16,7 @@
#include "src/debug/debug.h"
#include "src/external-reference-table.h"
#include "src/frames-inl.h"
+#include "src/heap/heap-inl.h" // For MemoryChunk.
#include "src/macro-assembler.h"
#include "src/register-configuration.h"
#include "src/runtime/runtime.h"
@@ -144,11 +145,6 @@ void TurboAssembler::LoadRootRegisterOffset(Register destination,
}
}
-void MacroAssembler::JumpToJSEntry(Register target) {
- Move(ip, target);
- Jump(ip);
-}
-
void TurboAssembler::Jump(intptr_t target, RelocInfo::Mode rmode,
Condition cond, CRegister cr) {
Label skip;
@@ -916,7 +912,7 @@ void TurboAssembler::LoadConstantPoolPointerRegisterFromCodeTargetAddress(
Register code_target_address) {
lwz(kConstantPoolRegister,
MemOperand(code_target_address,
- Code::kConstantPoolOffset - Code::kHeaderSize));
+ Code::kConstantPoolOffsetOffset - Code::kHeaderSize));
add(kConstantPoolRegister, kConstantPoolRegister, code_target_address);
}
@@ -1556,6 +1552,20 @@ void TurboAssembler::SubAndCheckForOverflow(Register dst, Register left,
}
}
+void MacroAssembler::JumpIfIsInRange(Register value, unsigned lower_limit,
+ unsigned higher_limit,
+ Label* on_in_range) {
+ Register scratch = r0;
+ if (lower_limit != 0) {
+ mov(scratch, Operand(lower_limit));
+ sub(scratch, value, scratch);
+ cmpli(scratch, Operand(higher_limit - lower_limit));
+ } else {
+ mov(scratch, Operand(higher_limit));
+ cmpl(value, scratch);
+ }
+ ble(on_in_range);
+}
void MacroAssembler::TryDoubleToInt32Exact(Register result,
DoubleRegister double_input,
@@ -2733,60 +2743,29 @@ void MacroAssembler::StoreByte(Register src, const MemOperand& mem,
}
}
+void TurboAssembler::LoadDouble(DoubleRegister dst, const MemOperand& mem,
+ Register scratch) {
+ Register base = mem.ra();
+ int offset = mem.offset();
-void MacroAssembler::LoadRepresentation(Register dst, const MemOperand& mem,
- Representation r, Register scratch) {
- DCHECK(!r.IsDouble());
- if (r.IsInteger8()) {
- LoadByte(dst, mem, scratch);
- extsb(dst, dst);
- } else if (r.IsUInteger8()) {
- LoadByte(dst, mem, scratch);
- } else if (r.IsInteger16()) {
- LoadHalfWordArith(dst, mem, scratch);
- } else if (r.IsUInteger16()) {
- LoadHalfWord(dst, mem, scratch);
-#if V8_TARGET_ARCH_PPC64
- } else if (r.IsInteger32()) {
- LoadWordArith(dst, mem, scratch);
-#endif
- } else {
- LoadP(dst, mem, scratch);
- }
-}
-
-
-void MacroAssembler::StoreRepresentation(Register src, const MemOperand& mem,
- Representation r, Register scratch) {
- DCHECK(!r.IsDouble());
- if (r.IsInteger8() || r.IsUInteger8()) {
- StoreByte(src, mem, scratch);
- } else if (r.IsInteger16() || r.IsUInteger16()) {
- StoreHalfWord(src, mem, scratch);
-#if V8_TARGET_ARCH_PPC64
- } else if (r.IsInteger32()) {
- StoreWord(src, mem, scratch);
-#endif
+ if (!is_int16(offset)) {
+ mov(scratch, Operand(offset));
+ lfdx(dst, MemOperand(base, scratch));
} else {
- if (r.IsHeapObject()) {
- AssertNotSmi(src);
- } else if (r.IsSmi()) {
- AssertSmi(src);
- }
- StoreP(src, mem, scratch);
+ lfd(dst, mem);
}
}
-void TurboAssembler::LoadDouble(DoubleRegister dst, const MemOperand& mem,
+void TurboAssembler::LoadFloat32(DoubleRegister dst, const MemOperand& mem,
Register scratch) {
Register base = mem.ra();
int offset = mem.offset();
if (!is_int16(offset)) {
mov(scratch, Operand(offset));
- lfdx(dst, MemOperand(base, scratch));
+ lfsx(dst, MemOperand(base, scratch));
} else {
- lfd(dst, mem);
+ lfs(dst, mem);
}
}