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

Side by Side Diff: src/interpreter/bytecode-array-builder.cc

Issue 1419003002: [Interpreter] Unify global and unallocated variable access. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix unallocated variable error Created 5 years, 1 month 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/interpreter/bytecode-array-builder.h ('k') | src/interpreter/bytecode-generator.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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/interpreter/bytecode-array-builder.h" 5 #include "src/interpreter/bytecode-array-builder.h"
6 6
7 namespace v8 { 7 namespace v8 {
8 namespace internal { 8 namespace internal {
9 namespace interpreter { 9 namespace interpreter {
10 10
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 } 257 }
258 258
259 259
260 BytecodeArrayBuilder& BytecodeArrayBuilder::StoreAccumulatorInRegister( 260 BytecodeArrayBuilder& BytecodeArrayBuilder::StoreAccumulatorInRegister(
261 Register reg) { 261 Register reg) {
262 Output(Bytecode::kStar, reg.ToOperand()); 262 Output(Bytecode::kStar, reg.ToOperand());
263 return *this; 263 return *this;
264 } 264 }
265 265
266 266
267 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadGlobal(
268 size_t name_index, int feedback_slot, LanguageMode language_mode) {
269 Bytecode bytecode = BytecodeForLoadGlobal(language_mode);
270 if (FitsInIdx8Operand(name_index) && FitsInIdx8Operand(feedback_slot)) {
271 Output(bytecode, static_cast<uint8_t>(name_index),
272 static_cast<uint8_t>(feedback_slot));
273 } else {
274 UNIMPLEMENTED();
275 }
276 return *this;
277 }
278
279
280 BytecodeArrayBuilder& BytecodeArrayBuilder::StoreGlobal(
281 size_t name_index, int feedback_slot, LanguageMode language_mode) {
282 Bytecode bytecode = BytecodeForStoreGlobal(language_mode);
283 if (FitsInIdx8Operand(name_index) && FitsInIdx8Operand(feedback_slot)) {
284 Output(bytecode, static_cast<uint8_t>(name_index),
285 static_cast<uint8_t>(feedback_slot));
286 } else {
287 UNIMPLEMENTED();
288 }
289 return *this;
290 }
291
292
267 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadContextSlot(Register context, 293 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadContextSlot(Register context,
268 int slot_index) { 294 int slot_index) {
269 DCHECK(slot_index >= 0); 295 DCHECK(slot_index >= 0);
270 if (FitsInIdx8Operand(slot_index)) { 296 if (FitsInIdx8Operand(slot_index)) {
271 Output(Bytecode::kLdaContextSlot, context.ToOperand(), 297 Output(Bytecode::kLdaContextSlot, context.ToOperand(),
272 static_cast<uint8_t>(slot_index)); 298 static_cast<uint8_t>(slot_index));
273 } else { 299 } else {
274 UNIMPLEMENTED(); 300 UNIMPLEMENTED();
275 } 301 }
276 return *this; 302 return *this;
277 } 303 }
278 304
279 305
280 BytecodeArrayBuilder& BytecodeArrayBuilder::StoreContextSlot(Register context, 306 BytecodeArrayBuilder& BytecodeArrayBuilder::StoreContextSlot(Register context,
281 int slot_index) { 307 int slot_index) {
282 DCHECK(slot_index >= 0); 308 DCHECK(slot_index >= 0);
283 if (FitsInIdx8Operand(slot_index)) { 309 if (FitsInIdx8Operand(slot_index)) {
284 Output(Bytecode::kStaContextSlot, context.ToOperand(), 310 Output(Bytecode::kStaContextSlot, context.ToOperand(),
285 static_cast<uint8_t>(slot_index)); 311 static_cast<uint8_t>(slot_index));
286 } else { 312 } else {
287 UNIMPLEMENTED(); 313 UNIMPLEMENTED();
288 } 314 }
289 return *this; 315 return *this;
290 } 316 }
291 317
292 318
293 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadNamedProperty( 319 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadNamedProperty(
294 Register object, int feedback_slot, LanguageMode language_mode) { 320 Register object, size_t name_index, int feedback_slot,
321 LanguageMode language_mode) {
295 Bytecode bytecode = BytecodeForLoadIC(language_mode); 322 Bytecode bytecode = BytecodeForLoadIC(language_mode);
296 if (FitsInIdx8Operand(feedback_slot)) { 323 if (FitsInIdx8Operand(name_index) && FitsInIdx8Operand(feedback_slot)) {
297 Output(bytecode, object.ToOperand(), static_cast<uint8_t>(feedback_slot)); 324 Output(bytecode, object.ToOperand(), static_cast<uint8_t>(name_index),
325 static_cast<uint8_t>(feedback_slot));
298 } else { 326 } else {
299 UNIMPLEMENTED(); 327 UNIMPLEMENTED();
300 } 328 }
301 return *this; 329 return *this;
302 } 330 }
303 331
304 332
305 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadKeyedProperty( 333 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadKeyedProperty(
306 Register object, int feedback_slot, LanguageMode language_mode) { 334 Register object, int feedback_slot, LanguageMode language_mode) {
307 Bytecode bytecode = BytecodeForKeyedLoadIC(language_mode); 335 Bytecode bytecode = BytecodeForKeyedLoadIC(language_mode);
308 if (FitsInIdx8Operand(feedback_slot)) { 336 if (FitsInIdx8Operand(feedback_slot)) {
309 Output(bytecode, object.ToOperand(), static_cast<uint8_t>(feedback_slot)); 337 Output(bytecode, object.ToOperand(), static_cast<uint8_t>(feedback_slot));
310 } else { 338 } else {
311 UNIMPLEMENTED(); 339 UNIMPLEMENTED();
312 } 340 }
313 return *this; 341 return *this;
314 } 342 }
315 343
316 344
317 BytecodeArrayBuilder& BytecodeArrayBuilder::StoreNamedProperty( 345 BytecodeArrayBuilder& BytecodeArrayBuilder::StoreNamedProperty(
318 Register object, Register name, int feedback_slot, 346 Register object, size_t name_index, int feedback_slot,
319 LanguageMode language_mode) { 347 LanguageMode language_mode) {
320 Bytecode bytecode = BytecodeForStoreIC(language_mode); 348 Bytecode bytecode = BytecodeForStoreIC(language_mode);
321 if (FitsInIdx8Operand(feedback_slot)) { 349 if (FitsInIdx8Operand(name_index) && FitsInIdx8Operand(feedback_slot)) {
322 Output(bytecode, object.ToOperand(), name.ToOperand(), 350 Output(bytecode, object.ToOperand(), static_cast<uint8_t>(name_index),
323 static_cast<uint8_t>(feedback_slot)); 351 static_cast<uint8_t>(feedback_slot));
324 } else { 352 } else {
325 UNIMPLEMENTED(); 353 UNIMPLEMENTED();
326 } 354 }
327 return *this; 355 return *this;
328 } 356 }
329 357
330 358
331 BytecodeArrayBuilder& BytecodeArrayBuilder::StoreKeyedProperty( 359 BytecodeArrayBuilder& BytecodeArrayBuilder::StoreKeyedProperty(
332 Register object, Register key, int feedback_slot, 360 Register object, Register key, int feedback_slot,
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after
888 case STRONG: 916 case STRONG:
889 UNIMPLEMENTED(); 917 UNIMPLEMENTED();
890 default: 918 default:
891 UNREACHABLE(); 919 UNREACHABLE();
892 } 920 }
893 return static_cast<Bytecode>(-1); 921 return static_cast<Bytecode>(-1);
894 } 922 }
895 923
896 924
897 // static 925 // static
926 Bytecode BytecodeArrayBuilder::BytecodeForLoadGlobal(
927 LanguageMode language_mode) {
928 switch (language_mode) {
929 case SLOPPY:
930 return Bytecode::kLdaGlobalSloppy;
931 case STRICT:
932 return Bytecode::kLdaGlobalStrict;
933 case STRONG:
934 UNIMPLEMENTED();
935 default:
936 UNREACHABLE();
937 }
938 return static_cast<Bytecode>(-1);
939 }
940
941
942 // static
943 Bytecode BytecodeArrayBuilder::BytecodeForStoreGlobal(
944 LanguageMode language_mode) {
945 switch (language_mode) {
946 case SLOPPY:
947 return Bytecode::kStaGlobalSloppy;
948 case STRICT:
949 return Bytecode::kStaGlobalStrict;
950 case STRONG:
951 UNIMPLEMENTED();
952 default:
953 UNREACHABLE();
954 }
955 return static_cast<Bytecode>(-1);
956 }
957
958
959 // static
898 bool BytecodeArrayBuilder::FitsInIdx8Operand(int value) { 960 bool BytecodeArrayBuilder::FitsInIdx8Operand(int value) {
899 return kMinUInt8 <= value && value <= kMaxUInt8; 961 return kMinUInt8 <= value && value <= kMaxUInt8;
900 } 962 }
901 963
902 964
903 // static 965 // static
904 bool BytecodeArrayBuilder::FitsInIdx8Operand(size_t value) { 966 bool BytecodeArrayBuilder::FitsInIdx8Operand(size_t value) {
905 return value <= static_cast<size_t>(kMaxUInt8); 967 return value <= static_cast<size_t>(kMaxUInt8);
906 } 968 }
907 969
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
954 DCHECK_GT(next_consecutive_count_, 0); 1016 DCHECK_GT(next_consecutive_count_, 0);
955 builder_->BorrowConsecutiveTemporaryRegister(next_consecutive_register_); 1017 builder_->BorrowConsecutiveTemporaryRegister(next_consecutive_register_);
956 allocated_.push_back(next_consecutive_register_); 1018 allocated_.push_back(next_consecutive_register_);
957 next_consecutive_count_--; 1019 next_consecutive_count_--;
958 return Register(next_consecutive_register_++); 1020 return Register(next_consecutive_register_++);
959 } 1021 }
960 1022
961 } // namespace interpreter 1023 } // namespace interpreter
962 } // namespace internal 1024 } // namespace internal
963 } // namespace v8 1025 } // namespace v8
OLDNEW
« no previous file with comments | « src/interpreter/bytecode-array-builder.h ('k') | src/interpreter/bytecode-generator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698