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