15e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 25e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 35e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org// found in the LICENSE file. 45e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 5ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org#include "src/compiler/instruction-selector-unittest.h" 65e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 75e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgnamespace v8 { 85e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgnamespace internal { 95e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgnamespace compiler { 105e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 115e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgnamespace { 125e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 135e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org// Immediates (random subset). 145e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgstatic const int32_t kImmediates[] = { 155e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org kMinInt, -42, -1, 0, 1, 2, 3, 4, 5, 165e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 6, 7, 8, 16, 42, 0xff, 0xffff, 0x0f0f0f0f, kMaxInt}; 175e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 185e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org} // namespace 195e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 205e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 215e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgTEST_F(InstructionSelectorTest, Int32AddWithParameter) { 225e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org StreamBuilder m(this, kMachInt32, kMachInt32, kMachInt32); 235e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org m.Return(m.Int32Add(m.Parameter(0), m.Parameter(1))); 245e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org Stream s = m.Build(); 255e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org ASSERT_EQ(1U, s.size()); 265e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org EXPECT_EQ(kIA32Add, s[0]->arch_opcode()); 275e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org} 285e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 295e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 305e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgTEST_F(InstructionSelectorTest, Int32AddWithImmediate) { 315e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org TRACED_FOREACH(int32_t, imm, kImmediates) { 325e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org { 335e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org StreamBuilder m(this, kMachInt32, kMachInt32); 345e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org m.Return(m.Int32Add(m.Parameter(0), m.Int32Constant(imm))); 355e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org Stream s = m.Build(); 365e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org ASSERT_EQ(1U, s.size()); 375e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org EXPECT_EQ(kIA32Add, s[0]->arch_opcode()); 385e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org ASSERT_EQ(2U, s[0]->InputCount()); 395e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org EXPECT_EQ(imm, s.ToInt32(s[0]->InputAt(1))); 405e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org } 415e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org { 425e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org StreamBuilder m(this, kMachInt32, kMachInt32); 435e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org m.Return(m.Int32Add(m.Int32Constant(imm), m.Parameter(0))); 445e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org Stream s = m.Build(); 455e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org ASSERT_EQ(1U, s.size()); 465e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org EXPECT_EQ(kIA32Add, s[0]->arch_opcode()); 475e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org ASSERT_EQ(2U, s[0]->InputCount()); 485e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org EXPECT_EQ(imm, s.ToInt32(s[0]->InputAt(1))); 495e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org } 505e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org } 515e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org} 525e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 535e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 545e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgTEST_F(InstructionSelectorTest, Int32SubWithParameter) { 555e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org StreamBuilder m(this, kMachInt32, kMachInt32, kMachInt32); 565e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org m.Return(m.Int32Sub(m.Parameter(0), m.Parameter(1))); 575e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org Stream s = m.Build(); 585e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org ASSERT_EQ(1U, s.size()); 595e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org EXPECT_EQ(kIA32Sub, s[0]->arch_opcode()); 605e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org EXPECT_EQ(1U, s[0]->OutputCount()); 615e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org} 625e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 635e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 645e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgTEST_F(InstructionSelectorTest, Int32SubWithImmediate) { 655e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org TRACED_FOREACH(int32_t, imm, kImmediates) { 665e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org StreamBuilder m(this, kMachInt32, kMachInt32); 675e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org m.Return(m.Int32Sub(m.Parameter(0), m.Int32Constant(imm))); 685e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org Stream s = m.Build(); 695e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org ASSERT_EQ(1U, s.size()); 705e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org EXPECT_EQ(kIA32Sub, s[0]->arch_opcode()); 715e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org ASSERT_EQ(2U, s[0]->InputCount()); 725e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org EXPECT_EQ(imm, s.ToInt32(s[0]->InputAt(1))); 735e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org } 745e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org} 755e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 766474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 776474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org// ----------------------------------------------------------------------------- 786474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org// Loads and stores 796474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 806474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.orgnamespace { 816474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 826474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.orgstruct MemoryAccess { 836474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org MachineType type; 846474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org ArchOpcode load_opcode; 856474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org ArchOpcode store_opcode; 866474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org}; 876474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 886474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 896474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.orgstd::ostream& operator<<(std::ostream& os, const MemoryAccess& memacc) { 906474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org OStringStream ost; 916474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org ost << memacc.type; 926474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org return os << ost.c_str(); 936474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org} 946474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 956474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 966474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.orgstatic const MemoryAccess kMemoryAccesses[] = { 976474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org {kMachInt8, kIA32Movsxbl, kIA32Movb}, 986474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org {kMachUint8, kIA32Movzxbl, kIA32Movb}, 996474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org {kMachInt16, kIA32Movsxwl, kIA32Movw}, 1006474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org {kMachUint16, kIA32Movzxwl, kIA32Movw}, 1016474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org {kMachInt32, kIA32Movl, kIA32Movl}, 1026474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org {kMachUint32, kIA32Movl, kIA32Movl}, 103fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org {kMachFloat32, kIA32Movss, kIA32Movss}, 1046474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org {kMachFloat64, kIA32Movsd, kIA32Movsd}}; 1056474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 1066474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org} // namespace 1076474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 1086474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 1096474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.orgtypedef InstructionSelectorTestWithParam<MemoryAccess> 1106474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org InstructionSelectorMemoryAccessTest; 1116474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 1126474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 1136474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.orgTEST_P(InstructionSelectorMemoryAccessTest, LoadWithParameters) { 1146474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org const MemoryAccess memacc = GetParam(); 1156474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org StreamBuilder m(this, memacc.type, kMachPtr, kMachInt32); 1166474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org m.Return(m.Load(memacc.type, m.Parameter(0), m.Parameter(1))); 1176474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org Stream s = m.Build(); 1186474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org ASSERT_EQ(1U, s.size()); 1196474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org EXPECT_EQ(memacc.load_opcode, s[0]->arch_opcode()); 1206474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org EXPECT_EQ(2U, s[0]->InputCount()); 1216474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org EXPECT_EQ(1U, s[0]->OutputCount()); 1226474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org} 1236474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 1246474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 1256474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.orgTEST_P(InstructionSelectorMemoryAccessTest, LoadWithImmediateBase) { 1266474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org const MemoryAccess memacc = GetParam(); 1276474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org TRACED_FOREACH(int32_t, base, kImmediates) { 1286474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org StreamBuilder m(this, memacc.type, kMachPtr); 1296474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org m.Return(m.Load(memacc.type, m.Int32Constant(base), m.Parameter(0))); 1306474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org Stream s = m.Build(); 1316474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org ASSERT_EQ(1U, s.size()); 1326474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org EXPECT_EQ(memacc.load_opcode, s[0]->arch_opcode()); 1336474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org ASSERT_EQ(2U, s[0]->InputCount()); 1346474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org ASSERT_EQ(InstructionOperand::IMMEDIATE, s[0]->InputAt(1)->kind()); 1356474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org EXPECT_EQ(base, s.ToInt32(s[0]->InputAt(1))); 1366474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org EXPECT_EQ(1U, s[0]->OutputCount()); 1376474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org } 1386474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org} 1396474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 1406474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 1416474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.orgTEST_P(InstructionSelectorMemoryAccessTest, LoadWithImmediateIndex) { 1426474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org const MemoryAccess memacc = GetParam(); 1436474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org TRACED_FOREACH(int32_t, index, kImmediates) { 1446474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org StreamBuilder m(this, memacc.type, kMachPtr); 1456474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org m.Return(m.Load(memacc.type, m.Parameter(0), m.Int32Constant(index))); 1466474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org Stream s = m.Build(); 1476474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org ASSERT_EQ(1U, s.size()); 1486474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org EXPECT_EQ(memacc.load_opcode, s[0]->arch_opcode()); 1496474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org ASSERT_EQ(2U, s[0]->InputCount()); 1506474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org ASSERT_EQ(InstructionOperand::IMMEDIATE, s[0]->InputAt(1)->kind()); 1516474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org EXPECT_EQ(index, s.ToInt32(s[0]->InputAt(1))); 1526474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org EXPECT_EQ(1U, s[0]->OutputCount()); 1536474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org } 1546474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org} 1556474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 1566474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 1576474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.orgTEST_P(InstructionSelectorMemoryAccessTest, StoreWithParameters) { 1586474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org const MemoryAccess memacc = GetParam(); 1596474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org StreamBuilder m(this, kMachInt32, kMachPtr, kMachInt32, memacc.type); 1606474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org m.Store(memacc.type, m.Parameter(0), m.Parameter(1), m.Parameter(2)); 1616474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org m.Return(m.Int32Constant(0)); 1626474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org Stream s = m.Build(); 1636474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org ASSERT_EQ(1U, s.size()); 1646474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org EXPECT_EQ(memacc.store_opcode, s[0]->arch_opcode()); 1656474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org EXPECT_EQ(3U, s[0]->InputCount()); 1666474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org EXPECT_EQ(0U, s[0]->OutputCount()); 1676474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org} 1686474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 1696474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 1706474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.orgTEST_P(InstructionSelectorMemoryAccessTest, StoreWithImmediateBase) { 1716474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org const MemoryAccess memacc = GetParam(); 1726474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org TRACED_FOREACH(int32_t, base, kImmediates) { 1736474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org StreamBuilder m(this, kMachInt32, kMachInt32, memacc.type); 1746474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org m.Store(memacc.type, m.Int32Constant(base), m.Parameter(0), m.Parameter(1)); 1756474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org m.Return(m.Int32Constant(0)); 1766474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org Stream s = m.Build(); 1776474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org ASSERT_EQ(1U, s.size()); 1786474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org EXPECT_EQ(memacc.store_opcode, s[0]->arch_opcode()); 1796474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org ASSERT_EQ(3U, s[0]->InputCount()); 1806474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org ASSERT_EQ(InstructionOperand::IMMEDIATE, s[0]->InputAt(1)->kind()); 1816474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org EXPECT_EQ(base, s.ToInt32(s[0]->InputAt(1))); 1826474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org EXPECT_EQ(0U, s[0]->OutputCount()); 1836474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org } 1846474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org} 1856474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 1866474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 1876474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.orgTEST_P(InstructionSelectorMemoryAccessTest, StoreWithImmediateIndex) { 1886474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org const MemoryAccess memacc = GetParam(); 1896474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org TRACED_FOREACH(int32_t, index, kImmediates) { 1906474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org StreamBuilder m(this, kMachInt32, kMachPtr, memacc.type); 1916474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org m.Store(memacc.type, m.Parameter(0), m.Int32Constant(index), 1926474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org m.Parameter(1)); 1936474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org m.Return(m.Int32Constant(0)); 1946474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org Stream s = m.Build(); 1956474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org ASSERT_EQ(1U, s.size()); 1966474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org EXPECT_EQ(memacc.store_opcode, s[0]->arch_opcode()); 1976474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org ASSERT_EQ(3U, s[0]->InputCount()); 1986474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org ASSERT_EQ(InstructionOperand::IMMEDIATE, s[0]->InputAt(1)->kind()); 1996474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org EXPECT_EQ(index, s.ToInt32(s[0]->InputAt(1))); 2006474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org EXPECT_EQ(0U, s[0]->OutputCount()); 2016474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org } 2026474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org} 2036474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 2046474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 2056474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.orgINSTANTIATE_TEST_CASE_P(InstructionSelectorTest, 2066474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org InstructionSelectorMemoryAccessTest, 2076474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org ::testing::ValuesIn(kMemoryAccesses)); 2086474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 2095e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org} // namespace compiler 2105e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org} // namespace internal 2115e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org} // namespace v8 212