Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(63)

Side by Side Diff: test/cctest/compiler/test-run-intrinsics.cc

Issue 1010973010: Added %_HeapObjectGetMap and %_MapGetInstanceType intrinsics. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Renamed Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/runtime/runtime-object.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "test/cctest/compiler/function-tester.h" 7 #include "test/cctest/compiler/function-tester.h"
8 8
9 using namespace v8::internal; 9 using namespace v8::internal;
10 using namespace v8::internal::compiler; 10 using namespace v8::internal::compiler;
11 uint32_t flags = CompilationInfo::kInliningEnabled; 11 uint32_t flags = CompilationInfo::kInliningEnabled;
12 12
13 TEST(IsSmi) { 13
14 TEST(CallFunction) {
14 FLAG_turbo_deoptimization = true; 15 FLAG_turbo_deoptimization = true;
15 FunctionTester T("(function(a) { return %_IsSmi(a); })", flags); 16 FunctionTester T("(function(a,b) { return %_CallFunction(a, 1, 2, 3, b); })",
17 flags);
18 CompileRun("function f(a,b,c) { return a + b + c + this.d; }");
16 19
17 T.CheckTrue(T.Val(1)); 20 T.CheckCall(T.Val(129), T.NewObject("({d:123})"), T.NewObject("f"));
18 T.CheckFalse(T.Val(1.1)); 21 T.CheckCall(T.Val("6x"), T.NewObject("({d:'x'})"), T.NewObject("f"));
19 T.CheckFalse(T.Val(-0.0));
20 T.CheckTrue(T.Val(-2));
21 T.CheckFalse(T.Val(-2.3));
22 T.CheckFalse(T.undefined());
23 } 22 }
24 23
25 24
26 TEST(IsNonNegativeSmi) { 25 TEST(ClassOf) {
27 FLAG_turbo_deoptimization = true; 26 FLAG_turbo_deoptimization = true;
28 FunctionTester T("(function(a) { return %_IsNonNegativeSmi(a); })", flags); 27 FunctionTester T("(function(a) { return %_ClassOf(a); })", flags);
29 28
30 T.CheckTrue(T.Val(1)); 29 T.CheckCall(T.Val("Function"), T.NewObject("(function() {})"));
31 T.CheckFalse(T.Val(1.1)); 30 T.CheckCall(T.Val("Array"), T.NewObject("([1])"));
32 T.CheckFalse(T.Val(-0.0)); 31 T.CheckCall(T.Val("Object"), T.NewObject("({})"));
33 T.CheckFalse(T.Val(-2)); 32 T.CheckCall(T.Val("RegExp"), T.NewObject("(/x/)"));
34 T.CheckFalse(T.Val(-2.3)); 33 T.CheckCall(T.null(), T.undefined());
35 T.CheckFalse(T.undefined()); 34 T.CheckCall(T.null(), T.null());
35 T.CheckCall(T.null(), T.Val("x"));
36 T.CheckCall(T.null(), T.Val(1));
36 } 37 }
37 38
38 39
40 TEST(HeapObjectGetMap) {
41 FLAG_turbo_deoptimization = true;
42 FunctionTester T("(function(a) { return %_HeapObjectGetMap(a); })", flags);
43
44 Factory* factory = T.main_isolate()->factory();
45 T.CheckCall(factory->null_map(), T.null());
46 T.CheckCall(factory->undefined_map(), T.undefined());
47 T.CheckCall(factory->heap_number_map(), T.Val(3.1415));
48 T.CheckCall(factory->symbol_map(), factory->NewSymbol());
49 }
50
51
52 TEST(IsArray) {
53 FLAG_turbo_deoptimization = true;
54 FunctionTester T("(function(a) { return %_IsArray(a); })", flags);
55
56 T.CheckFalse(T.NewObject("(function() {})"));
57 T.CheckTrue(T.NewObject("([1])"));
58 T.CheckFalse(T.NewObject("({})"));
59 T.CheckFalse(T.NewObject("(/x/)"));
60 T.CheckFalse(T.undefined());
61 T.CheckFalse(T.null());
62 T.CheckFalse(T.Val("x"));
63 T.CheckFalse(T.Val(1));
64 }
65
66
67 TEST(IsFunction) {
68 FLAG_turbo_deoptimization = true;
69 FunctionTester T("(function(a) { return %_IsFunction(a); })", flags);
70
71 T.CheckTrue(T.NewObject("(function() {})"));
72 T.CheckFalse(T.NewObject("([1])"));
73 T.CheckFalse(T.NewObject("({})"));
74 T.CheckFalse(T.NewObject("(/x/)"));
75 T.CheckFalse(T.undefined());
76 T.CheckFalse(T.null());
77 T.CheckFalse(T.Val("x"));
78 T.CheckFalse(T.Val(1));
79 }
80
81
39 TEST(IsMinusZero) { 82 TEST(IsMinusZero) {
40 FLAG_turbo_deoptimization = true; 83 FLAG_turbo_deoptimization = true;
41 FunctionTester T("(function(a) { return %_IsMinusZero(a); })", flags); 84 FunctionTester T("(function(a) { return %_IsMinusZero(a); })", flags);
42 85
43 T.CheckFalse(T.Val(1)); 86 T.CheckFalse(T.Val(1));
44 T.CheckFalse(T.Val(1.1)); 87 T.CheckFalse(T.Val(1.1));
45 T.CheckTrue(T.Val(-0.0)); 88 T.CheckTrue(T.Val(-0.0));
46 T.CheckFalse(T.Val(-2)); 89 T.CheckFalse(T.Val(-2));
47 T.CheckFalse(T.Val(-2.3)); 90 T.CheckFalse(T.Val(-2.3));
48 T.CheckFalse(T.undefined()); 91 T.CheckFalse(T.undefined());
49 } 92 }
50 93
51 94
52 TEST(IsArray) { 95 TEST(IsNonNegativeSmi) {
53 FLAG_turbo_deoptimization = true; 96 FLAG_turbo_deoptimization = true;
54 FunctionTester T("(function(a) { return %_IsArray(a); })", flags); 97 FunctionTester T("(function(a) { return %_IsNonNegativeSmi(a); })", flags);
55 98
56 T.CheckFalse(T.NewObject("(function() {})")); 99 T.CheckTrue(T.Val(1));
57 T.CheckTrue(T.NewObject("([1])")); 100 T.CheckFalse(T.Val(1.1));
58 T.CheckFalse(T.NewObject("({})")); 101 T.CheckFalse(T.Val(-0.0));
59 T.CheckFalse(T.NewObject("(/x/)")); 102 T.CheckFalse(T.Val(-2));
103 T.CheckFalse(T.Val(-2.3));
60 T.CheckFalse(T.undefined()); 104 T.CheckFalse(T.undefined());
61 T.CheckFalse(T.null());
62 T.CheckFalse(T.Val("x"));
63 T.CheckFalse(T.Val(1));
64 } 105 }
65 106
66 107
67 TEST(IsObject) { 108 TEST(IsObject) {
68 FLAG_turbo_deoptimization = true; 109 FLAG_turbo_deoptimization = true;
69 FunctionTester T("(function(a) { return %_IsObject(a); })", flags); 110 FunctionTester T("(function(a) { return %_IsObject(a); })", flags);
70 111
71 T.CheckFalse(T.NewObject("(function() {})")); 112 T.CheckFalse(T.NewObject("(function() {})"));
72 T.CheckTrue(T.NewObject("([1])")); 113 T.CheckTrue(T.NewObject("([1])"));
73 T.CheckTrue(T.NewObject("({})")); 114 T.CheckTrue(T.NewObject("({})"));
74 T.CheckTrue(T.NewObject("(/x/)")); 115 T.CheckTrue(T.NewObject("(/x/)"));
75 T.CheckFalse(T.undefined()); 116 T.CheckFalse(T.undefined());
76 T.CheckTrue(T.null()); 117 T.CheckTrue(T.null());
77 T.CheckFalse(T.Val("x")); 118 T.CheckFalse(T.Val("x"));
78 T.CheckFalse(T.Val(1)); 119 T.CheckFalse(T.Val(1));
79 } 120 }
80 121
81 122
82 TEST(IsFunction) { 123 TEST(IsRegExp) {
83 FLAG_turbo_deoptimization = true; 124 FLAG_turbo_deoptimization = true;
84 FunctionTester T("(function(a) { return %_IsFunction(a); })", flags); 125 FunctionTester T("(function(a) { return %_IsRegExp(a); })", flags);
85 126
86 T.CheckTrue(T.NewObject("(function() {})")); 127 T.CheckFalse(T.NewObject("(function() {})"));
87 T.CheckFalse(T.NewObject("([1])")); 128 T.CheckFalse(T.NewObject("([1])"));
88 T.CheckFalse(T.NewObject("({})")); 129 T.CheckFalse(T.NewObject("({})"));
89 T.CheckFalse(T.NewObject("(/x/)")); 130 T.CheckTrue(T.NewObject("(/x/)"));
90 T.CheckFalse(T.undefined()); 131 T.CheckFalse(T.undefined());
91 T.CheckFalse(T.null()); 132 T.CheckFalse(T.null());
92 T.CheckFalse(T.Val("x")); 133 T.CheckFalse(T.Val("x"));
93 T.CheckFalse(T.Val(1)); 134 T.CheckFalse(T.Val(1));
94 } 135 }
95 136
96 137
97 TEST(IsRegExp) { 138 TEST(IsSmi) {
98 FLAG_turbo_deoptimization = true; 139 FLAG_turbo_deoptimization = true;
99 FunctionTester T("(function(a) { return %_IsRegExp(a); })", flags); 140 FunctionTester T("(function(a) { return %_IsSmi(a); })", flags);
100 141
101 T.CheckFalse(T.NewObject("(function() {})")); 142 T.CheckTrue(T.Val(1));
102 T.CheckFalse(T.NewObject("([1])")); 143 T.CheckFalse(T.Val(1.1));
103 T.CheckFalse(T.NewObject("({})")); 144 T.CheckFalse(T.Val(-0.0));
104 T.CheckTrue(T.NewObject("(/x/)")); 145 T.CheckTrue(T.Val(-2));
146 T.CheckFalse(T.Val(-2.3));
105 T.CheckFalse(T.undefined()); 147 T.CheckFalse(T.undefined());
106 T.CheckFalse(T.null());
107 T.CheckFalse(T.Val("x"));
108 T.CheckFalse(T.Val(1));
109 } 148 }
110 149
111 150
112 TEST(ClassOf) { 151 TEST(MapGetInstanceType) {
113 FLAG_turbo_deoptimization = true; 152 FLAG_turbo_deoptimization = true;
114 FunctionTester T("(function(a) { return %_ClassOf(a); })", flags); 153 FunctionTester T(
154 "(function(a) { return %_MapGetInstanceType(%_HeapObjectGetMap(a)); })",
155 flags);
115 156
116 T.CheckCall(T.Val("Function"), T.NewObject("(function() {})")); 157 Factory* factory = T.main_isolate()->factory();
117 T.CheckCall(T.Val("Array"), T.NewObject("([1])")); 158 T.CheckCall(T.Val(ODDBALL_TYPE), T.null());
118 T.CheckCall(T.Val("Object"), T.NewObject("({})")); 159 T.CheckCall(T.Val(ODDBALL_TYPE), T.undefined());
119 T.CheckCall(T.Val("RegExp"), T.NewObject("(/x/)")); 160 T.CheckCall(T.Val(HEAP_NUMBER_TYPE), T.Val(3.1415));
120 T.CheckCall(T.null(), T.undefined()); 161 T.CheckCall(T.Val(SYMBOL_TYPE), factory->NewSymbol());
121 T.CheckCall(T.null(), T.null());
122 T.CheckCall(T.null(), T.Val("x"));
123 T.CheckCall(T.null(), T.Val(1));
124 } 162 }
125 163
126 164
127 TEST(ObjectEquals) { 165 TEST(ObjectEquals) {
128 FLAG_turbo_deoptimization = true; 166 FLAG_turbo_deoptimization = true;
129 FunctionTester T("(function(a,b) { return %_ObjectEquals(a,b); })", flags); 167 FunctionTester T("(function(a,b) { return %_ObjectEquals(a,b); })", flags);
130 CompileRun("var o = {}"); 168 CompileRun("var o = {}");
131 169
132 T.CheckTrue(T.NewObject("(o)"), T.NewObject("(o)")); 170 T.CheckTrue(T.NewObject("(o)"), T.NewObject("(o)"));
133 T.CheckTrue(T.Val("internal"), T.Val("internal")); 171 T.CheckTrue(T.Val("internal"), T.Val("internal"));
134 T.CheckTrue(T.true_value(), T.true_value()); 172 T.CheckTrue(T.true_value(), T.true_value());
135 T.CheckFalse(T.true_value(), T.false_value()); 173 T.CheckFalse(T.true_value(), T.false_value());
136 T.CheckFalse(T.NewObject("({})"), T.NewObject("({})")); 174 T.CheckFalse(T.NewObject("({})"), T.NewObject("({})"));
137 T.CheckFalse(T.Val("a"), T.Val("b")); 175 T.CheckFalse(T.Val("a"), T.Val("b"));
138 } 176 }
139 177
140 178
141 TEST(ValueOf) {
142 FLAG_turbo_deoptimization = true;
143 FunctionTester T("(function(a) { return %_ValueOf(a); })", flags);
144
145 T.CheckCall(T.Val("a"), T.Val("a"));
146 T.CheckCall(T.Val("b"), T.NewObject("(new String('b'))"));
147 T.CheckCall(T.Val(123), T.Val(123));
148 T.CheckCall(T.Val(456), T.NewObject("(new Number(456))"));
149 }
150
151
152 TEST(SetValueOf) { 179 TEST(SetValueOf) {
153 FLAG_turbo_deoptimization = true; 180 FLAG_turbo_deoptimization = true;
154 FunctionTester T("(function(a,b) { return %_SetValueOf(a,b); })", flags); 181 FunctionTester T("(function(a,b) { return %_SetValueOf(a,b); })", flags);
155 182
156 T.CheckCall(T.Val("a"), T.NewObject("(new String)"), T.Val("a")); 183 T.CheckCall(T.Val("a"), T.NewObject("(new String)"), T.Val("a"));
157 T.CheckCall(T.Val(123), T.NewObject("(new Number)"), T.Val(123)); 184 T.CheckCall(T.Val(123), T.NewObject("(new Number)"), T.Val(123));
158 T.CheckCall(T.Val("x"), T.undefined(), T.Val("x")); 185 T.CheckCall(T.Val("x"), T.undefined(), T.Val("x"));
159 } 186 }
160 187
161 188
162 TEST(StringCharFromCode) { 189 TEST(StringAdd) {
163 FLAG_turbo_deoptimization = true; 190 FLAG_turbo_deoptimization = true;
164 FunctionTester T("(function(a) { return %_StringCharFromCode(a); })", flags); 191 FunctionTester T("(function(a,b) { return %_StringAdd(a,b); })", flags);
165 192
166 T.CheckCall(T.Val("a"), T.Val(97)); 193 T.CheckCall(T.Val("aaabbb"), T.Val("aaa"), T.Val("bbb"));
167 T.CheckCall(T.Val("\xE2\x9D\x8A"), T.Val(0x274A)); 194 T.CheckCall(T.Val("aaa"), T.Val("aaa"), T.Val(""));
168 T.CheckCall(T.Val(""), T.undefined()); 195 T.CheckCall(T.Val("bbb"), T.Val(""), T.Val("bbb"));
169 } 196 }
170 197
171 198
172 TEST(StringCharAt) { 199 TEST(StringCharAt) {
173 FLAG_turbo_deoptimization = true; 200 FLAG_turbo_deoptimization = true;
174 FunctionTester T("(function(a,b) { return %_StringCharAt(a,b); })", flags); 201 FunctionTester T("(function(a,b) { return %_StringCharAt(a,b); })", flags);
175 202
176 T.CheckCall(T.Val("e"), T.Val("huge fan!"), T.Val(3)); 203 T.CheckCall(T.Val("e"), T.Val("huge fan!"), T.Val(3));
177 T.CheckCall(T.Val("f"), T.Val("\xE2\x9D\x8A fan!"), T.Val(2)); 204 T.CheckCall(T.Val("f"), T.Val("\xE2\x9D\x8A fan!"), T.Val(2));
178 T.CheckCall(T.Val(""), T.Val("not a fan!"), T.Val(23)); 205 T.CheckCall(T.Val(""), T.Val("not a fan!"), T.Val(23));
179 } 206 }
180 207
181 208
182 TEST(StringCharCodeAt) { 209 TEST(StringCharCodeAt) {
183 FLAG_turbo_deoptimization = true; 210 FLAG_turbo_deoptimization = true;
184 FunctionTester T("(function(a,b) { return %_StringCharCodeAt(a,b); })", 211 FunctionTester T("(function(a,b) { return %_StringCharCodeAt(a,b); })",
185 flags); 212 flags);
186 213
187 T.CheckCall(T.Val('e'), T.Val("huge fan!"), T.Val(3)); 214 T.CheckCall(T.Val('e'), T.Val("huge fan!"), T.Val(3));
188 T.CheckCall(T.Val('f'), T.Val("\xE2\x9D\x8A fan!"), T.Val(2)); 215 T.CheckCall(T.Val('f'), T.Val("\xE2\x9D\x8A fan!"), T.Val(2));
189 T.CheckCall(T.nan(), T.Val("not a fan!"), T.Val(23)); 216 T.CheckCall(T.nan(), T.Val("not a fan!"), T.Val(23));
190 } 217 }
191 218
192 219
193 TEST(StringAdd) { 220 TEST(StringCharFromCode) {
194 FLAG_turbo_deoptimization = true; 221 FLAG_turbo_deoptimization = true;
195 FunctionTester T("(function(a,b) { return %_StringAdd(a,b); })", flags); 222 FunctionTester T("(function(a) { return %_StringCharFromCode(a); })", flags);
196 223
197 T.CheckCall(T.Val("aaabbb"), T.Val("aaa"), T.Val("bbb")); 224 T.CheckCall(T.Val("a"), T.Val(97));
198 T.CheckCall(T.Val("aaa"), T.Val("aaa"), T.Val("")); 225 T.CheckCall(T.Val("\xE2\x9D\x8A"), T.Val(0x274A));
199 T.CheckCall(T.Val("bbb"), T.Val(""), T.Val("bbb")); 226 T.CheckCall(T.Val(""), T.undefined());
200 } 227 }
201 228
202 229
203 TEST(StringSubString) {
204 FLAG_turbo_deoptimization = true;
205 FunctionTester T("(function(a,b) { return %_SubString(a,b,b+3); })", flags);
206
207 T.CheckCall(T.Val("aaa"), T.Val("aaabbb"), T.Val(0.0));
208 T.CheckCall(T.Val("abb"), T.Val("aaabbb"), T.Val(2));
209 T.CheckCall(T.Val("aaa"), T.Val("aaa"), T.Val(0.0));
210 }
211
212
213 TEST(StringCompare) { 230 TEST(StringCompare) {
214 FLAG_turbo_deoptimization = true; 231 FLAG_turbo_deoptimization = true;
215 FunctionTester T("(function(a,b) { return %_StringCompare(a,b); })", flags); 232 FunctionTester T("(function(a,b) { return %_StringCompare(a,b); })", flags);
216 233
217 T.CheckCall(T.Val(-1), T.Val("aaa"), T.Val("bbb")); 234 T.CheckCall(T.Val(-1), T.Val("aaa"), T.Val("bbb"));
218 T.CheckCall(T.Val(0.0), T.Val("bbb"), T.Val("bbb")); 235 T.CheckCall(T.Val(0.0), T.Val("bbb"), T.Val("bbb"));
219 T.CheckCall(T.Val(+1), T.Val("ccc"), T.Val("bbb")); 236 T.CheckCall(T.Val(+1), T.Val("ccc"), T.Val("bbb"));
220 } 237 }
221 238
222 239
223 TEST(CallFunction) { 240 TEST(SubString) {
224 FLAG_turbo_deoptimization = true; 241 FLAG_turbo_deoptimization = true;
225 FunctionTester T("(function(a,b) { return %_CallFunction(a, 1, 2, 3, b); })", 242 FunctionTester T("(function(a,b) { return %_SubString(a,b,b+3); })", flags);
226 flags);
227 CompileRun("function f(a,b,c) { return a + b + c + this.d; }");
228 243
229 T.CheckCall(T.Val(129), T.NewObject("({d:123})"), T.NewObject("f")); 244 T.CheckCall(T.Val("aaa"), T.Val("aaabbb"), T.Val(0.0));
230 T.CheckCall(T.Val("6x"), T.NewObject("({d:'x'})"), T.NewObject("f")); 245 T.CheckCall(T.Val("abb"), T.Val("aaabbb"), T.Val(2));
246 T.CheckCall(T.Val("aaa"), T.Val("aaa"), T.Val(0.0));
231 } 247 }
248
249
250 TEST(ValueOf) {
251 FLAG_turbo_deoptimization = true;
252 FunctionTester T("(function(a) { return %_ValueOf(a); })", flags);
253
254 T.CheckCall(T.Val("a"), T.Val("a"));
255 T.CheckCall(T.Val("b"), T.NewObject("(new String('b'))"));
256 T.CheckCall(T.Val(123), T.Val(123));
257 T.CheckCall(T.Val(456), T.NewObject("(new Number(456))"));
258 }
OLDNEW
« no previous file with comments | « src/runtime/runtime-object.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698