Skip to content

Commit f481316

Browse files
mtbrandyCommit bot
authored andcommitted
PPC: [interpreter]: Changes to interpreter builtins for accumulator and register file registers.
Port 00df60d Original commit message: Makes the following modifications to the interpreter builtins and InterpreterAssembler: - Adds an accumulator register and initializes it to undefined() - Adds a register file pointer register and use it instead of FramePointer to access registers - Modifies builtin to support functions with 0 regiters in the register file - Modifies builtin to Call rather than TailCall to first bytecode handler. R=rmcilroy@chromium.org, jyan@ca.ibm.com, dstence@us.ibm.com, joransiu@ca.ibm.com BUG=v8:4280 LOG=N Review URL: https://codereview.chromium.org/1309113003 Cr-Commit-Position: refs/heads/master@{#30414}
1 parent bcc9df9 commit f481316

2 files changed

Lines changed: 23 additions & 19 deletions

File tree

src/ppc/builtins-ppc.cc

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include "src/debug/debug.h"
99
#include "src/deoptimizer.h"
1010
#include "src/full-codegen/full-codegen.h"
11-
#include "src/interpreter/bytecodes.h"
1211
#include "src/runtime/runtime.h"
1312

1413
namespace v8 {
@@ -907,22 +906,22 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
907906
Label ok;
908907
__ sub(r6, sp, r5);
909908
__ LoadRoot(r0, Heap::kRealStackLimitRootIndex);
910-
__ cmp(r6, r0);
909+
__ cmpl(r6, r0);
911910
__ bge(&ok);
912911
__ InvokeBuiltin(Context::STACK_OVERFLOW_BUILTIN_INDEX, CALL_FUNCTION);
913912
__ bind(&ok);
914913

915914
// If ok, push undefined as the initial value for all register file entries.
916-
// Note: there should always be at least one stack slot for the return
917-
// register in the register file.
918915
// TODO(rmcilroy): Consider doing more than one push per loop iteration.
919-
Label loop_header;
916+
Label loop, no_args;
920917
__ LoadRoot(r6, Heap::kUndefinedValueRootIndex);
921-
__ ShiftRightImm(r5, r5, Operand(kPointerSizeLog2));
918+
__ ShiftRightImm(r5, r5, Operand(kPointerSizeLog2), SetRC);
919+
__ beq(&no_args, cr0);
922920
__ mtctr(r5);
923-
__ bind(&loop_header);
921+
__ bind(&loop);
924922
__ push(r6);
925-
__ bdnz(&loop_header);
923+
__ bdnz(&loop);
924+
__ bind(&no_args);
926925
}
927926

928927
// TODO(rmcilroy): List of things not currently dealt with here but done in
@@ -956,7 +955,12 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
956955
__ bind(&ok);
957956
}
958957

959-
// Load bytecode offset and dispatch table into registers.
958+
// Load accumulator, register file, bytecode offset, dispatch table into
959+
// registers.
960+
__ LoadRoot(kInterpreterAccumulatorRegister, Heap::kUndefinedValueRootIndex);
961+
__ subi(
962+
kInterpreterRegisterFileRegister, fp,
963+
Operand(kPointerSize + StandardFrameConstants::kFixedFrameSizeFromFp));
960964
__ mov(kInterpreterBytecodeOffsetRegister,
961965
Operand(BytecodeArray::kHeaderSize - kHeapObjectTag));
962966
__ LoadRoot(kInterpreterDispatchTableRegister,
@@ -965,14 +969,14 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
965969
Operand(FixedArray::kHeaderSize - kHeapObjectTag));
966970

967971
// Dispatch to the first bytecode handler for the function.
968-
__ lbzx(r3, MemOperand(kInterpreterBytecodeArrayRegister,
972+
__ lbzx(r4, MemOperand(kInterpreterBytecodeArrayRegister,
969973
kInterpreterBytecodeOffsetRegister));
970-
__ ShiftLeftImm(ip, r3, Operand(kPointerSizeLog2));
974+
__ ShiftLeftImm(ip, r4, Operand(kPointerSizeLog2));
971975
__ LoadPX(ip, MemOperand(kInterpreterDispatchTableRegister, ip));
972976
// TODO(rmcilroy): Make dispatch table point to code entrys to avoid untagging
973977
// and header removal.
974978
__ addi(ip, ip, Operand(Code::kHeaderSize - kHeapObjectTag));
975-
__ Jump(ip);
979+
__ Call(ip);
976980
}
977981

978982

@@ -983,10 +987,8 @@ void Builtins::Generate_InterpreterExitTrampoline(MacroAssembler* masm) {
983987
// - Support profiler (specifically decrementing profiling_counter
984988
// appropriately and calling out to HandleInterrupts if necessary).
985989

986-
// Load return value into r3.
987-
__ LoadP(r3,
988-
MemOperand(fp, -kPointerSize -
989-
StandardFrameConstants::kFixedFrameSizeFromFp));
990+
// The return value is in accumulator, which is already in r3.
991+
990992
// Leave the frame (also dropping the register file).
991993
__ LeaveFrame(StackFrame::JAVA_SCRIPT);
992994
// Drop receiver + arguments.

src/ppc/macro-assembler-ppc.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ const Register kReturnRegister0 = {kRegister_r3_Code};
1818
const Register kReturnRegister1 = {kRegister_r4_Code};
1919
const Register kJSFunctionRegister = {kRegister_r4_Code};
2020
const Register kContextRegister = {kRegister_r30_Code};
21-
const Register kInterpreterBytecodeOffsetRegister = {kRegister_r14_Code};
22-
const Register kInterpreterBytecodeArrayRegister = {kRegister_r15_Code};
23-
const Register kInterpreterDispatchTableRegister = {kRegister_r16_Code};
21+
const Register kInterpreterAccumulatorRegister = {kRegister_r3_Code};
22+
const Register kInterpreterRegisterFileRegister = {kRegister_r14_Code};
23+
const Register kInterpreterBytecodeOffsetRegister = {kRegister_r15_Code};
24+
const Register kInterpreterBytecodeArrayRegister = {kRegister_r16_Code};
25+
const Register kInterpreterDispatchTableRegister = {kRegister_r17_Code};
2426
const Register kRuntimeCallFunctionRegister = {kRegister_r4_Code};
2527
const Register kRuntimeCallArgCountRegister = {kRegister_r3_Code};
2628

0 commit comments

Comments
 (0)