Commit f5316032 authored by Igor Sheludko's avatar Igor Sheludko Committed by Commit Bot

[sparkplug][arm] Port Sparkplug to arm

Bug: v8:11421
Change-Id: Ia4d3a20b9fdb5bc262cf480ece6e189aedff388f
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2762143
Commit-Queue: Igor Sheludko <ishell@chromium.org>
Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
Cr-Commit-Position: refs/heads/master@{#73488}
parent 7d2ac7b4
cbruni@chromium.org cbruni@chromium.org
ishell@chromium.org
leszeks@chromium.org leszeks@chromium.org
marja@chromium.org marja@chromium.org
pthier@chromium.org pthier@chromium.org
......
This diff is collapsed.
// Copyright 2021 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef V8_BASELINE_ARM_BASELINE_COMPILER_ARM_INL_H_
#define V8_BASELINE_ARM_BASELINE_COMPILER_ARM_INL_H_
#include "src/base/logging.h"
#include "src/baseline/baseline-compiler.h"
namespace v8 {
namespace internal {
namespace baseline {
#define __ basm_.
void BaselineCompiler::Prologue() {
__ masm()->mov(kInterpreterBytecodeArrayRegister, Operand(bytecode_));
DCHECK_EQ(kJSFunctionRegister, kJavaScriptCallTargetRegister);
// Enter the frame here, since CallBuiltin will override lr.
__ masm()->EnterFrame(StackFrame::BASELINE);
CallBuiltin(Builtins::kBaselineOutOfLinePrologue, kContextRegister,
kJSFunctionRegister, kJavaScriptCallArgCountRegister,
kInterpreterBytecodeArrayRegister,
kJavaScriptCallNewTargetRegister);
PrologueFillFrame();
}
void BaselineCompiler::PrologueFillFrame() {
__ RecordComment("[ Fill frame");
// Inlined register frame fill
interpreter::Register new_target_or_generator_register =
bytecode_->incoming_new_target_or_generator_register();
__ LoadRoot(kInterpreterAccumulatorRegister, RootIndex::kUndefinedValue);
int register_count = bytecode_->register_count();
// Magic value
const int kLoopUnrollSize = 8;
const int new_target_index = new_target_or_generator_register.index();
const bool has_new_target = new_target_index != kMaxInt;
if (has_new_target) {
DCHECK_LE(new_target_index, register_count);
for (int i = 0; i < new_target_index; i++) {
__ Push(kInterpreterAccumulatorRegister);
}
// Push new_target_or_generator.
__ Push(kJavaScriptCallNewTargetRegister);
register_count -= new_target_index + 1;
}
if (register_count < 2 * kLoopUnrollSize) {
// If the frame is small enough, just unroll the frame fill completely.
for (int i = 0; i < register_count; ++i) {
__ Push(kInterpreterAccumulatorRegister);
}
} else {
// Extract the first few registers to round to the unroll size.
int first_registers = register_count % kLoopUnrollSize;
for (int i = 0; i < first_registers; ++i) {
__ Push(kInterpreterAccumulatorRegister);
}
BaselineAssembler::ScratchRegisterScope temps(&basm_);
Register scratch = temps.AcquireScratch();
__ Move(scratch, register_count / kLoopUnrollSize);
// We enter the loop unconditionally, so make sure we need to loop at least
// once.
DCHECK_GT(register_count / kLoopUnrollSize, 0);
Label loop;
__ Bind(&loop);
for (int i = 0; i < kLoopUnrollSize; ++i) {
__ Push(kInterpreterAccumulatorRegister);
}
__ masm()->sub(scratch, scratch, Operand(1), SetCC);
__ JumpIf(Condition::kGreaterThan, &loop);
}
__ RecordComment("]");
}
void BaselineCompiler::VerifyFrameSize() {
BaselineAssembler::ScratchRegisterScope temps(&basm_);
Register scratch = temps.AcquireScratch();
__ masm()->add(scratch, sp,
Operand(InterpreterFrameConstants::kFixedFrameSizeFromFp +
bytecode_->frame_size()));
__ masm()->cmp(scratch, fp);
__ masm()->Assert(eq, AbortReason::kUnexpectedStackPointer);
}
} // namespace baseline
} // namespace internal
} // namespace v8
#endif // V8_BASELINE_ARM_BASELINE_COMPILER_ARM_INL_H_
...@@ -37,7 +37,7 @@ class BaselineAssembler::ScratchRegisterScope { ...@@ -37,7 +37,7 @@ class BaselineAssembler::ScratchRegisterScope {
}; };
// TODO(v8:11461): Unify condition names in the MacroAssembler. // TODO(v8:11461): Unify condition names in the MacroAssembler.
enum class Condition : uint8_t { enum class Condition : uint32_t {
kEqual = eq, kEqual = eq,
kNotEqual = ne, kNotEqual = ne,
......
...@@ -7,7 +7,8 @@ ...@@ -7,7 +7,8 @@
// TODO(v8:11421): Remove #if once baseline compiler is ported to other // TODO(v8:11421): Remove #if once baseline compiler is ported to other
// architectures. // architectures.
#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || \
V8_TARGET_ARCH_ARM
#include <type_traits> #include <type_traits>
#include <unordered_map> #include <unordered_map>
...@@ -24,6 +25,8 @@ ...@@ -24,6 +25,8 @@
#include "src/baseline/arm64/baseline-assembler-arm64-inl.h" #include "src/baseline/arm64/baseline-assembler-arm64-inl.h"
#elif V8_TARGET_ARCH_IA32 #elif V8_TARGET_ARCH_IA32
#include "src/baseline/ia32/baseline-assembler-ia32-inl.h" #include "src/baseline/ia32/baseline-assembler-ia32-inl.h"
#elif V8_TARGET_ARCH_ARM
#include "src/baseline/arm/baseline-assembler-arm-inl.h"
#else #else
#error Unsupported target architecture. #error Unsupported target architecture.
#endif #endif
......
// Copyright 2021 the V8 project authors. All rights reserved. // Copyright 2021 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -8,7 +7,8 @@ ...@@ -8,7 +7,8 @@
// TODO(v8:11421): Remove #if once baseline compiler is ported to other // TODO(v8:11421): Remove #if once baseline compiler is ported to other
// architectures. // architectures.
#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || \
V8_TARGET_ARCH_ARM
#include "src/codegen/macro-assembler.h" #include "src/codegen/macro-assembler.h"
#include "src/objects/tagged-index.h" #include "src/objects/tagged-index.h"
...@@ -17,7 +17,7 @@ namespace v8 { ...@@ -17,7 +17,7 @@ namespace v8 {
namespace internal { namespace internal {
namespace baseline { namespace baseline {
enum class Condition : uint8_t; enum class Condition : uint32_t;
class BaselineAssembler { class BaselineAssembler {
public: public:
......
...@@ -4,7 +4,8 @@ ...@@ -4,7 +4,8 @@
// TODO(v8:11421): Remove #if once baseline compiler is ported to other // TODO(v8:11421): Remove #if once baseline compiler is ported to other
// architectures. // architectures.
#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || \
V8_TARGET_ARCH_ARM
#include "src/baseline/baseline-compiler.h" #include "src/baseline/baseline-compiler.h"
...@@ -36,6 +37,8 @@ ...@@ -36,6 +37,8 @@
#include "src/baseline/arm64/baseline-compiler-arm64-inl.h" #include "src/baseline/arm64/baseline-compiler-arm64-inl.h"
#elif V8_TARGET_ARCH_IA32 #elif V8_TARGET_ARCH_IA32
#include "src/baseline/ia32/baseline-compiler-ia32-inl.h" #include "src/baseline/ia32/baseline-compiler-ia32-inl.h"
#elif V8_TARGET_ARCH_ARM
#include "src/baseline/arm/baseline-compiler-arm-inl.h"
#else #else
#error Unsupported target architecture. #error Unsupported target architecture.
#endif #endif
......
...@@ -7,7 +7,8 @@ ...@@ -7,7 +7,8 @@
// TODO(v8:11421): Remove #if once baseline compiler is ported to other // TODO(v8:11421): Remove #if once baseline compiler is ported to other
// architectures. // architectures.
#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || \
V8_TARGET_ARCH_ARM
#include "src/base/logging.h" #include "src/base/logging.h"
#include "src/base/threaded-list.h" #include "src/base/threaded-list.h"
......
...@@ -6,7 +6,8 @@ ...@@ -6,7 +6,8 @@
// TODO(v8:11421): Remove #if once baseline compiler is ported to other // TODO(v8:11421): Remove #if once baseline compiler is ported to other
// architectures. // architectures.
#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || \
V8_TARGET_ARCH_ARM
#include "src/baseline/baseline-assembler-inl.h" #include "src/baseline/baseline-assembler-inl.h"
#include "src/baseline/baseline-compiler.h" #include "src/baseline/baseline-compiler.h"
......
...@@ -43,7 +43,7 @@ class BaselineAssembler::ScratchRegisterScope { ...@@ -43,7 +43,7 @@ class BaselineAssembler::ScratchRegisterScope {
}; };
// TODO(v8:11461): Unify condition names in the MacroAssembler. // TODO(v8:11461): Unify condition names in the MacroAssembler.
enum class Condition : uint8_t { enum class Condition : uint32_t {
kEqual = equal, kEqual = equal,
kNotEqual = not_equal, kNotEqual = not_equal,
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#ifndef V8_BASELINE_X64_BASELINE_ASSEMBLER_X64_INL_H_ #ifndef V8_BASELINE_X64_BASELINE_ASSEMBLER_X64_INL_H_
#define V8_BASELINE_X64_BASELINE_ASSEMBLER_X64_INL_H_ #define V8_BASELINE_X64_BASELINE_ASSEMBLER_X64_INL_H_
#include "src/base/macros.h"
#include "src/baseline/baseline-assembler.h" #include "src/baseline/baseline-assembler.h"
#include "src/codegen/interface-descriptors.h" #include "src/codegen/interface-descriptors.h"
#include "src/codegen/x64/register-x64.h" #include "src/codegen/x64/register-x64.h"
...@@ -45,7 +46,7 @@ class BaselineAssembler::ScratchRegisterScope { ...@@ -45,7 +46,7 @@ class BaselineAssembler::ScratchRegisterScope {
}; };
// TODO(v8:11461): Unify condition names in the MacroAssembler. // TODO(v8:11461): Unify condition names in the MacroAssembler.
enum class Condition : uint8_t { enum class Condition : uint32_t {
kEqual = equal, kEqual = equal,
kNotEqual = not_equal, kNotEqual = not_equal,
......
This diff is collapsed.
...@@ -1258,7 +1258,7 @@ void Builtins::Generate_BaselineOutOfLinePrologue(MacroAssembler* masm) { ...@@ -1258,7 +1258,7 @@ void Builtins::Generate_BaselineOutOfLinePrologue(MacroAssembler* masm) {
FrameScope frame_scope(masm, StackFrame::MANUAL); FrameScope frame_scope(masm, StackFrame::MANUAL);
// Normally the first thing we'd do here is Push(lr, fp), but we already // Normally the first thing we'd do here is Push(lr, fp), but we already
// entered the frame in BaselineCompiler::Prologue, as we had to use the // entered the frame in BaselineCompiler::Prologue, as we had to use the
// value lr had before the call to this BaselineOutOfLinePrologue builtin. // value lr before the call to this BaselineOutOfLinePrologue builtin.
Register callee_context = descriptor.GetRegisterParameter( Register callee_context = descriptor.GetRegisterParameter(
BaselineOutOfLinePrologueDescriptor::kCalleeContext); BaselineOutOfLinePrologueDescriptor::kCalleeContext);
......
...@@ -930,7 +930,8 @@ void Builtins::Generate_MemMove(MacroAssembler* masm) { ...@@ -930,7 +930,8 @@ void Builtins::Generate_MemMove(MacroAssembler* masm) {
// TODO(v8:11421): Remove #if once baseline compiler is ported to other // TODO(v8:11421): Remove #if once baseline compiler is ported to other
// architectures. // architectures.
#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || \
V8_TARGET_ARCH_ARM
void Builtins::Generate_BaselineLeaveFrame(MacroAssembler* masm) { void Builtins::Generate_BaselineLeaveFrame(MacroAssembler* masm) {
EmitReturnBaseline(masm); EmitReturnBaseline(masm);
} }
......
...@@ -1382,6 +1382,20 @@ class V8_EXPORT_PRIVATE V8_NODISCARD UseScratchRegisterScope { ...@@ -1382,6 +1382,20 @@ class V8_EXPORT_PRIVATE V8_NODISCARD UseScratchRegisterScope {
bool CanAcquire() const { return *assembler_->GetScratchRegisterList() != 0; } bool CanAcquire() const { return *assembler_->GetScratchRegisterList() != 0; }
bool CanAcquireD() const { return CanAcquireVfp<DwVfpRegister>(); } bool CanAcquireD() const { return CanAcquireVfp<DwVfpRegister>(); }
void Include(const Register& reg1, const Register& reg2 = no_reg) {
RegList* available = assembler_->GetScratchRegisterList();
DCHECK_NOT_NULL(available);
DCHECK_EQ((*available) & (reg1.bit() | reg2.bit()), 0);
*available |= reg1.bit() | reg2.bit();
}
void Exclude(const Register& reg1, const Register& reg2 = no_reg) {
RegList* available = assembler_->GetScratchRegisterList();
DCHECK_NOT_NULL(available);
DCHECK_EQ((*available) & (reg1.bit() | reg2.bit()),
reg1.bit() | reg2.bit());
*available &= ~(reg1.bit() | reg2.bit());
}
private: private:
friend class Assembler; friend class Assembler;
friend class TurboAssembler; friend class TurboAssembler;
......
...@@ -86,14 +86,8 @@ const Register ApiGetterDescriptor::CallbackRegister() { return r3; } ...@@ -86,14 +86,8 @@ const Register ApiGetterDescriptor::CallbackRegister() { return r3; }
const Register GrowArrayElementsDescriptor::ObjectRegister() { return r0; } const Register GrowArrayElementsDescriptor::ObjectRegister() { return r0; }
const Register GrowArrayElementsDescriptor::KeyRegister() { return r3; } const Register GrowArrayElementsDescriptor::KeyRegister() { return r3; }
const Register BaselineLeaveFrameDescriptor::ParamsSizeRegister() { const Register BaselineLeaveFrameDescriptor::ParamsSizeRegister() { return r3; }
// TODO(v8:11421): Implement on this platform. const Register BaselineLeaveFrameDescriptor::WeightRegister() { return r4; }
UNREACHABLE();
}
const Register BaselineLeaveFrameDescriptor::WeightRegister() {
// TODO(v8:11421): Implement on this platform.
UNREACHABLE();
}
// static // static
const Register TypeConversionDescriptor::ArgumentRegister() { return r0; } const Register TypeConversionDescriptor::ArgumentRegister() { return r0; }
...@@ -220,8 +214,11 @@ void CompareDescriptor::InitializePlatformSpecific( ...@@ -220,8 +214,11 @@ void CompareDescriptor::InitializePlatformSpecific(
void Compare_BaselineDescriptor::InitializePlatformSpecific( void Compare_BaselineDescriptor::InitializePlatformSpecific(
CallInterfaceDescriptorData* data) { CallInterfaceDescriptorData* data) {
// TODO(v8:11421): Implement on this platform. // r1: left operand
InitializePlatformUnimplemented(data, kParameterCount); // r0: right operand
// r2: feedback slot
Register registers[] = {r1, r0, r2};
data->InitializePlatformSpecific(arraysize(registers), registers);
} }
void BinaryOpDescriptor::InitializePlatformSpecific( void BinaryOpDescriptor::InitializePlatformSpecific(
...@@ -232,8 +229,11 @@ void BinaryOpDescriptor::InitializePlatformSpecific( ...@@ -232,8 +229,11 @@ void BinaryOpDescriptor::InitializePlatformSpecific(
void BinaryOp_BaselineDescriptor::InitializePlatformSpecific( void BinaryOp_BaselineDescriptor::InitializePlatformSpecific(
CallInterfaceDescriptorData* data) { CallInterfaceDescriptorData* data) {
// TODO(v8:11421): Implement on this platform. // r1: left operand
InitializePlatformUnimplemented(data, kParameterCount); // r0: right operand
// r2: feedback slot
Register registers[] = {r1, r0, r2};
data->InitializePlatformSpecific(arraysize(registers), registers);
} }
void ApiCallbackDescriptor::InitializePlatformSpecific( void ApiCallbackDescriptor::InitializePlatformSpecific(
......
...@@ -305,6 +305,18 @@ void TurboAssembler::CallBuiltinByIndex(Register builtin_index) { ...@@ -305,6 +305,18 @@ void TurboAssembler::CallBuiltinByIndex(Register builtin_index) {
Call(builtin_index); Call(builtin_index);
} }
void TurboAssembler::LoadEntryFromBuiltinIndex(Builtins::Name builtin_index,
Register destination) {
ldr(destination, EntryFromBuiltinIndexAsOperand(builtin_index));
}
MemOperand TurboAssembler::EntryFromBuiltinIndexAsOperand(
Builtins::Name builtin_index) {
DCHECK(root_array_available());
return MemOperand(kRootRegister,
IsolateData::builtin_entry_slot_offset(builtin_index));
}
void TurboAssembler::CallBuiltin(int builtin_index, Condition cond) { void TurboAssembler::CallBuiltin(int builtin_index, Condition cond) {
DCHECK(Builtins::IsBuiltinId(builtin_index)); DCHECK(Builtins::IsBuiltinId(builtin_index));
RecordCommentForOffHeapTrampoline(builtin_index); RecordCommentForOffHeapTrampoline(builtin_index);
...@@ -1347,8 +1359,11 @@ void TurboAssembler::EnterFrame(StackFrame::Type type, ...@@ -1347,8 +1359,11 @@ void TurboAssembler::EnterFrame(StackFrame::Type type,
bool load_constant_pool_pointer_reg) { bool load_constant_pool_pointer_reg) {
// r0-r3: preserved // r0-r3: preserved
UseScratchRegisterScope temps(this); UseScratchRegisterScope temps(this);
Register scratch = temps.Acquire(); Register scratch = no_reg;
mov(scratch, Operand(StackFrame::TypeToMarker(type))); if (!StackFrame::IsJavaScript(type)) {
scratch = temps.Acquire();
mov(scratch, Operand(StackFrame::TypeToMarker(type)));
}
PushCommonFrame(scratch); PushCommonFrame(scratch);
} }
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
#include "src/codegen/arm/assembler-arm.h" #include "src/codegen/arm/assembler-arm.h"
#include "src/codegen/bailout-reason.h" #include "src/codegen/bailout-reason.h"
#include "src/common/globals.h" #include "src/common/globals.h"
#include "src/objects/contexts.h" #include "src/objects/tagged-index.h"
namespace v8 { namespace v8 {
namespace internal { namespace internal {
...@@ -313,6 +313,9 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { ...@@ -313,6 +313,9 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase {
bool check_constant_pool = true); bool check_constant_pool = true);
void Call(Label* target); void Call(Label* target);
MemOperand EntryFromBuiltinIndexAsOperand(Builtins::Name builtin_index);
void LoadEntryFromBuiltinIndex(Builtins::Name builtin_index,
Register destination);
// Load the builtin given by the Smi in |builtin_index| into the same // Load the builtin given by the Smi in |builtin_index| into the same
// register. // register.
void LoadEntryFromBuiltinIndex(Register builtin_index); void LoadEntryFromBuiltinIndex(Register builtin_index);
...@@ -478,6 +481,7 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { ...@@ -478,6 +481,7 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase {
void Move(Register dst, Handle<HeapObject> value); void Move(Register dst, Handle<HeapObject> value);
void Move(Register dst, ExternalReference reference); void Move(Register dst, ExternalReference reference);
void Move(Register dst, Register src, Condition cond = al); void Move(Register dst, Register src, Condition cond = al);
void Move(Register dst, const MemOperand& src) { ldr(dst, src); }
void Move(Register dst, const Operand& src, SBit sbit = LeaveCC, void Move(Register dst, const Operand& src, SBit sbit = LeaveCC,
Condition cond = al) { Condition cond = al) {
if (!src.IsRegister() || src.rm() != dst || sbit != LeaveCC) { if (!src.IsRegister() || src.rm() != dst || sbit != LeaveCC) {
......
...@@ -341,7 +341,7 @@ void BaselineOutOfLinePrologueDescriptor::InitializePlatformSpecific( ...@@ -341,7 +341,7 @@ void BaselineOutOfLinePrologueDescriptor::InitializePlatformSpecific(
kJavaScriptCallArgCountRegister, ecx, kJavaScriptCallArgCountRegister, ecx,
kJavaScriptCallNewTargetRegister}; kJavaScriptCallNewTargetRegister};
data->InitializePlatformSpecific(kParameterCount, registers); data->InitializePlatformSpecific(kParameterCount, registers);
#elif V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 #elif V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_ARM
Register registers[] = { Register registers[] = {
kContextRegister, kJSFunctionRegister, kJavaScriptCallArgCountRegister, kContextRegister, kJSFunctionRegister, kJavaScriptCallArgCountRegister,
kInterpreterBytecodeArrayRegister, kJavaScriptCallNewTargetRegister}; kInterpreterBytecodeArrayRegister, kJavaScriptCallNewTargetRegister};
...@@ -354,7 +354,8 @@ void BaselineOutOfLinePrologueDescriptor::InitializePlatformSpecific( ...@@ -354,7 +354,8 @@ void BaselineOutOfLinePrologueDescriptor::InitializePlatformSpecific(
void BaselineLeaveFrameDescriptor::InitializePlatformSpecific( void BaselineLeaveFrameDescriptor::InitializePlatformSpecific(
CallInterfaceDescriptorData* data) { CallInterfaceDescriptorData* data) {
// TODO(v8:11421): Implement on other platforms. // TODO(v8:11421): Implement on other platforms.
#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || \
V8_TARGET_ARCH_ARM
Register registers[] = {ParamsSizeRegister(), WeightRegister()}; Register registers[] = {ParamsSizeRegister(), WeightRegister()};
data->InitializePlatformSpecific(kParameterCount, registers); data->InitializePlatformSpecific(kParameterCount, registers);
#else #else
......
...@@ -163,7 +163,8 @@ struct MaybeBoolFlag { ...@@ -163,7 +163,8 @@ struct MaybeBoolFlag {
#define ENABLE_CONTROL_FLOW_INTEGRITY_BOOL false #define ENABLE_CONTROL_FLOW_INTEGRITY_BOOL false
#endif #endif
#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || \
V8_TARGET_ARCH_ARM
#define ENABLE_SPARKPLUG true #define ENABLE_SPARKPLUG true
#else #else
// TODO(v8:11421): Enable Sparkplug for other architectures // TODO(v8:11421): Enable Sparkplug for other architectures
......
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