We should support CreateThis in the FTL
[WebKit-https.git] / Source / JavaScriptCore / runtime / Intrinsic.h
1 /*
2  * Copyright (C) 2011-2017 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #pragma once
27
28 namespace JSC {
29
30 enum Intrinsic {
31     // Call intrinsics.
32     NoIntrinsic,
33     AbsIntrinsic,
34     ACosIntrinsic,
35     ASinIntrinsic,
36     ATanIntrinsic,
37     ACoshIntrinsic,
38     ASinhIntrinsic,
39     ATanhIntrinsic,
40     MinIntrinsic,
41     MaxIntrinsic,
42     SqrtIntrinsic,
43     SinIntrinsic,
44     CbrtIntrinsic,
45     Clz32Intrinsic,
46     CosIntrinsic,
47     TanIntrinsic,
48     CoshIntrinsic,
49     SinhIntrinsic,
50     TanhIntrinsic,
51     ArrayPushIntrinsic,
52     ArrayPopIntrinsic,
53     ArraySliceIntrinsic,
54     ArrayIndexOfIntrinsic,
55     CharCodeAtIntrinsic,
56     CharAtIntrinsic,
57     FromCharCodeIntrinsic,
58     PowIntrinsic,
59     FloorIntrinsic,
60     CeilIntrinsic,
61     RoundIntrinsic,
62     ExpIntrinsic,
63     Expm1Intrinsic,
64     LogIntrinsic,
65     Log10Intrinsic,
66     Log1pIntrinsic,
67     Log2Intrinsic,
68     RegExpExecIntrinsic,
69     RegExpTestIntrinsic,
70     RegExpTestFastIntrinsic,
71     RegExpMatchFastIntrinsic,
72     ObjectCreateIntrinsic,
73     ObjectGetPrototypeOfIntrinsic,
74     ObjectIsIntrinsic,
75     ReflectGetPrototypeOfIntrinsic,
76     StringPrototypeValueOfIntrinsic,
77     StringPrototypeReplaceIntrinsic,
78     StringPrototypeReplaceRegExpIntrinsic,
79     StringPrototypeSliceIntrinsic,
80     StringPrototypeToLowerCaseIntrinsic,
81     NumberPrototypeToStringIntrinsic,
82     NumberIsIntegerIntrinsic,
83     IMulIntrinsic,
84     RandomIntrinsic,
85     FRoundIntrinsic,
86     TruncIntrinsic,
87     IsTypedArrayViewIntrinsic,
88     BoundThisNoArgsFunctionCallIntrinsic,
89     JSMapGetIntrinsic,
90     JSMapHasIntrinsic,
91     JSMapSetIntrinsic,
92     JSMapBucketHeadIntrinsic,
93     JSMapBucketNextIntrinsic,
94     JSMapBucketKeyIntrinsic,
95     JSMapBucketValueIntrinsic,
96     JSSetHasIntrinsic,
97     JSSetAddIntrinsic,
98     JSSetBucketHeadIntrinsic,
99     JSSetBucketNextIntrinsic,
100     JSSetBucketKeyIntrinsic,
101     JSWeakMapGetIntrinsic,
102     JSWeakMapHasIntrinsic,
103     JSWeakMapSetIntrinsic,
104     JSWeakSetHasIntrinsic,
105     JSWeakSetAddIntrinsic,
106     HasOwnPropertyIntrinsic,
107     AtomicsAddIntrinsic,
108     AtomicsAndIntrinsic,
109     AtomicsCompareExchangeIntrinsic,
110     AtomicsExchangeIntrinsic,
111     AtomicsIsLockFreeIntrinsic,
112     AtomicsLoadIntrinsic,
113     AtomicsOrIntrinsic,
114     AtomicsStoreIntrinsic,
115     AtomicsSubIntrinsic,
116     AtomicsWaitIntrinsic,
117     AtomicsWakeIntrinsic,
118     AtomicsXorIntrinsic,
119     ParseIntIntrinsic,
120
121     // Getter intrinsics.
122     TypedArrayLengthIntrinsic,
123     TypedArrayByteLengthIntrinsic,
124     TypedArrayByteOffsetIntrinsic,
125     UnderscoreProtoIntrinsic,
126
127     // Debugging intrinsics. These are meant to be used as testing hacks within
128     // jsc.cpp and should never be exposed to users.
129     DFGTrueIntrinsic,
130     FTLTrueIntrinsic,
131     OSRExitIntrinsic,
132     IsFinalTierIntrinsic,
133     SetInt32HeapPredictionIntrinsic,
134     CheckInt32Intrinsic,
135     FiatInt52Intrinsic,
136
137     // These are used for $vm performance debugging features.
138     CPUMfenceIntrinsic,
139     CPURdtscIntrinsic,
140     CPUCpuidIntrinsic,
141     CPUPauseIntrinsic,
142 };
143
144 const char* intrinsicName(Intrinsic);
145
146 } // namespace JSC
147
148 namespace WTF {
149
150 class PrintStream;
151
152 void printInternal(PrintStream&, JSC::Intrinsic);
153
154 } // namespace WTF
155
156