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

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

Issue 1250733005: SIMD.js Add the other SIMD Phase 1 types. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Don't run downloaded SIMD value type tests. Created 5 years, 4 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/arm64/code-stubs-arm64.cc ('k') | src/bootstrapper.cc » ('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 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 1915 matching lines...) Expand 10 before | Expand all | Expand 10 after
1926 } 1926 }
1927 1927
1928 if (expected.Contains(ToBooleanStub::SYMBOL)) { 1928 if (expected.Contains(ToBooleanStub::SYMBOL)) {
1929 // Symbol value -> true. 1929 // Symbol value -> true.
1930 __ CompareInstanceType(map, scratch, SYMBOL_TYPE); 1930 __ CompareInstanceType(map, scratch, SYMBOL_TYPE);
1931 __ B(eq, true_label); 1931 __ B(eq, true_label);
1932 } 1932 }
1933 1933
1934 if (expected.Contains(ToBooleanStub::SIMD_VALUE)) { 1934 if (expected.Contains(ToBooleanStub::SIMD_VALUE)) {
1935 // SIMD value -> true. 1935 // SIMD value -> true.
1936 __ CompareInstanceType(map, scratch, FLOAT32X4_TYPE); 1936 Label not_simd;
1937 __ B(eq, true_label); 1937 __ CompareInstanceType(map, scratch, FIRST_SIMD_VALUE_TYPE);
1938 __ B(lt, &not_simd);
1939 __ CompareInstanceType(map, scratch, LAST_SIMD_VALUE_TYPE);
1940 __ B(le, true_label);
1941 __ Bind(&not_simd);
1938 } 1942 }
1939 1943
1940 if (expected.Contains(ToBooleanStub::HEAP_NUMBER)) { 1944 if (expected.Contains(ToBooleanStub::HEAP_NUMBER)) {
1941 Label not_heap_number; 1945 Label not_heap_number;
1942 __ JumpIfNotRoot(map, Heap::kHeapNumberMapRootIndex, &not_heap_number); 1946 __ JumpIfNotRoot(map, Heap::kHeapNumberMapRootIndex, &not_heap_number);
1943 1947
1944 __ Ldr(double_scratch(), 1948 __ Ldr(double_scratch(),
1945 FieldMemOperand(value, HeapNumber::kValueOffset)); 1949 FieldMemOperand(value, HeapNumber::kValueOffset));
1946 __ Fcmp(double_scratch(), 0.0); 1950 __ Fcmp(double_scratch(), 0.0);
1947 // If we got a NaN (overflow bit is set), jump to the false branch. 1951 // If we got a NaN (overflow bit is set), jump to the false branch.
(...skipping 4047 matching lines...) Expand 10 before | Expand all | Expand 10 after
5995 5999
5996 } else if (String::Equals(type_name, factory->float32x4_string())) { 6000 } else if (String::Equals(type_name, factory->float32x4_string())) {
5997 DCHECK((instr->temp1() != NULL) && (instr->temp2() != NULL)); 6001 DCHECK((instr->temp1() != NULL) && (instr->temp2() != NULL));
5998 Register map = ToRegister(instr->temp1()); 6002 Register map = ToRegister(instr->temp1());
5999 Register scratch = ToRegister(instr->temp2()); 6003 Register scratch = ToRegister(instr->temp2());
6000 6004
6001 __ JumpIfSmi(value, false_label); 6005 __ JumpIfSmi(value, false_label);
6002 __ CompareObjectType(value, map, scratch, FLOAT32X4_TYPE); 6006 __ CompareObjectType(value, map, scratch, FLOAT32X4_TYPE);
6003 EmitBranch(instr, eq); 6007 EmitBranch(instr, eq);
6004 6008
6009 } else if (String::Equals(type_name, factory->int32x4_string())) {
6010 DCHECK((instr->temp1() != NULL) && (instr->temp2() != NULL));
6011 Register map = ToRegister(instr->temp1());
6012 Register scratch = ToRegister(instr->temp2());
6013
6014 __ JumpIfSmi(value, false_label);
6015 __ CompareObjectType(value, map, scratch, INT32X4_TYPE);
6016 EmitBranch(instr, eq);
6017
6018 } else if (String::Equals(type_name, factory->bool32x4_string())) {
6019 DCHECK((instr->temp1() != NULL) && (instr->temp2() != NULL));
6020 Register map = ToRegister(instr->temp1());
6021 Register scratch = ToRegister(instr->temp2());
6022
6023 __ JumpIfSmi(value, false_label);
6024 __ CompareObjectType(value, map, scratch, BOOL32X4_TYPE);
6025 EmitBranch(instr, eq);
6026
6027 } else if (String::Equals(type_name, factory->int16x8_string())) {
6028 DCHECK((instr->temp1() != NULL) && (instr->temp2() != NULL));
6029 Register map = ToRegister(instr->temp1());
6030 Register scratch = ToRegister(instr->temp2());
6031
6032 __ JumpIfSmi(value, false_label);
6033 __ CompareObjectType(value, map, scratch, INT16X8_TYPE);
6034 EmitBranch(instr, eq);
6035
6036 } else if (String::Equals(type_name, factory->bool16x8_string())) {
6037 DCHECK((instr->temp1() != NULL) && (instr->temp2() != NULL));
6038 Register map = ToRegister(instr->temp1());
6039 Register scratch = ToRegister(instr->temp2());
6040
6041 __ JumpIfSmi(value, false_label);
6042 __ CompareObjectType(value, map, scratch, BOOL16X8_TYPE);
6043 EmitBranch(instr, eq);
6044
6045 } else if (String::Equals(type_name, factory->int8x16_string())) {
6046 DCHECK((instr->temp1() != NULL) && (instr->temp2() != NULL));
6047 Register map = ToRegister(instr->temp1());
6048 Register scratch = ToRegister(instr->temp2());
6049
6050 __ JumpIfSmi(value, false_label);
6051 __ CompareObjectType(value, map, scratch, INT8X16_TYPE);
6052 EmitBranch(instr, eq);
6053
6054 } else if (String::Equals(type_name, factory->bool8x16_string())) {
6055 DCHECK((instr->temp1() != NULL) && (instr->temp2() != NULL));
6056 Register map = ToRegister(instr->temp1());
6057 Register scratch = ToRegister(instr->temp2());
6058
6059 __ JumpIfSmi(value, false_label);
6060 __ CompareObjectType(value, map, scratch, BOOL8X16_TYPE);
6061 EmitBranch(instr, eq);
6062
6005 } else { 6063 } else {
6006 __ B(false_label); 6064 __ B(false_label);
6007 } 6065 }
6008 } 6066 }
6009 6067
6010 6068
6011 void LCodeGen::DoUint32ToDouble(LUint32ToDouble* instr) { 6069 void LCodeGen::DoUint32ToDouble(LUint32ToDouble* instr) {
6012 __ Ucvtf(ToDoubleRegister(instr->result()), ToRegister32(instr->value())); 6070 __ Ucvtf(ToDoubleRegister(instr->result()), ToRegister32(instr->value()));
6013 } 6071 }
6014 6072
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
6156 Handle<ScopeInfo> scope_info = instr->scope_info(); 6214 Handle<ScopeInfo> scope_info = instr->scope_info();
6157 __ Push(scope_info); 6215 __ Push(scope_info);
6158 __ Push(ToRegister(instr->function())); 6216 __ Push(ToRegister(instr->function()));
6159 CallRuntime(Runtime::kPushBlockContext, 2, instr); 6217 CallRuntime(Runtime::kPushBlockContext, 2, instr);
6160 RecordSafepoint(Safepoint::kNoLazyDeopt); 6218 RecordSafepoint(Safepoint::kNoLazyDeopt);
6161 } 6219 }
6162 6220
6163 6221
6164 } // namespace internal 6222 } // namespace internal
6165 } // namespace v8 6223 } // namespace v8
OLDNEW
« no previous file with comments | « src/arm64/code-stubs-arm64.cc ('k') | src/bootstrapper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698