summaryrefslogtreecommitdiff
path: root/deps/v8/src/ppc/macro-assembler-ppc.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/ppc/macro-assembler-ppc.h')
-rw-r--r--deps/v8/src/ppc/macro-assembler-ppc.h63
1 files changed, 43 insertions, 20 deletions
diff --git a/deps/v8/src/ppc/macro-assembler-ppc.h b/deps/v8/src/ppc/macro-assembler-ppc.h
index a529b627f2..cf9d4b5719 100644
--- a/deps/v8/src/ppc/macro-assembler-ppc.h
+++ b/deps/v8/src/ppc/macro-assembler-ppc.h
@@ -19,8 +19,8 @@ const Register kReturnRegister1 = {Register::kCode_r4};
const Register kReturnRegister2 = {Register::kCode_r5};
const Register kJSFunctionRegister = {Register::kCode_r4};
const Register kContextRegister = {Register::kCode_r30};
+const Register kAllocateSizeRegister = {Register::kCode_r4};
const Register kInterpreterAccumulatorRegister = {Register::kCode_r3};
-const Register kInterpreterRegisterFileRegister = {Register::kCode_r14};
const Register kInterpreterBytecodeOffsetRegister = {Register::kCode_r15};
const Register kInterpreterBytecodeArrayRegister = {Register::kCode_r16};
const Register kInterpreterDispatchTableRegister = {Register::kCode_r17};
@@ -73,10 +73,8 @@ bool AreAliased(Register reg1, Register reg2, Register reg3 = no_reg,
// These exist to provide portability between 32 and 64bit
#if V8_TARGET_ARCH_PPC64
-#define LoadPU ldu
#define LoadPX ldx
#define LoadPUX ldux
-#define StorePU stdu
#define StorePX stdx
#define StorePUX stdux
#define ShiftLeftImm sldi
@@ -90,10 +88,8 @@ bool AreAliased(Register reg1, Register reg2, Register reg3 = no_reg,
#define Mul mulld
#define Div divd
#else
-#define LoadPU lwzu
#define LoadPX lwzx
#define LoadPUX lwzux
-#define StorePU stwu
#define StorePX stwx
#define StorePUX stwux
#define ShiftLeftImm slwi
@@ -437,7 +433,8 @@ class MacroAssembler : public Assembler {
// Enter exit frame.
// stack_space - extra stack space, used for parameters before call to C.
// At least one slot (for the return address) should be provided.
- void EnterExitFrame(bool save_doubles, int stack_space = 1);
+ void EnterExitFrame(bool save_doubles, int stack_space = 1,
+ StackFrame::Type frame_type = StackFrame::EXIT);
// Leave the current exit frame. Expects the return value in r0.
// Expect the number of values, pushed prior to the exit frame, to
@@ -515,8 +512,25 @@ class MacroAssembler : public Assembler {
void StoreRepresentation(Register src, const MemOperand& mem,
Representation r, Register scratch = no_reg);
- void LoadDouble(DoubleRegister dst, const MemOperand& mem, Register scratch);
- void StoreDouble(DoubleRegister src, const MemOperand& mem, Register scratch);
+ void LoadDouble(DoubleRegister dst, const MemOperand& mem,
+ Register scratch = no_reg);
+ void LoadDoubleU(DoubleRegister dst, const MemOperand& mem,
+ Register scratch = no_reg);
+
+ void LoadSingle(DoubleRegister dst, const MemOperand& mem,
+ Register scratch = no_reg);
+ void LoadSingleU(DoubleRegister dst, const MemOperand& mem,
+ Register scratch = no_reg);
+
+ void StoreDouble(DoubleRegister src, const MemOperand& mem,
+ Register scratch = no_reg);
+ void StoreDoubleU(DoubleRegister src, const MemOperand& mem,
+ Register scratch = no_reg);
+
+ void StoreSingle(DoubleRegister src, const MemOperand& mem,
+ Register scratch = no_reg);
+ void StoreSingleU(DoubleRegister src, const MemOperand& mem,
+ Register scratch = no_reg);
// Move values between integer and floating point registers.
void MovIntToDouble(DoubleRegister dst, Register src, Register scratch);
@@ -573,7 +587,9 @@ class MacroAssembler : public Assembler {
// These exist to provide portability between 32 and 64bit
void LoadP(Register dst, const MemOperand& mem, Register scratch = no_reg);
+ void LoadPU(Register dst, const MemOperand& mem, Register scratch = no_reg);
void StoreP(Register src, const MemOperand& mem, Register scratch = no_reg);
+ void StorePU(Register src, const MemOperand& mem, Register scratch = no_reg);
// ---------------------------------------------------------------------------
// JavaScript invokes
@@ -696,6 +712,15 @@ class MacroAssembler : public Assembler {
void Allocate(Register object_size, Register result, Register result_end,
Register scratch, Label* gc_required, AllocationFlags flags);
+ // FastAllocate is right now only used for folded allocations. It just
+ // increments the top pointer without checking against limit. This can only
+ // be done if it was proved earlier that the allocation will succeed.
+ void FastAllocate(int object_size, Register result, Register scratch1,
+ Register scratch2, AllocationFlags flags);
+
+ void FastAllocate(Register object_size, Register result, Register result_end,
+ Register scratch, AllocationFlags flags);
+
void AllocateTwoByteString(Register result, Register length,
Register scratch1, Register scratch2,
Register scratch3, Label* gc_required);
@@ -720,7 +745,6 @@ class MacroAssembler : public Assembler {
// when control continues at the gc_required label.
void AllocateHeapNumber(Register result, Register scratch1, Register scratch2,
Register heap_number_map, Label* gc_required,
- TaggingMode tagging_mode = TAG_RESULT,
MutableMode mode = IMMUTABLE);
void AllocateHeapNumberWithValue(Register result, DoubleRegister value,
Register scratch1, Register scratch2,
@@ -1049,7 +1073,8 @@ class MacroAssembler : public Assembler {
void MovFromFloatResult(DoubleRegister dst);
// Jump to a runtime routine.
- void JumpToExternalReference(const ExternalReference& builtin);
+ void JumpToExternalReference(const ExternalReference& builtin,
+ bool builtin_exit_frame = false);
Handle<Object> CodeObject() {
DCHECK(!code_object_.is_null());
@@ -1380,6 +1405,10 @@ class MacroAssembler : public Assembler {
// enabled via --debug-code.
void AssertBoundFunction(Register object);
+ // Abort execution if argument is not a JSGeneratorObject,
+ // enabled via --debug-code.
+ void AssertGeneratorObject(Register object);
+
// Abort execution if argument is not a JSReceiver, enabled via --debug-code.
void AssertReceiver(Register object);
@@ -1497,6 +1526,9 @@ class MacroAssembler : public Assembler {
// Returns the pc offset at which the frame ends.
int LeaveFrame(StackFrame::Type type, int stack_adjustment = 0);
+ void EnterBuiltinFrame(Register context, Register target, Register argc);
+ void LeaveBuiltinFrame(Register context, Register target, Register argc);
+
// Expects object in r3 and returns map with validated enum cache
// in r3. Assumes that any other register can be used as a scratch.
void CheckEnumCache(Label* call_runtime);
@@ -1632,17 +1664,8 @@ inline MemOperand NativeContextMemOperand() {
return ContextMemOperand(cp, Context::NATIVE_CONTEXT_INDEX);
}
-
-#ifdef GENERATED_CODE_COVERAGE
-#define CODE_COVERAGE_STRINGIFY(x) #x
-#define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x)
-#define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__)
-#define ACCESS_MASM(masm) \
- masm->stop(__FILE_LINE__); \
- masm->
-#else
#define ACCESS_MASM(masm) masm->
-#endif
+
} // namespace internal
} // namespace v8