/* * Copyright (C) 2020-2024 Intel Corporation * * SPDX-License-Identifier: MIT * */ #include "shared/source/command_container/command_encoder.h" #include "shared/source/gen8/hw_cmds.h" #include "shared/source/helpers/register_offsets.h" #include "shared/source/indirect_heap/heap_size.h" #include "shared/test/common/cmd_parse/gen_cmd_parse.h" #include "shared/test/common/fixtures/device_fixture.h" #include "shared/test/common/mocks/mock_device.h" #include "shared/test/common/test_macros/header/per_product_test_definitions.h" #include "shared/test/common/test_macros/test.h" using namespace NEO; using CommandEncoderMathTestGen8 = Test; GEN8TEST_F(CommandEncoderMathTestGen8, WhenAppendsAGreaterThanThenPredicateCorrectlySet) { 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, nullptr, HeapSize::defaultHeapSize, true, false); EncodeMathMMIO::encodeGreaterThanPredicate(cmdContainer, 0xDEADBEEFCAF0u, 17u, false); 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(cmdMEM->getRegisterAddress(), RegisterOffsets::csGprR0); EXPECT_EQ(cmdMEM->getMemoryAddress(), 0xDEADBEEFCAF0u); itor = find(itor, commands.end()); ASSERT_NE(itor, commands.end()); auto cmdIMM = genCmdCast(*itor); EXPECT_EQ(cmdIMM->getRegisterOffset(), RegisterOffsets::csGprR1); EXPECT_EQ(cmdIMM->getDataDword(), 17u); 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(), RegisterOffsets::csGprR2); EXPECT_EQ(cmdREG->getDestinationRegisterAddress(), RegisterOffsets::csPredicateResult); auto cmdALU = reinterpret_cast(cmdMATH + 3); EXPECT_EQ(cmdALU->DW0.BitField.ALUOpcode, static_cast(AluRegisters::opcodeSub)); }