OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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/base/macros.h" | 5 #include "src/base/macros.h" |
6 #include "src/base/platform/mutex.h" | 6 #include "src/base/platform/mutex.h" |
7 #include "src/base/platform/time.h" | 7 #include "src/base/platform/time.h" |
8 #include "src/builtins/builtins-utils.h" | 8 #include "src/builtins/builtins-utils.h" |
9 #include "src/builtins/builtins.h" | 9 #include "src/builtins/builtins.h" |
10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 STATIC_ASSERT(FIXED_UINT32_ARRAY_TYPE < FIXED_FLOAT32_ARRAY_TYPE); | 78 STATIC_ASSERT(FIXED_UINT32_ARRAY_TYPE < FIXED_FLOAT32_ARRAY_TYPE); |
79 a->Branch(a->Int32LessThan(elements_instance_type, | 79 a->Branch(a->Int32LessThan(elements_instance_type, |
80 a->Int32Constant(FIXED_FLOAT32_ARRAY_TYPE)), | 80 a->Int32Constant(FIXED_FLOAT32_ARRAY_TYPE)), |
81 ¬_float_or_clamped, &is_float_or_clamped); | 81 ¬_float_or_clamped, &is_float_or_clamped); |
82 a->Bind(&is_float_or_clamped); | 82 a->Bind(&is_float_or_clamped); |
83 a->Goto(&invalid); | 83 a->Goto(&invalid); |
84 | 84 |
85 a->Bind(&invalid); | 85 a->Bind(&invalid); |
86 a->CallRuntime(Runtime::kThrowNotIntegerSharedTypedArrayError, context, | 86 a->CallRuntime(Runtime::kThrowNotIntegerSharedTypedArrayError, context, |
87 tagged); | 87 tagged); |
88 a->Return(a->UndefinedConstant()); | 88 a->Unreachable(); |
89 | 89 |
90 a->Bind(¬_float_or_clamped); | 90 a->Bind(¬_float_or_clamped); |
91 *out_instance_type = elements_instance_type; | 91 *out_instance_type = elements_instance_type; |
92 | 92 |
93 Node* backing_store = | 93 Node* backing_store = |
94 a->LoadObjectField(array_buffer, JSArrayBuffer::kBackingStoreOffset); | 94 a->LoadObjectField(array_buffer, JSArrayBuffer::kBackingStoreOffset); |
95 Node* byte_offset = a->ChangeUint32ToWord(a->TruncateTaggedToWord32( | 95 Node* byte_offset = a->ChangeUint32ToWord(a->TruncateTaggedToWord32( |
96 context, | 96 context, |
97 a->LoadObjectField(tagged, JSArrayBufferView::kByteOffsetOffset))); | 97 a->LoadObjectField(tagged, JSArrayBufferView::kByteOffsetOffset))); |
98 *out_backing_store = | 98 *out_backing_store = |
(...skipping 30 matching lines...) Expand all Loading... |
129 a->Branch(a->Float64Equal(number_index_value, test_index), | 129 a->Branch(a->Float64Equal(number_index_value, test_index), |
130 &if_indexesareequal, &if_indexesarenotequal); | 130 &if_indexesareequal, &if_indexesarenotequal); |
131 | 131 |
132 a->Bind(&if_indexesareequal); | 132 a->Bind(&if_indexesareequal); |
133 { | 133 { |
134 var_result.Bind(access_index); | 134 var_result.Bind(access_index); |
135 a->Goto(&done); | 135 a->Goto(&done); |
136 } | 136 } |
137 | 137 |
138 a->Bind(&if_indexesarenotequal); | 138 a->Bind(&if_indexesarenotequal); |
139 a->Return( | 139 a->CallRuntime(Runtime::kThrowInvalidAtomicAccessIndexError, context); |
140 a->CallRuntime(Runtime::kThrowInvalidAtomicAccessIndexError, context)); | 140 a->Unreachable(); |
141 } | 141 } |
142 | 142 |
143 a->Bind(&done); | 143 a->Bind(&done); |
144 return var_result.value(); | 144 return var_result.value(); |
145 } | 145 } |
146 | 146 |
147 void ValidateAtomicIndex(CodeStubAssembler* a, compiler::Node* index_word, | 147 void ValidateAtomicIndex(CodeStubAssembler* a, compiler::Node* index_word, |
148 compiler::Node* array_length_word, | 148 compiler::Node* array_length_word, |
149 compiler::Node* context) { | 149 compiler::Node* context) { |
150 using compiler::Node; | 150 using compiler::Node; |
151 // Check if the index is in bounds. If not, throw RangeError. | 151 // Check if the index is in bounds. If not, throw RangeError. |
152 CodeStubAssembler::Label if_inbounds(a), if_notinbounds(a); | 152 CodeStubAssembler::Label if_inbounds(a), if_notinbounds(a); |
153 // TODO(jkummerow): Use unsigned comparison instead of "i<0 || i>length". | 153 // TODO(jkummerow): Use unsigned comparison instead of "i<0 || i>length". |
154 a->Branch( | 154 a->Branch( |
155 a->Word32Or(a->Int32LessThan(index_word, a->Int32Constant(0)), | 155 a->Word32Or(a->Int32LessThan(index_word, a->Int32Constant(0)), |
156 a->Int32GreaterThanOrEqual(index_word, array_length_word)), | 156 a->Int32GreaterThanOrEqual(index_word, array_length_word)), |
157 &if_notinbounds, &if_inbounds); | 157 &if_notinbounds, &if_inbounds); |
158 a->Bind(&if_notinbounds); | 158 a->Bind(&if_notinbounds); |
159 a->Return( | 159 a->CallRuntime(Runtime::kThrowInvalidAtomicAccessIndexError, context); |
160 a->CallRuntime(Runtime::kThrowInvalidAtomicAccessIndexError, context)); | 160 a->Unreachable(); |
161 a->Bind(&if_inbounds); | 161 a->Bind(&if_inbounds); |
162 } | 162 } |
163 | 163 |
164 } // anonymous namespace | 164 } // anonymous namespace |
165 | 165 |
166 void Builtins::Generate_AtomicsLoad(compiler::CodeAssemblerState* state) { | 166 void Builtins::Generate_AtomicsLoad(compiler::CodeAssemblerState* state) { |
167 using compiler::Node; | 167 using compiler::Node; |
168 CodeStubAssembler a(state); | 168 CodeStubAssembler a(state); |
169 Node* array = a.Parameter(1); | 169 Node* array = a.Parameter(1); |
170 Node* index = a.Parameter(2); | 170 Node* index = a.Parameter(2); |
(...skipping 822 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
993 default: | 993 default: |
994 break; | 994 break; |
995 } | 995 } |
996 | 996 |
997 UNREACHABLE(); | 997 UNREACHABLE(); |
998 return isolate->heap()->undefined_value(); | 998 return isolate->heap()->undefined_value(); |
999 } | 999 } |
1000 | 1000 |
1001 } // namespace internal | 1001 } // namespace internal |
1002 } // namespace v8 | 1002 } // namespace v8 |
OLD | NEW |