OLD | NEW |
---|---|
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
232 } | 232 } |
233 | 233 |
234 | 234 |
235 TEST(SimdObjects) { | 235 TEST(SimdObjects) { |
236 CcTest::InitializeVM(); | 236 CcTest::InitializeVM(); |
237 Isolate* isolate = CcTest::i_isolate(); | 237 Isolate* isolate = CcTest::i_isolate(); |
238 Factory* factory = isolate->factory(); | 238 Factory* factory = isolate->factory(); |
239 | 239 |
240 HandleScope sc(isolate); | 240 HandleScope sc(isolate); |
241 | 241 |
242 Handle<Object> value = factory->NewFloat32x4(1, 2, 3, 4); | 242 Handle<Object> handle = factory->NewFloat32x4(1, 2, 3, 4); |
rossberg
2015/07/02 13:35:43
Type this as Handle<Float32x4> and get rid of the
bbudge
2015/07/06 23:59:05
Done.
| |
243 CHECK(handle->IsFloat32x4()); | |
244 CHECK(handle->BooleanValue()); // SIMD values map to true. | |
245 | |
rossberg
2015/07/02 13:35:43
Also check that the lanes have the values passed t
bbudge
2015/07/06 23:59:05
Done.
| |
246 Float32x4* value = *Handle<Float32x4>::cast(handle); | |
243 CHECK(value->IsFloat32x4()); | 247 CHECK(value->IsFloat32x4()); |
244 CHECK(value->BooleanValue()); // SIMD values map to true. | 248 CheckSimdLanes<Float32x4, float, 4>(value); |
245 | 249 |
246 Float32x4* float32x4 = *Handle<Float32x4>::cast(value); | 250 // Check all lanes, and special lane values. |
247 CheckSimdLanes<Float32x4, float, 4>(float32x4); | 251 value->set_lane(0, 0); |
248 | 252 CHECK_EQ(0, value->get_lane(0)); |
249 // Check ToString for SIMD values. | 253 value->set_lane(1, -0.0); |
250 // TODO(bbudge): Switch to Check* style function to test ToString(). | 254 CHECK_EQ(-0.0, value->get_lane(1)); |
rossberg
2015/07/02 13:35:43
Does CHECK_EQ actually distinguish -0.0 from +0.0?
bbudge
2015/07/06 23:59:05
Good point - probably not. I added a test for the
| |
251 value = factory->NewFloat32x4(1, 2, 3, 4); | |
252 float32x4 = *Handle<Float32x4>::cast(value); | |
253 std::ostringstream os; | |
254 float32x4->Float32x4Print(os); | |
255 CHECK_EQ("1, 2, 3, 4", os.str()); | |
256 | |
257 // Check unusual lane values. | |
258 float32x4->set_lane(0, 0); | |
259 CHECK_EQ(0, float32x4->get_lane(0)); | |
260 float32x4->set_lane(1, -0.0); | |
261 CHECK_EQ(-0.0, float32x4->get_lane(1)); | |
262 float quiet_NaN = std::numeric_limits<float>::quiet_NaN(); | 255 float quiet_NaN = std::numeric_limits<float>::quiet_NaN(); |
263 float signaling_NaN = std::numeric_limits<float>::signaling_NaN(); | 256 float signaling_NaN = std::numeric_limits<float>::signaling_NaN(); |
264 float32x4->set_lane(2, quiet_NaN); | 257 value->set_lane(2, quiet_NaN); |
265 CHECK(std::isnan(float32x4->get_lane(2))); | 258 CHECK(std::isnan(value->get_lane(2))); |
266 float32x4->set_lane(3, signaling_NaN); | 259 value->set_lane(3, signaling_NaN); |
267 CHECK(std::isnan(float32x4->get_lane(3))); | 260 CHECK(std::isnan(value->get_lane(3))); |
261 | |
262 // Check SIMD value to string conversions. | |
263 { | |
264 handle = factory->NewFloat32x4(1, 2, 3, 4); | |
265 value = *Handle<Float32x4>::cast(handle); | |
266 std::ostringstream os; | |
267 value->Float32x4Print(os); | |
268 CHECK_EQ("1, 2, 3, 4", os.str()); | |
269 } | |
270 { | |
271 handle = factory->NewFloat32x4(0, -0.0, quiet_NaN, signaling_NaN); | |
272 value = *Handle<Float32x4>::cast(handle); | |
273 std::ostringstream os; | |
274 value->Float32x4Print(os); | |
275 CHECK_EQ("0, -0, nan, nan", os.str()); | |
276 } | |
268 } | 277 } |
269 | 278 |
270 | 279 |
271 TEST(Tagging) { | 280 TEST(Tagging) { |
272 CcTest::InitializeVM(); | 281 CcTest::InitializeVM(); |
273 int request = 24; | 282 int request = 24; |
274 CHECK_EQ(request, static_cast<int>(OBJECT_POINTER_ALIGN(request))); | 283 CHECK_EQ(request, static_cast<int>(OBJECT_POINTER_ALIGN(request))); |
275 CHECK(Smi::FromInt(42)->IsSmi()); | 284 CHECK(Smi::FromInt(42)->IsSmi()); |
276 CHECK(Smi::FromInt(Smi::kMinValue)->IsSmi()); | 285 CHECK(Smi::FromInt(Smi::kMinValue)->IsSmi()); |
277 CHECK(Smi::FromInt(Smi::kMaxValue)->IsSmi()); | 286 CHECK(Smi::FromInt(Smi::kMaxValue)->IsSmi()); |
(...skipping 5772 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6050 HeapObject::RawField(*array, FixedArray::kHeaderSize)); | 6059 HeapObject::RawField(*array, FixedArray::kHeaderSize)); |
6051 SlotsBuffer::RemoveObjectSlots(CcTest::i_isolate()->heap(), buffer, *array); | 6060 SlotsBuffer::RemoveObjectSlots(CcTest::i_isolate()->heap(), buffer, *array); |
6052 DCHECK(reinterpret_cast<void*>(buffer->Get(1)) == | 6061 DCHECK(reinterpret_cast<void*>(buffer->Get(1)) == |
6053 HeapObject::RawField(heap->empty_fixed_array(), | 6062 HeapObject::RawField(heap->empty_fixed_array(), |
6054 FixedArrayBase::kLengthOffset)); | 6063 FixedArrayBase::kLengthOffset)); |
6055 DCHECK(reinterpret_cast<void*>(buffer->Get(2)) == | 6064 DCHECK(reinterpret_cast<void*>(buffer->Get(2)) == |
6056 HeapObject::RawField(heap->empty_fixed_array(), | 6065 HeapObject::RawField(heap->empty_fixed_array(), |
6057 FixedArrayBase::kLengthOffset)); | 6066 FixedArrayBase::kLengthOffset)); |
6058 delete buffer; | 6067 delete buffer; |
6059 } | 6068 } |
OLD | NEW |