summaryrefslogtreecommitdiff
path: root/deps/v8/src/codegen/ia32
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/codegen/ia32')
-rw-r--r--deps/v8/src/codegen/ia32/assembler-ia32.h4
-rw-r--r--deps/v8/src/codegen/ia32/macro-assembler-ia32.cc55
-rw-r--r--deps/v8/src/codegen/ia32/macro-assembler-ia32.h3
3 files changed, 33 insertions, 29 deletions
diff --git a/deps/v8/src/codegen/ia32/assembler-ia32.h b/deps/v8/src/codegen/ia32/assembler-ia32.h
index 2423f73bdb..5225621276 100644
--- a/deps/v8/src/codegen/ia32/assembler-ia32.h
+++ b/deps/v8/src/codegen/ia32/assembler-ia32.h
@@ -342,8 +342,8 @@ class Displacement {
private:
int data_;
- class TypeField : public BitField<Type, 0, 2> {};
- class NextField : public BitField<int, 2, 32 - 2> {};
+ using TypeField = BitField<Type, 0, 2>;
+ using NextField = BitField<int, 2, 32 - 2>;
void init(Label* L, Type type);
};
diff --git a/deps/v8/src/codegen/ia32/macro-assembler-ia32.cc b/deps/v8/src/codegen/ia32/macro-assembler-ia32.cc
index f6f0153e54..070f315977 100644
--- a/deps/v8/src/codegen/ia32/macro-assembler-ia32.cc
+++ b/deps/v8/src/codegen/ia32/macro-assembler-ia32.cc
@@ -91,26 +91,16 @@ void TurboAssembler::CompareRoot(Register with, RootIndex index) {
}
}
-void TurboAssembler::CompareStackLimit(Register with) {
- if (root_array_available()) {
- CompareRoot(with, RootIndex::kStackLimit);
- } else {
- DCHECK(!options().isolate_independent_code);
- ExternalReference ref =
- ExternalReference::address_of_stack_limit(isolate());
- cmp(with, Operand(ref.address(), RelocInfo::EXTERNAL_REFERENCE));
- }
-}
-
void TurboAssembler::CompareRealStackLimit(Register with) {
- if (root_array_available()) {
- CompareRoot(with, RootIndex::kRealStackLimit);
- } else {
- DCHECK(!options().isolate_independent_code);
- ExternalReference ref =
- ExternalReference::address_of_real_stack_limit(isolate());
- cmp(with, Operand(ref.address(), RelocInfo::EXTERNAL_REFERENCE));
- }
+ CHECK(root_array_available()); // Only used by builtins.
+
+ // Address through the root register. No load is needed.
+ ExternalReference limit =
+ ExternalReference::address_of_real_jslimit(isolate());
+ DCHECK(IsAddressableThroughRootRegister(isolate(), limit));
+
+ intptr_t offset = RootRegisterOffsetForExternalReference(isolate(), limit);
+ cmp(with, Operand(kRootRegister, offset));
}
void MacroAssembler::PushRoot(RootIndex index) {
@@ -465,8 +455,9 @@ void MacroAssembler::RecordWrite(Register object, Register address,
DCHECK(value != address);
AssertNotSmi(object);
- if (remembered_set_action == OMIT_REMEMBERED_SET &&
- !FLAG_incremental_marking) {
+ if ((remembered_set_action == OMIT_REMEMBERED_SET &&
+ !FLAG_incremental_marking) ||
+ FLAG_disable_write_barriers) {
return;
}
@@ -1875,11 +1866,7 @@ void TurboAssembler::Call(Handle<Code> code_object, RelocInfo::Mode rmode) {
if (isolate()->builtins()->IsBuiltinHandle(code_object, &builtin_index) &&
Builtins::IsIsolateIndependent(builtin_index)) {
// Inline the trampoline.
- RecordCommentForOffHeapTrampoline(builtin_index);
- CHECK_NE(builtin_index, Builtins::kNoBuiltinId);
- EmbeddedData d = EmbeddedData::FromBlob();
- Address entry = d.InstructionStartOfBuiltin(builtin_index);
- call(entry, RelocInfo::OFF_HEAP_TARGET);
+ CallBuiltin(builtin_index);
return;
}
}
@@ -1907,6 +1894,16 @@ void TurboAssembler::CallBuiltinByIndex(Register builtin_index) {
call(builtin_index);
}
+void TurboAssembler::CallBuiltin(int builtin_index) {
+ DCHECK(Builtins::IsBuiltinId(builtin_index));
+ DCHECK(FLAG_embedded_builtins);
+ RecordCommentForOffHeapTrampoline(builtin_index);
+ CHECK_NE(builtin_index, Builtins::kNoBuiltinId);
+ EmbeddedData d = EmbeddedData::FromBlob();
+ Address entry = d.InstructionStartOfBuiltin(builtin_index);
+ call(entry, RelocInfo::OFF_HEAP_TARGET);
+}
+
void TurboAssembler::LoadCodeObjectEntry(Register destination,
Register code_object) {
// Code objects are called differently depending on whether we are generating
@@ -1960,6 +1957,12 @@ void TurboAssembler::JumpCodeObject(Register code_object) {
jmp(code_object);
}
+void TurboAssembler::Jump(const ExternalReference& reference) {
+ DCHECK(root_array_available());
+ jmp(Operand(kRootRegister, RootRegisterOffsetForExternalReferenceTableEntry(
+ isolate(), reference)));
+}
+
void TurboAssembler::Jump(Handle<Code> code_object, RelocInfo::Mode rmode) {
DCHECK_IMPLIES(options().isolate_independent_code,
Builtins::IsIsolateIndependentBuiltin(*code_object));
diff --git a/deps/v8/src/codegen/ia32/macro-assembler-ia32.h b/deps/v8/src/codegen/ia32/macro-assembler-ia32.h
index 9b13e87447..c65871cfad 100644
--- a/deps/v8/src/codegen/ia32/macro-assembler-ia32.h
+++ b/deps/v8/src/codegen/ia32/macro-assembler-ia32.h
@@ -91,10 +91,12 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase {
// register.
void LoadEntryFromBuiltinIndex(Register builtin_index);
void CallBuiltinByIndex(Register builtin_index) override;
+ void CallBuiltin(int builtin_index);
void LoadCodeObjectEntry(Register destination, Register code_object) override;
void CallCodeObject(Register code_object) override;
void JumpCodeObject(Register code_object) override;
+ void Jump(const ExternalReference& reference) override;
void RetpolineCall(Register reg);
void RetpolineCall(Address destination, RelocInfo::Mode rmode);
@@ -213,7 +215,6 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase {
void LoadAddress(Register destination, ExternalReference source);
- void CompareStackLimit(Register with);
void CompareRealStackLimit(Register with);
void CompareRoot(Register with, RootIndex index);
void CompareRoot(Register with, Register scratch, RootIndex index);