• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2020 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5namespace ic {
6
7// --- The public interface (forwards to the actual implementation).
8
9@export
10macro CollectCallFeedback(
11    maybeTarget: JSAny, maybeReceiver: Lazy<JSAny>, context: Context,
12    maybeFeedbackVector: Undefined|FeedbackVector, slotId: uintptr): void {
13  callable::CollectCallFeedback(
14      maybeTarget, maybeReceiver, context, maybeFeedbackVector, slotId);
15}
16
17@export
18macro CollectInstanceOfFeedback(
19    maybeTarget: JSAny, context: Context,
20    maybeFeedbackVector: Undefined|FeedbackVector, slotId: uintptr): void {
21  callable::CollectInstanceOfFeedback(
22      maybeTarget, context, maybeFeedbackVector, slotId);
23}
24
25@export
26macro CollectConstructFeedback(implicit context: Context)(
27    target: JSAny, newTarget: JSAny,
28    maybeFeedbackVector: Undefined|FeedbackVector, slotId: uintptr,
29    updateFeedbackMode: constexpr UpdateFeedbackMode):
30    never labels ConstructGeneric,
31    ConstructArray(AllocationSite) {
32  callable::CollectConstructFeedback(
33      target, newTarget, maybeFeedbackVector, slotId, updateFeedbackMode)
34      otherwise ConstructGeneric, ConstructArray;
35}
36
37// --- Common functionality.
38
39extern macro MegamorphicSymbolConstant(): Symbol;
40extern macro UninitializedSymbolConstant(): Symbol;
41
42const kMegamorphicSymbol: Symbol = MegamorphicSymbolConstant();
43const kUninitializedSymbol: Symbol = UninitializedSymbolConstant();
44
45macro IsMegamorphic(feedback: MaybeObject): bool {
46  return TaggedEqual(feedback, kMegamorphicSymbol);
47}
48
49macro IsUninitialized(feedback: MaybeObject): bool {
50  return TaggedEqual(feedback, kUninitializedSymbol);
51}
52
53extern macro LoadFeedbackVectorSlot(FeedbackVector, uintptr): MaybeObject;
54extern macro LoadFeedbackVectorSlot(
55    FeedbackVector, uintptr, constexpr int32): MaybeObject;
56extern operator '[]' macro LoadFeedbackVectorSlot(
57    FeedbackVector, intptr): MaybeObject;
58extern macro StoreFeedbackVectorSlot(
59    FeedbackVector, uintptr, MaybeObject): void;
60extern macro StoreFeedbackVectorSlot(
61    FeedbackVector, uintptr, MaybeObject, constexpr WriteBarrierMode,
62    constexpr int32): void;
63extern macro StoreWeakReferenceInFeedbackVector(
64    FeedbackVector, uintptr, HeapObject): MaybeObject;
65extern macro ReportFeedbackUpdate(
66    FeedbackVector, uintptr, constexpr string): void;
67extern operator '.length_intptr' macro LoadFeedbackVectorLength(FeedbackVector):
68    intptr;
69
70}  // namespace ic
71