Skip to content

Commit eb09388

Browse files
rmacnak-googleCommit Queue
authored andcommitted
[vm] Replace tag asm intrinsics with kernel intrinsics.
TEST=ci CoreLibraryReviewExempt: no interface changes Change-Id: I1bd831d2b20d5f27fefa8b388939c2829a62f5ad Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/446983 Reviewed-by: Alexander Aprelev <[email protected]> Commit-Queue: Ryan Macnak <[email protected]>
1 parent 0e5bd0e commit eb09388

17 files changed

+50
-219
lines changed

runtime/lib/profiler.cc

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,4 @@ DEFINE_NATIVE_ENTRY(UserTag_makeCurrent, 0, 1) {
3232
return self.MakeActive();
3333
}
3434

35-
DEFINE_NATIVE_ENTRY(UserTag_defaultTag, 0, 0) {
36-
if (FLAG_trace_intrinsified_natives) {
37-
OS::PrintErr("UserTag_defaultTag\n");
38-
}
39-
return thread->default_tag();
40-
}
41-
42-
DEFINE_NATIVE_ENTRY(Profiler_getCurrentTag, 0, 0) {
43-
if (FLAG_trace_intrinsified_natives) {
44-
OS::PrintErr("Profiler_getCurrentTag\n");
45-
}
46-
return thread->current_tag();
47-
}
48-
4935
} // namespace dart

runtime/lib/timeline.cc

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,6 @@ namespace dart {
1515

1616
// Native implementations for the dart:developer library.
1717

18-
DEFINE_NATIVE_ENTRY(Timeline_isDartStreamEnabled, 0, 0) {
19-
#if defined(SUPPORT_TIMELINE)
20-
if (Timeline::GetDartStream()->enabled()) {
21-
return Bool::True().ptr();
22-
}
23-
#endif
24-
return Bool::False().ptr();
25-
}
26-
2718
DEFINE_NATIVE_ENTRY(Timeline_getNextTaskId, 0, 0) {
2819
#if !defined(SUPPORT_TIMELINE)
2920
return Integer::New(0);

runtime/vm/bootstrap_natives.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,6 @@ namespace dart {
147147
V(Stopwatch_frequency, 0) \
148148
V(Timeline_getNextTaskId, 0) \
149149
V(Timeline_getTraceClock, 0) \
150-
V(Timeline_isDartStreamEnabled, 0) \
151150
V(Timeline_reportTaskEvent, 5) \
152151
V(MicrotaskMirrorQueue_onScheduleAsyncCallback, 0) \
153152
V(MicrotaskMirrorQueue_onSchedulePriorityAsyncCallback, 0) \
@@ -283,9 +282,7 @@ namespace dart {
283282
V(Uri_isWindowsPlatform, 0) \
284283
V(UserTag_new, 2) \
285284
V(UserTag_label, 1) \
286-
V(UserTag_defaultTag, 0) \
287285
V(UserTag_makeCurrent, 1) \
288-
V(Profiler_getCurrentTag, 0) \
289286
V(VMService_SendIsolateServiceMessage, 2) \
290287
V(VMService_SendRootServiceMessage, 1) \
291288
V(VMService_OnStart, 0) \

runtime/vm/compiler/asm_intrinsifier_arm.cc

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1738,35 +1738,6 @@ void AsmIntrinsifier::IntrinsifyRegExpExecuteMatch(Assembler* assembler,
17381738
__ Branch(FieldAddress(FUNCTION_REG, target::Function::entry_point_offset()));
17391739
}
17401740

1741-
void AsmIntrinsifier::UserTag_defaultTag(Assembler* assembler,
1742-
Label* normal_ir_body) {
1743-
__ ldr(R0, Address(THR, target::Thread::default_tag_offset()));
1744-
__ Ret();
1745-
}
1746-
1747-
void AsmIntrinsifier::Profiler_getCurrentTag(Assembler* assembler,
1748-
Label* normal_ir_body) {
1749-
__ ldr(R0, Address(THR, target::Thread::current_tag_offset()));
1750-
__ Ret();
1751-
}
1752-
1753-
void AsmIntrinsifier::Timeline_isDartStreamEnabled(Assembler* assembler,
1754-
Label* normal_ir_body) {
1755-
#if !defined(SUPPORT_TIMELINE)
1756-
__ LoadObject(R0, CastHandle<Object>(FalseObject()));
1757-
__ Ret();
1758-
#else
1759-
// Load TimelineStream*.
1760-
__ ldr(R0, Address(THR, target::Thread::dart_stream_offset()));
1761-
// Load uintptr_t from TimelineStream*.
1762-
__ ldr(R0, Address(R0, target::TimelineStream::enabled_offset()));
1763-
__ cmp(R0, Operand(0));
1764-
__ LoadObject(R0, CastHandle<Object>(TrueObject()), NE);
1765-
__ LoadObject(R0, CastHandle<Object>(FalseObject()), EQ);
1766-
__ Ret();
1767-
#endif
1768-
}
1769-
17701741
void AsmIntrinsifier::Timeline_getNextTaskId(Assembler* assembler,
17711742
Label* normal_ir_body) {
17721743
#if !defined(SUPPORT_TIMELINE)

runtime/vm/compiler/asm_intrinsifier_arm64.cc

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1979,36 +1979,6 @@ void AsmIntrinsifier::IntrinsifyRegExpExecuteMatch(Assembler* assembler,
19791979
__ br(R1);
19801980
}
19811981

1982-
void AsmIntrinsifier::UserTag_defaultTag(Assembler* assembler,
1983-
Label* normal_ir_body) {
1984-
__ ldr(R0, Address(THR, target::Thread::default_tag_offset()));
1985-
__ ret();
1986-
}
1987-
1988-
void AsmIntrinsifier::Profiler_getCurrentTag(Assembler* assembler,
1989-
Label* normal_ir_body) {
1990-
__ ldr(R0, Address(THR, target::Thread::current_tag_offset()));
1991-
__ ret();
1992-
}
1993-
1994-
void AsmIntrinsifier::Timeline_isDartStreamEnabled(Assembler* assembler,
1995-
Label* normal_ir_body) {
1996-
#if !defined(SUPPORT_TIMELINE)
1997-
__ LoadObject(R0, CastHandle<Object>(FalseObject()));
1998-
__ ret();
1999-
#else
2000-
// Load TimelineStream*.
2001-
__ ldr(R0, Address(THR, target::Thread::dart_stream_offset()));
2002-
// Load uintptr_t from TimelineStream*.
2003-
__ ldr(R0, Address(R0, target::TimelineStream::enabled_offset()));
2004-
__ cmp(R0, Operand(0));
2005-
__ LoadObject(R0, CastHandle<Object>(FalseObject()));
2006-
__ LoadObject(TMP, CastHandle<Object>(TrueObject()));
2007-
__ csel(R0, TMP, R0, NE);
2008-
__ ret();
2009-
#endif
2010-
}
2011-
20121982
void AsmIntrinsifier::Timeline_getNextTaskId(Assembler* assembler,
20131983
Label* normal_ir_body) {
20141984
#if !defined(SUPPORT_TIMELINE)

runtime/vm/compiler/asm_intrinsifier_ia32.cc

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1775,41 +1775,6 @@ void AsmIntrinsifier::IntrinsifyRegExpExecuteMatch(Assembler* assembler,
17751775
__ jmp(FieldAddress(FUNCTION_REG, target::Function::entry_point_offset()));
17761776
}
17771777

1778-
void AsmIntrinsifier::UserTag_defaultTag(Assembler* assembler,
1779-
Label* normal_ir_body) {
1780-
__ movl(EAX, Address(THR, target::Thread::default_tag_offset()));
1781-
__ ret();
1782-
}
1783-
1784-
void AsmIntrinsifier::Profiler_getCurrentTag(Assembler* assembler,
1785-
Label* normal_ir_body) {
1786-
__ movl(EAX, Address(THR, target::Thread::current_tag_offset()));
1787-
__ ret();
1788-
}
1789-
1790-
void AsmIntrinsifier::Timeline_isDartStreamEnabled(Assembler* assembler,
1791-
Label* normal_ir_body) {
1792-
#if !defined(SUPPORT_TIMELINE)
1793-
__ LoadObject(EAX, CastHandle<Object>(FalseObject()));
1794-
__ ret();
1795-
#else
1796-
Label true_label;
1797-
// Load TimelineStream*.
1798-
__ movl(EAX, Address(THR, target::Thread::dart_stream_offset()));
1799-
// Load uintptr_t from TimelineStream*.
1800-
__ movl(EAX, Address(EAX, target::TimelineStream::enabled_offset()));
1801-
__ cmpl(EAX, Immediate(0));
1802-
__ j(NOT_ZERO, &true_label, Assembler::kNearJump);
1803-
// Not enabled.
1804-
__ LoadObject(EAX, CastHandle<Object>(FalseObject()));
1805-
__ ret();
1806-
// Enabled.
1807-
__ Bind(&true_label);
1808-
__ LoadObject(EAX, CastHandle<Object>(TrueObject()));
1809-
__ ret();
1810-
#endif
1811-
}
1812-
18131778
void AsmIntrinsifier::Timeline_getNextTaskId(Assembler* assembler,
18141779
Label* normal_ir_body) {
18151780
#if !defined(SUPPORT_TIMELINE)

runtime/vm/compiler/asm_intrinsifier_riscv.cc

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1995,38 +1995,6 @@ void AsmIntrinsifier::IntrinsifyRegExpExecuteMatch(Assembler* assembler,
19951995
__ jr(T1);
19961996
}
19971997

1998-
void AsmIntrinsifier::UserTag_defaultTag(Assembler* assembler,
1999-
Label* normal_ir_body) {
2000-
__ LoadFromOffset(A0, THR, target::Thread::default_tag_offset());
2001-
__ ret();
2002-
}
2003-
2004-
void AsmIntrinsifier::Profiler_getCurrentTag(Assembler* assembler,
2005-
Label* normal_ir_body) {
2006-
__ LoadFromOffset(A0, THR, target::Thread::current_tag_offset());
2007-
__ ret();
2008-
}
2009-
2010-
void AsmIntrinsifier::Timeline_isDartStreamEnabled(Assembler* assembler,
2011-
Label* normal_ir_body) {
2012-
#if !defined(SUPPORT_TIMELINE)
2013-
__ LoadObject(A0, CastHandle<Object>(FalseObject()));
2014-
__ ret();
2015-
#else
2016-
Label true_label;
2017-
// Load TimelineStream*.
2018-
__ LoadFromOffset(A0, THR, target::Thread::dart_stream_offset());
2019-
// Load uintptr_t from TimelineStream*.
2020-
__ lx(A0, Address(A0, target::TimelineStream::enabled_offset()));
2021-
__ bnez(A0, &true_label, Assembler::kNearJump);
2022-
__ LoadObject(A0, CastHandle<Object>(FalseObject()));
2023-
__ ret();
2024-
__ Bind(&true_label);
2025-
__ LoadObject(A0, CastHandle<Object>(TrueObject()));
2026-
__ ret();
2027-
#endif
2028-
}
2029-
20301998
void AsmIntrinsifier::Timeline_getNextTaskId(Assembler* assembler,
20311999
Label* normal_ir_body) {
20322000
#if !defined(SUPPORT_TIMELINE)

runtime/vm/compiler/asm_intrinsifier_x64.cc

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1875,41 +1875,6 @@ void AsmIntrinsifier::IntrinsifyRegExpExecuteMatch(Assembler* assembler,
18751875
__ jmp(RDI);
18761876
}
18771877

1878-
void AsmIntrinsifier::UserTag_defaultTag(Assembler* assembler,
1879-
Label* normal_ir_body) {
1880-
__ movq(RAX, Address(THR, target::Thread::default_tag_offset()));
1881-
__ ret();
1882-
}
1883-
1884-
void AsmIntrinsifier::Profiler_getCurrentTag(Assembler* assembler,
1885-
Label* normal_ir_body) {
1886-
__ movq(RAX, Address(THR, target::Thread::current_tag_offset()));
1887-
__ ret();
1888-
}
1889-
1890-
void AsmIntrinsifier::Timeline_isDartStreamEnabled(Assembler* assembler,
1891-
Label* normal_ir_body) {
1892-
#if !defined(SUPPORT_TIMELINE)
1893-
__ LoadObject(RAX, CastHandle<Object>(FalseObject()));
1894-
__ ret();
1895-
#else
1896-
Label true_label;
1897-
// Load TimelineStream*.
1898-
__ movq(RAX, Address(THR, target::Thread::dart_stream_offset()));
1899-
// Load uintptr_t from TimelineStream*.
1900-
__ movq(RAX, Address(RAX, target::TimelineStream::enabled_offset()));
1901-
__ cmpq(RAX, Immediate(0));
1902-
__ j(NOT_ZERO, &true_label, Assembler::kNearJump);
1903-
// Not enabled.
1904-
__ LoadObject(RAX, CastHandle<Object>(FalseObject()));
1905-
__ ret();
1906-
// Enabled.
1907-
__ Bind(&true_label);
1908-
__ LoadObject(RAX, CastHandle<Object>(TrueObject()));
1909-
__ ret();
1910-
#endif
1911-
}
1912-
19131878
void AsmIntrinsifier::Timeline_getNextTaskId(Assembler* assembler,
19141879
Label* normal_ir_body) {
19151880
#if !defined(SUPPORT_TIMELINE)

runtime/vm/compiler/backend/slot.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,9 @@ class ParsedFunction;
231231
V(Isolate, _, finalizers, GrowableObjectArray, VAR) \
232232
V(LocalHandle, _, ptr, Dynamic, VAR) \
233233
V(ObjectStore, _, record_field_names, Array, VAR) \
234-
V(PersistentHandle, _, ptr, Dynamic, VAR)
234+
V(PersistentHandle, _, ptr, Dynamic, VAR) \
235+
V(Thread, _, current_tag, UserTag, VAR) \
236+
V(Thread, _, default_tag, UserTag, VAR)
235237

236238
// List of slots that correspond to fields of non-Dart objects containing
237239
// unboxed values in the following format:
@@ -281,6 +283,7 @@ class ParsedFunction;
281283
V(Thread, _, api_top_scope, false, VAR) \
282284
V(Thread, _, isolate, false, FINAL) \
283285
V(Thread, _, isolate_group, false, FINAL) \
286+
V(Thread, _, dart_stream, false, FINAL) \
284287
V(Thread, _, service_extension_stream, false, FINAL)
285288

286289
// No untagged slot on a non-Dart object should contain a GC-movable address.

runtime/vm/compiler/frontend/kernel_to_il.cc

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,7 +1110,10 @@ bool FlowGraphBuilder::IsRecognizedMethodForFlowGraph(
11101110
case MethodRecognizer::kFfiAbi:
11111111
case MethodRecognizer::kUtf8DecoderScan:
11121112
case MethodRecognizer::kHas63BitSmis:
1113+
case MethodRecognizer::kProfiler_getCurrentTag:
1114+
case MethodRecognizer::kUserTag_defaultTag:
11131115
case MethodRecognizer::kExtensionStreamHasListener:
1116+
case MethodRecognizer::kTimeline_isDartStreamEnabled:
11141117
case MethodRecognizer::kCompactHash_uninitializedIndex:
11151118
case MethodRecognizer::kCompactHash_uninitializedData:
11161119
case MethodRecognizer::kSmi_hashCode:
@@ -1720,6 +1723,14 @@ FlowGraph* FlowGraphBuilder::BuildGraphOfRecognizedMethod(
17201723
body += Constant(Bool::False());
17211724
#endif // defined(ARCH_IS_64_BIT)
17221725
} break;
1726+
case MethodRecognizer::kProfiler_getCurrentTag: {
1727+
body += LoadThread();
1728+
body += LoadNativeField(Slot::Thread_current_tag());
1729+
} break;
1730+
case MethodRecognizer::kUserTag_defaultTag: {
1731+
body += LoadThread();
1732+
body += LoadNativeField(Slot::Thread_default_tag());
1733+
} break;
17231734
case MethodRecognizer::kExtensionStreamHasListener: {
17241735
#ifdef PRODUCT
17251736
body += Constant(Bool::False());
@@ -1730,6 +1741,17 @@ FlowGraph* FlowGraphBuilder::BuildGraphOfRecognizedMethod(
17301741
// relaxed order access, which is acceptable for this use case.
17311742
body += IntToBool();
17321743
#endif // PRODUCT
1744+
} break;
1745+
case MethodRecognizer::kTimeline_isDartStreamEnabled: {
1746+
#if !defined(SUPPORT_TIMELINE)
1747+
body += Constant(Bool::False());
1748+
#else
1749+
body += LoadDartStream();
1750+
body += LoadNativeField(Slot::StreamInfo_enabled());
1751+
// StreamInfo::enabled_ is a std::atomic<intptr_t>. This is effectively
1752+
// relaxed order access, which is acceptable for this use case.
1753+
body += IntToBool();
1754+
#endif // SUPPORT_TIMELINE
17331755
} break;
17341756
case MethodRecognizer::kCompactHash_uninitializedIndex: {
17351757
body += Constant(Object::uninitialized_index());
@@ -4642,6 +4664,13 @@ Fragment FlowGraphBuilder::LoadServiceExtensionStream() {
46424664
return body;
46434665
}
46444666

4667+
Fragment FlowGraphBuilder::LoadDartStream() {
4668+
Fragment body;
4669+
body += LoadThread();
4670+
body += LoadNativeField(Slot::Thread_dart_stream());
4671+
return body;
4672+
}
4673+
46454674
// TODO(http://dartbug.com/47487): Support unboxed output value.
46464675
Fragment FlowGraphBuilder::BoolToInt() {
46474676
// TODO(http://dartbug.com/36855) Build IfThenElseInstr, instead of letting

0 commit comments

Comments
 (0)