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

Side by Side Diff: src/arm64/lithium-codegen-arm64.cc

Issue 1254623002: Remove ExternalArray, derived types, and element kinds (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: updates Created 5 years, 5 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
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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 "src/arm64/lithium-codegen-arm64.h" 7 #include "src/arm64/lithium-codegen-arm64.h"
8 #include "src/arm64/lithium-gap-resolver-arm64.h" 8 #include "src/arm64/lithium-gap-resolver-arm64.h"
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/code-factory.h" 10 #include "src/code-factory.h"
(...skipping 3436 matching lines...) Expand 10 before | Expand all | Expand 10 after
3447 scratch = ToRegister(instr->temp()); 3447 scratch = ToRegister(instr->temp());
3448 key = ToRegister(instr->key()); 3448 key = ToRegister(instr->key());
3449 } 3449 }
3450 3450
3451 MemOperand mem_op = 3451 MemOperand mem_op =
3452 PrepareKeyedExternalArrayOperand(key, ext_ptr, scratch, key_is_smi, 3452 PrepareKeyedExternalArrayOperand(key, ext_ptr, scratch, key_is_smi,
3453 key_is_constant, constant_key, 3453 key_is_constant, constant_key,
3454 elements_kind, 3454 elements_kind,
3455 instr->base_offset()); 3455 instr->base_offset());
3456 3456
3457 if ((elements_kind == EXTERNAL_FLOAT32_ELEMENTS) || 3457 if (elements_kind == FLOAT32_ELEMENTS) {
3458 (elements_kind == FLOAT32_ELEMENTS)) {
3459 DoubleRegister result = ToDoubleRegister(instr->result()); 3458 DoubleRegister result = ToDoubleRegister(instr->result());
3460 __ Ldr(result.S(), mem_op); 3459 __ Ldr(result.S(), mem_op);
3461 __ Fcvt(result, result.S()); 3460 __ Fcvt(result, result.S());
3462 } else if ((elements_kind == EXTERNAL_FLOAT64_ELEMENTS) || 3461 } else if (elements_kind == FLOAT64_ELEMENTS) {
3463 (elements_kind == FLOAT64_ELEMENTS)) {
3464 DoubleRegister result = ToDoubleRegister(instr->result()); 3462 DoubleRegister result = ToDoubleRegister(instr->result());
3465 __ Ldr(result, mem_op); 3463 __ Ldr(result, mem_op);
3466 } else { 3464 } else {
3467 Register result = ToRegister(instr->result()); 3465 Register result = ToRegister(instr->result());
3468 3466
3469 switch (elements_kind) { 3467 switch (elements_kind) {
3470 case EXTERNAL_INT8_ELEMENTS:
3471 case INT8_ELEMENTS: 3468 case INT8_ELEMENTS:
3472 __ Ldrsb(result, mem_op); 3469 __ Ldrsb(result, mem_op);
3473 break; 3470 break;
3474 case EXTERNAL_UINT8_CLAMPED_ELEMENTS:
3475 case EXTERNAL_UINT8_ELEMENTS:
3476 case UINT8_ELEMENTS: 3471 case UINT8_ELEMENTS:
3477 case UINT8_CLAMPED_ELEMENTS: 3472 case UINT8_CLAMPED_ELEMENTS:
3478 __ Ldrb(result, mem_op); 3473 __ Ldrb(result, mem_op);
3479 break; 3474 break;
3480 case EXTERNAL_INT16_ELEMENTS:
3481 case INT16_ELEMENTS: 3475 case INT16_ELEMENTS:
3482 __ Ldrsh(result, mem_op); 3476 __ Ldrsh(result, mem_op);
3483 break; 3477 break;
3484 case EXTERNAL_UINT16_ELEMENTS:
3485 case UINT16_ELEMENTS: 3478 case UINT16_ELEMENTS:
3486 __ Ldrh(result, mem_op); 3479 __ Ldrh(result, mem_op);
3487 break; 3480 break;
3488 case EXTERNAL_INT32_ELEMENTS:
3489 case INT32_ELEMENTS: 3481 case INT32_ELEMENTS:
3490 __ Ldrsw(result, mem_op); 3482 __ Ldrsw(result, mem_op);
3491 break; 3483 break;
3492 case EXTERNAL_UINT32_ELEMENTS:
3493 case UINT32_ELEMENTS: 3484 case UINT32_ELEMENTS:
3494 __ Ldr(result.W(), mem_op); 3485 __ Ldr(result.W(), mem_op);
3495 if (!instr->hydrogen()->CheckFlag(HInstruction::kUint32)) { 3486 if (!instr->hydrogen()->CheckFlag(HInstruction::kUint32)) {
3496 // Deopt if value > 0x80000000. 3487 // Deopt if value > 0x80000000.
3497 __ Tst(result, 0xFFFFFFFF80000000); 3488 __ Tst(result, 0xFFFFFFFF80000000);
3498 DeoptimizeIf(ne, instr, Deoptimizer::kNegativeValue); 3489 DeoptimizeIf(ne, instr, Deoptimizer::kNegativeValue);
3499 } 3490 }
3500 break; 3491 break;
3501 case FLOAT32_ELEMENTS: 3492 case FLOAT32_ELEMENTS:
3502 case FLOAT64_ELEMENTS: 3493 case FLOAT64_ELEMENTS:
3503 case EXTERNAL_FLOAT32_ELEMENTS:
3504 case EXTERNAL_FLOAT64_ELEMENTS:
3505 case FAST_HOLEY_DOUBLE_ELEMENTS: 3494 case FAST_HOLEY_DOUBLE_ELEMENTS:
3506 case FAST_HOLEY_ELEMENTS: 3495 case FAST_HOLEY_ELEMENTS:
3507 case FAST_HOLEY_SMI_ELEMENTS: 3496 case FAST_HOLEY_SMI_ELEMENTS:
3508 case FAST_DOUBLE_ELEMENTS: 3497 case FAST_DOUBLE_ELEMENTS:
3509 case FAST_ELEMENTS: 3498 case FAST_ELEMENTS:
3510 case FAST_SMI_ELEMENTS: 3499 case FAST_SMI_ELEMENTS:
3511 case DICTIONARY_ELEMENTS: 3500 case DICTIONARY_ELEMENTS:
3512 case FAST_SLOPPY_ARGUMENTS_ELEMENTS: 3501 case FAST_SLOPPY_ARGUMENTS_ELEMENTS:
3513 case SLOW_SLOPPY_ARGUMENTS_ELEMENTS: 3502 case SLOW_SLOPPY_ARGUMENTS_ELEMENTS:
3514 UNREACHABLE(); 3503 UNREACHABLE();
(...skipping 1654 matching lines...) Expand 10 before | Expand all | Expand 10 after
5169 key = ToRegister(instr->key()); 5158 key = ToRegister(instr->key());
5170 scratch = ToRegister(instr->temp()); 5159 scratch = ToRegister(instr->temp());
5171 } 5160 }
5172 5161
5173 MemOperand dst = 5162 MemOperand dst =
5174 PrepareKeyedExternalArrayOperand(key, ext_ptr, scratch, key_is_smi, 5163 PrepareKeyedExternalArrayOperand(key, ext_ptr, scratch, key_is_smi,
5175 key_is_constant, constant_key, 5164 key_is_constant, constant_key,
5176 elements_kind, 5165 elements_kind,
5177 instr->base_offset()); 5166 instr->base_offset());
5178 5167
5179 if ((elements_kind == EXTERNAL_FLOAT32_ELEMENTS) || 5168 if (elements_kind == FLOAT32_ELEMENTS) {
5180 (elements_kind == FLOAT32_ELEMENTS)) {
5181 DoubleRegister value = ToDoubleRegister(instr->value()); 5169 DoubleRegister value = ToDoubleRegister(instr->value());
5182 DoubleRegister dbl_scratch = double_scratch(); 5170 DoubleRegister dbl_scratch = double_scratch();
5183 __ Fcvt(dbl_scratch.S(), value); 5171 __ Fcvt(dbl_scratch.S(), value);
5184 __ Str(dbl_scratch.S(), dst); 5172 __ Str(dbl_scratch.S(), dst);
5185 } else if ((elements_kind == EXTERNAL_FLOAT64_ELEMENTS) || 5173 } else if (elements_kind == FLOAT64_ELEMENTS) {
5186 (elements_kind == FLOAT64_ELEMENTS)) {
5187 DoubleRegister value = ToDoubleRegister(instr->value()); 5174 DoubleRegister value = ToDoubleRegister(instr->value());
5188 __ Str(value, dst); 5175 __ Str(value, dst);
5189 } else { 5176 } else {
5190 Register value = ToRegister(instr->value()); 5177 Register value = ToRegister(instr->value());
5191 5178
5192 switch (elements_kind) { 5179 switch (elements_kind) {
5193 case EXTERNAL_UINT8_CLAMPED_ELEMENTS:
5194 case EXTERNAL_INT8_ELEMENTS:
5195 case EXTERNAL_UINT8_ELEMENTS:
5196 case UINT8_ELEMENTS: 5180 case UINT8_ELEMENTS:
5197 case UINT8_CLAMPED_ELEMENTS: 5181 case UINT8_CLAMPED_ELEMENTS:
5198 case INT8_ELEMENTS: 5182 case INT8_ELEMENTS:
5199 __ Strb(value, dst); 5183 __ Strb(value, dst);
5200 break; 5184 break;
5201 case EXTERNAL_INT16_ELEMENTS:
5202 case EXTERNAL_UINT16_ELEMENTS:
5203 case INT16_ELEMENTS: 5185 case INT16_ELEMENTS:
5204 case UINT16_ELEMENTS: 5186 case UINT16_ELEMENTS:
5205 __ Strh(value, dst); 5187 __ Strh(value, dst);
5206 break; 5188 break;
5207 case EXTERNAL_INT32_ELEMENTS:
5208 case EXTERNAL_UINT32_ELEMENTS:
5209 case INT32_ELEMENTS: 5189 case INT32_ELEMENTS:
5210 case UINT32_ELEMENTS: 5190 case UINT32_ELEMENTS:
5211 __ Str(value.W(), dst); 5191 __ Str(value.W(), dst);
5212 break; 5192 break;
5213 case FLOAT32_ELEMENTS: 5193 case FLOAT32_ELEMENTS:
5214 case FLOAT64_ELEMENTS: 5194 case FLOAT64_ELEMENTS:
5215 case EXTERNAL_FLOAT32_ELEMENTS:
5216 case EXTERNAL_FLOAT64_ELEMENTS:
5217 case FAST_DOUBLE_ELEMENTS: 5195 case FAST_DOUBLE_ELEMENTS:
5218 case FAST_ELEMENTS: 5196 case FAST_ELEMENTS:
5219 case FAST_SMI_ELEMENTS: 5197 case FAST_SMI_ELEMENTS:
5220 case FAST_HOLEY_DOUBLE_ELEMENTS: 5198 case FAST_HOLEY_DOUBLE_ELEMENTS:
5221 case FAST_HOLEY_ELEMENTS: 5199 case FAST_HOLEY_ELEMENTS:
5222 case FAST_HOLEY_SMI_ELEMENTS: 5200 case FAST_HOLEY_SMI_ELEMENTS:
5223 case DICTIONARY_ELEMENTS: 5201 case DICTIONARY_ELEMENTS:
5224 case FAST_SLOPPY_ARGUMENTS_ELEMENTS: 5202 case FAST_SLOPPY_ARGUMENTS_ELEMENTS:
5225 case SLOW_SLOPPY_ARGUMENTS_ELEMENTS: 5203 case SLOW_SLOPPY_ARGUMENTS_ELEMENTS:
5226 UNREACHABLE(); 5204 UNREACHABLE();
(...skipping 945 matching lines...) Expand 10 before | Expand all | Expand 10 after
6172 Handle<ScopeInfo> scope_info = instr->scope_info(); 6150 Handle<ScopeInfo> scope_info = instr->scope_info();
6173 __ Push(scope_info); 6151 __ Push(scope_info);
6174 __ Push(ToRegister(instr->function())); 6152 __ Push(ToRegister(instr->function()));
6175 CallRuntime(Runtime::kPushBlockContext, 2, instr); 6153 CallRuntime(Runtime::kPushBlockContext, 2, instr);
6176 RecordSafepoint(Safepoint::kNoLazyDeopt); 6154 RecordSafepoint(Safepoint::kNoLazyDeopt);
6177 } 6155 }
6178 6156
6179 6157
6180 } // namespace internal 6158 } // namespace internal
6181 } // namespace v8 6159 } // namespace v8
OLDNEW
« no previous file with comments | « src/arm64/lithium-arm64.cc ('k') | src/bootstrapper.cc » ('j') | src/heap/heap.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698