Commit 94456e5c authored by Milad Farazmand's avatar Milad Farazmand Committed by Commit Bot

PPC/s390: Reland: [builtins] Move non-JS linkage builtins code objects into RO_SPACE

Port 855591a5

Original Commit Message:

    Reland of https://chromium-review.googlesource.com/c/v8/v8/+/1795358.

    [builtins] Move non-JS linkage builtins code objects into RO_SPACE

    Creates an allow-list of builtins that can still go in code_space
    including all TFJ builtins and a small manual list that should be pared
    down in the future.

    For builtins that go in RO_SPACE a Code object is created that contains an
    immediate trap instruction. Generally these Code objects are still no
    smaller than CODE_SPACE Code objects because of the Code object alignment
    requirements. This will hopefully be addressed in a follow-up CL either by
    relaxing them or removing the instruction stream completely.

    In the snapshot, this reduces code_space from ~152k to ~40k (-112k) and
    increases by the same amount.

R=delphick@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
BUG=
LOG=N

Change-Id: Ibd0713a17df9c873692553f2d57f4ba36bcdb342
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1893746Reviewed-by: 's avatarJunliang Yan <jyan@ca.ibm.com>
Commit-Queue: Milad Farazmand <miladfar@ca.ibm.com>
Cr-Commit-Position: refs/heads/master@{#64704}
parent b50dea24
...@@ -290,6 +290,7 @@ void TurboAssembler::Call(Handle<Code> code, RelocInfo::Mode rmode, ...@@ -290,6 +290,7 @@ void TurboAssembler::Call(Handle<Code> code, RelocInfo::Mode rmode,
bind(&skip); bind(&skip);
return; return;
} }
DCHECK(code->IsExecutable());
Call(code.address(), rmode, cond); Call(code.address(), rmode, cond);
} }
...@@ -3044,6 +3045,8 @@ void TurboAssembler::ZeroExtWord32(Register dst, Register src) { ...@@ -3044,6 +3045,8 @@ void TurboAssembler::ZeroExtWord32(Register dst, Register src) {
clrldi(dst, src, Operand(32)); clrldi(dst, src, Operand(32));
} }
void TurboAssembler::Trap() { stop(); }
} // namespace internal } // namespace internal
} // namespace v8 } // namespace v8
......
...@@ -368,6 +368,8 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { ...@@ -368,6 +368,8 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase {
void MovFromFloatParameter(DoubleRegister dst); void MovFromFloatParameter(DoubleRegister dst);
void MovFromFloatResult(DoubleRegister dst); void MovFromFloatResult(DoubleRegister dst);
void Trap() override;
// Calls Abort(msg) if the condition cond is not satisfied. // Calls Abort(msg) if the condition cond is not satisfied.
// Use --debug_code to enable. // Use --debug_code to enable.
void Assert(Condition cond, AbortReason reason, CRegister cr = cr7); void Assert(Condition cond, AbortReason reason, CRegister cr = cr7);
......
...@@ -253,6 +253,7 @@ void TurboAssembler::Call(Handle<Code> code, RelocInfo::Mode rmode, ...@@ -253,6 +253,7 @@ void TurboAssembler::Call(Handle<Code> code, RelocInfo::Mode rmode,
Call(ip); Call(ip);
return; return;
} }
DCHECK(code->IsExecutable());
call(code, rmode); call(code, rmode);
} }
...@@ -4398,6 +4399,8 @@ void TurboAssembler::CallForDeoptimization(Address target, int deopt_id) { ...@@ -4398,6 +4399,8 @@ void TurboAssembler::CallForDeoptimization(Address target, int deopt_id) {
Call(target, RelocInfo::RUNTIME_ENTRY); Call(target, RelocInfo::RUNTIME_ENTRY);
} }
void TurboAssembler::Trap() { stop(); }
} // namespace internal } // namespace internal
} // namespace v8 } // namespace v8
......
...@@ -852,6 +852,8 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { ...@@ -852,6 +852,8 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase {
void MovFromFloatParameter(DoubleRegister dst); void MovFromFloatParameter(DoubleRegister dst);
void MovFromFloatResult(DoubleRegister dst); void MovFromFloatResult(DoubleRegister dst);
void Trap() override;
// Emit code for a truncating division by a constant. The dividend register is // Emit code for a truncating division by a constant. The dividend register is
// unchanged and ip gets clobbered. Dividend and result must be different. // unchanged and ip gets clobbered. Dividend and result must be different.
void TruncateDoubleToI(Isolate* isolate, Zone* zone, Register result, void TruncateDoubleToI(Isolate* isolate, Zone* zone, Register result,
......
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