/* * Copyright (C) 2020 Intel Corporation * * SPDX-License-Identifier: MIT * */ #include "shared/source/command_container/command_encoder.h" #include "shared/source/helpers/register_offsets.h" #include "shared/test/unit_test/cmd_parse/gen_cmd_parse.h" #include "shared/test/unit_test/fixtures/device_fixture.h" #include "test.h" using namespace NEO; using CommandEncoderMathTestGen12Lp = Test; GEN12LPTEST_F(CommandEncoderMathTestGen12Lp, WhenAppendsAGreaterThanThenPredicateCorrectlySetAndRemapEnabled) { using MI_LOAD_REGISTER_MEM = typename FamilyType::MI_LOAD_REGISTER_MEM; using MI_LOAD_REGISTER_IMM = typename FamilyType::MI_LOAD_REGISTER_IMM; using MI_LOAD_REGISTER_REG = typename FamilyType::MI_LOAD_REGISTER_REG; using MI_MATH = typename FamilyType::MI_MATH; using MI_MATH_ALU_INST_INLINE = typename FamilyType::MI_MATH_ALU_INST_INLINE; CommandContainer cmdContainer; cmdContainer.initialize(pDevice); EncodeMathMMIO::encodeGreaterThanPredicate(cmdContainer, 0xDEADBEEFCAF0u, 17u); GenCmdList commands; CmdParse::parseCommandBuffer(commands, ptrOffset(cmdContainer.getCommandStream()->getCpuBase(), 0), cmdContainer.getCommandStream()->getUsed()); auto itor = commands.begin(); itor = find(itor, commands.end()); ASSERT_NE(itor, commands.end()); auto cmdMEM = genCmdCast(*itor); EXPECT_EQ(CS_GPR_R0, cmdMEM->getRegisterAddress()); EXPECT_EQ(0xDEADBEEFCAF0u, cmdMEM->getMemoryAddress()); itor = find(itor, commands.end()); ASSERT_NE(itor, commands.end()); auto cmdIMM = genCmdCast(*itor); EXPECT_EQ(CS_GPR_R1, cmdIMM->getRegisterOffset()); EXPECT_EQ(17u, cmdIMM->getDataDword()); EXPECT_TRUE(cmdIMM->getMmioRemapEnable()); itor = find(itor, commands.end()); ASSERT_NE(itor, commands.end()); auto cmdMATH = genCmdCast(*itor); EXPECT_EQ(cmdMATH->DW0.BitField.DwordLength, 3u); itor = find(itor, commands.end()); ASSERT_NE(itor, commands.end()); auto cmdREG = genCmdCast(*itor); EXPECT_EQ(cmdREG->getSourceRegisterAddress(), CS_GPR_R2); EXPECT_EQ(cmdREG->getDestinationRegisterAddress(), CS_PREDICATE_RESULT); auto cmdALU = reinterpret_cast(cmdMATH + 3); EXPECT_EQ(cmdALU->DW0.BitField.ALUOpcode, static_cast(AluRegisters::OPCODE_SUB)); }