// Copyright 2017 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "test/unittests/code-stub-assembler-unittest.h" #include "src/code-factory.h" #include "src/compiler/node.h" #include "src/interface-descriptors.h" #include "src/isolate.h" #include "src/objects-inl.h" #include "test/unittests/compiler/compiler-test-utils.h" #include "test/unittests/compiler/node-test-utils.h" using ::testing::_; using v8::internal::compiler::Node; namespace c = v8::internal::compiler; namespace v8 { namespace internal { CodeStubAssemblerTestState::CodeStubAssemblerTestState( CodeStubAssemblerTest* test) : compiler::CodeAssemblerState( test->isolate(), test->zone(), VoidDescriptor{}, Code::STUB, "test", PoisoningMitigationLevel::kPoisonCriticalOnly) {} TARGET_TEST_F(CodeStubAssemblerTest, SmiTag) { CodeStubAssemblerTestState state(this); CodeStubAssemblerForTest m(&state); Node* value = m.Int32Constant(44); EXPECT_THAT(m.SmiTag(value), IsBitcastWordToTaggedSigned(c::IsIntPtrConstant( static_cast(44) << (kSmiShiftSize + kSmiTagSize)))); EXPECT_THAT(m.SmiUntag(value), c::IsIntPtrConstant(static_cast(44) >> (kSmiShiftSize + kSmiTagSize))); } TARGET_TEST_F(CodeStubAssemblerTest, IntPtrMax) { CodeStubAssemblerTestState state(this); CodeStubAssemblerForTest m(&state); { Node* a = m.IntPtrConstant(100); Node* b = m.IntPtrConstant(1); Node* z = m.IntPtrMax(a, b); EXPECT_THAT(z, c::IsIntPtrConstant(100)); } } TARGET_TEST_F(CodeStubAssemblerTest, IntPtrMin) { CodeStubAssemblerTestState state(this); CodeStubAssemblerForTest m(&state); { Node* a = m.IntPtrConstant(100); Node* b = m.IntPtrConstant(1); Node* z = m.IntPtrMin(a, b); EXPECT_THAT(z, c::IsIntPtrConstant(1)); } } } // namespace internal } // namespace v8