diff --git a/level_zero/core/source/cmdlist/cmdlist_hw.h b/level_zero/core/source/cmdlist/cmdlist_hw.h index ed283f88e7..36a02fabf4 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw.h +++ b/level_zero/core/source/cmdlist/cmdlist_hw.h @@ -307,7 +307,7 @@ struct CommandListCoreFamily : public CommandListImp { ze_result_t programSyncBuffer(Kernel &kernel, NEO::Device &device, const ze_group_count_t &threadGroupDimensions, size_t &patchIndex); void programRegionGroupBarrier(Kernel &kernel, const ze_group_count_t &threadGroupDimensions, size_t localRegionSize, size_t &patchIndex); void appendWriteKernelTimestamp(Event *event, CommandToPatchContainer *outTimeStampSyncCmds, bool beforeWalker, bool maskLsb, bool workloadPartition, bool copyOperation); - void adjustWriteKernelTimestamp(uint64_t globalAddress, uint64_t contextAddress, uint64_t baseAddress, CommandToPatchContainer *outTimeStampSyncCmds, bool maskLsb, uint32_t mask, bool workloadPartition, bool copyOperation); + void adjustWriteKernelTimestamp(uint64_t globalAddress, uint64_t contextAddress, uint64_t baseAddress, CommandToPatchContainer *outTimeStampSyncCmds, bool workloadPartition, bool copyOperation); void appendEventForProfiling(Event *event, CommandToPatchContainer *outTimeStampSyncCmds, bool beforeWalker, bool skipBarrierForEndProfiling, bool skipAddingEventToResidency, bool copyOperation); void appendEventForProfilingCopyCommand(Event *event, bool beforeWalker); void appendSignalEventPostWalker(Event *event, void **syncCmdBuffer, CommandToPatchContainer *outTimeStampSyncCmds, bool skipBarrierForEndProfiling, bool skipAddingEventToResidency, bool copyOperation); diff --git a/level_zero/core/source/cmdlist/cmdlist_hw.inl b/level_zero/core/source/cmdlist/cmdlist_hw.inl index e4592085d6..55c441089b 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw.inl +++ b/level_zero/core/source/cmdlist/cmdlist_hw.inl @@ -2932,7 +2932,7 @@ void CommandListCoreFamily::appendWriteKernelTimestamp(Event *eve outTimeStampSyncCmds->push_back(ctxCmd); } - adjustWriteKernelTimestamp(globalAddress, contextAddress, baseAddr, outTimeStampSyncCmds, maskLsb, mask, workloadPartition, copyOperation); + adjustWriteKernelTimestamp(globalAddress, contextAddress, baseAddr, outTimeStampSyncCmds, workloadPartition, copyOperation); } template diff --git a/level_zero/core/source/cmdlist/cmdlist_hw_dg2_and_pvc.inl b/level_zero/core/source/cmdlist/cmdlist_hw_dg2_and_pvc.inl index 68ab110ede..1135c7c157 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw_dg2_and_pvc.inl +++ b/level_zero/core/source/cmdlist/cmdlist_hw_dg2_and_pvc.inl @@ -16,7 +16,7 @@ inline NEO::PreemptionMode CommandListCoreFamily::obtainKernelPre } template -void CommandListCoreFamily::adjustWriteKernelTimestamp(uint64_t globalAddress, uint64_t contextAddress, uint64_t baseAddress, CommandToPatchContainer *outTimeStampSyncCmds, bool maskLsb, - uint32_t mask, bool workloadPartition, bool copyOperation) {} +void CommandListCoreFamily::adjustWriteKernelTimestamp(uint64_t globalAddress, uint64_t contextAddress, uint64_t baseAddress, CommandToPatchContainer *outTimeStampSyncCmds, + bool workloadPartition, bool copyOperation) {} } // namespace L0 diff --git a/level_zero/core/source/cmdlist/cmdlist_hw_skl_to_tgllp.inl b/level_zero/core/source/cmdlist/cmdlist_hw_skl_to_tgllp.inl index 0c47f9ddb1..4a1fe3fc61 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw_skl_to_tgllp.inl +++ b/level_zero/core/source/cmdlist/cmdlist_hw_skl_to_tgllp.inl @@ -38,7 +38,7 @@ size_t CommandListCoreFamily::getReserveSshSize() { } template -void CommandListCoreFamily::adjustWriteKernelTimestamp(uint64_t globalAddress, uint64_t contextAddress, uint64_t baseAddress, CommandToPatchContainer *outTimeStampSyncCmds, bool maskLsb, uint32_t mask, +void CommandListCoreFamily::adjustWriteKernelTimestamp(uint64_t globalAddress, uint64_t contextAddress, uint64_t baseAddress, CommandToPatchContainer *outTimeStampSyncCmds, bool workloadPartition, bool copyOperation) {} template diff --git a/level_zero/core/source/cmdlist/cmdlist_hw_xe2_hpg_and_later.inl b/level_zero/core/source/cmdlist/cmdlist_hw_xe2_hpg_and_later.inl index 7789f38786..049f42bb08 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw_xe2_hpg_and_later.inl +++ b/level_zero/core/source/cmdlist/cmdlist_hw_xe2_hpg_and_later.inl @@ -22,7 +22,7 @@ inline NEO::PreemptionMode CommandListCoreFamily::obtainKernelPre } template -void CommandListCoreFamily::adjustWriteKernelTimestamp(uint64_t globalAddress, uint64_t contextAddress, uint64_t baseAddress, CommandToPatchContainer *outTimeStampSyncCmds, bool maskLsb, uint32_t mask, +void CommandListCoreFamily::adjustWriteKernelTimestamp(uint64_t globalAddress, uint64_t contextAddress, uint64_t baseAddress, CommandToPatchContainer *outTimeStampSyncCmds, bool workloadPartition, bool copyOperation) { uint64_t globalHighAddress = globalAddress + sizeof(uint32_t); uint64_t contextHighAddress = contextAddress + sizeof(uint32_t); @@ -38,13 +38,8 @@ void CommandListCoreFamily::adjustWriteKernelTimestamp(uint64_t g contextPostSyncCmdBuffer = &contextPostSyncCmd; } - if (maskLsb) { - NEO::EncodeMathMMIO::encodeBitwiseAndVal(commandContainer, RegisterOffsets::globalTimestampUn, mask, globalHighAddress, workloadPartition, globalPostSyncCmdBuffer, copyOperation); - NEO::EncodeMathMMIO::encodeBitwiseAndVal(commandContainer, RegisterOffsets::gpThreadTimeRegAddressOffsetHigh, mask, contextHighAddress, workloadPartition, contextPostSyncCmdBuffer, copyOperation); - } else { - NEO::EncodeStoreMMIO::encode(*commandContainer.getCommandStream(), RegisterOffsets::globalTimestampUn, globalHighAddress, workloadPartition, globalPostSyncCmdBuffer, copyOperation); - NEO::EncodeStoreMMIO::encode(*commandContainer.getCommandStream(), RegisterOffsets::gpThreadTimeRegAddressOffsetHigh, contextHighAddress, workloadPartition, contextPostSyncCmdBuffer, copyOperation); - } + NEO::EncodeStoreMMIO::encode(*commandContainer.getCommandStream(), RegisterOffsets::globalTimestampUn, globalHighAddress, workloadPartition, globalPostSyncCmdBuffer, copyOperation); + NEO::EncodeStoreMMIO::encode(*commandContainer.getCommandStream(), RegisterOffsets::gpThreadTimeRegAddressOffsetHigh, contextHighAddress, workloadPartition, contextPostSyncCmdBuffer, copyOperation); if (outTimeStampSyncCmds != nullptr) { CommandToPatch ctxCmd; diff --git a/level_zero/core/test/unit_tests/fixtures/cmdlist_fixture.h b/level_zero/core/test/unit_tests/fixtures/cmdlist_fixture.h index ab03e828e1..95e038ca05 100644 --- a/level_zero/core/test/unit_tests/fixtures/cmdlist_fixture.h +++ b/level_zero/core/test/unit_tests/fixtures/cmdlist_fixture.h @@ -70,7 +70,8 @@ void validateTimestampRegisters(GenCmdList &cmdList, uint64_t firstStoreRegMemAddress, uint32_t secondLoadRegisterRegSrcAddress, uint64_t secondStoreRegMemAddress, - bool workloadPartition); + bool workloadPartition, + bool useMask); struct ModuleMutableCommandListFixture : public ModuleImmutableDataFixture { void setUp() { diff --git a/level_zero/core/test/unit_tests/fixtures/cmdlist_fixture.inl b/level_zero/core/test/unit_tests/fixtures/cmdlist_fixture.inl index d37d55e100..e7904bd789 100644 --- a/level_zero/core/test/unit_tests/fixtures/cmdlist_fixture.inl +++ b/level_zero/core/test/unit_tests/fixtures/cmdlist_fixture.inl @@ -32,7 +32,8 @@ void validateTimestampRegisters(GenCmdList &cmdList, uint64_t firstStoreRegMemAddress, uint32_t secondLoadRegisterRegSrcAddress, uint64_t secondStoreRegMemAddress, - bool workloadPartition) { + bool workloadPartition, + bool useMask) { using MI_LOAD_REGISTER_REG = typename FamilyType::MI_LOAD_REGISTER_REG; using MI_LOAD_REGISTER_IMM = typename FamilyType::MI_LOAD_REGISTER_IMM; using MI_MATH = typename FamilyType::MI_MATH; @@ -40,35 +41,46 @@ void validateTimestampRegisters(GenCmdList &cmdList, constexpr uint32_t mask = 0xfffffffe; - auto itor = find(startIt, cmdList.end()); + auto itor = useMask ? find(startIt, cmdList.end()) : find(startIt, cmdList.end()); + if (useMask) { + { + ASSERT_NE(cmdList.end(), itor); + auto cmdLoadReg = genCmdCast(*itor); + EXPECT_EQ(firstLoadRegisterRegSrcAddress, cmdLoadReg->getSourceRegisterAddress()); + EXPECT_EQ(RegisterOffsets::csGprR13, cmdLoadReg->getDestinationRegisterAddress()); + } - { - ASSERT_NE(cmdList.end(), itor); - auto cmdLoadReg = genCmdCast(*itor); - EXPECT_EQ(firstLoadRegisterRegSrcAddress, cmdLoadReg->getSourceRegisterAddress()); - EXPECT_EQ(RegisterOffsets::csGprR13, cmdLoadReg->getDestinationRegisterAddress()); - } + itor++; + { + ASSERT_NE(cmdList.end(), itor); + auto cmdLoadImm = genCmdCast(*itor); + EXPECT_EQ(RegisterOffsets::csGprR14, cmdLoadImm->getRegisterOffset()); + EXPECT_EQ(mask, cmdLoadImm->getDataDword()); + } - itor++; - { - ASSERT_NE(cmdList.end(), itor); - auto cmdLoadImm = genCmdCast(*itor); - EXPECT_EQ(RegisterOffsets::csGprR14, cmdLoadImm->getRegisterOffset()); - EXPECT_EQ(mask, cmdLoadImm->getDataDword()); - } + itor++; + { + ASSERT_NE(cmdList.end(), itor); + auto cmdMath = genCmdCast(*itor); + EXPECT_EQ(3u, cmdMath->DW0.BitField.DwordLength); + } - itor++; - { - ASSERT_NE(cmdList.end(), itor); - auto cmdMath = genCmdCast(*itor); - EXPECT_EQ(3u, cmdMath->DW0.BitField.DwordLength); - } - - itor++; - { + itor++; + { + ASSERT_NE(cmdList.end(), itor); + auto cmdMem = genCmdCast(*itor); + EXPECT_EQ(RegisterOffsets::csGprR12, cmdMem->getRegisterAddress()); + EXPECT_EQ(firstStoreRegMemAddress, cmdMem->getMemoryAddress()); + if (workloadPartition) { + EXPECT_TRUE(UnitTestHelper::getWorkloadPartitionForStoreRegisterMemCmd(*cmdMem)); + } else { + EXPECT_FALSE(UnitTestHelper::getWorkloadPartitionForStoreRegisterMemCmd(*cmdMem)); + } + } + } else { ASSERT_NE(cmdList.end(), itor); auto cmdMem = genCmdCast(*itor); - EXPECT_EQ(RegisterOffsets::csGprR12, cmdMem->getRegisterAddress()); + EXPECT_EQ(RegisterOffsets::globalTimestampUn, cmdMem->getRegisterAddress()); EXPECT_EQ(firstStoreRegMemAddress, cmdMem->getMemoryAddress()); if (workloadPartition) { EXPECT_TRUE(UnitTestHelper::getWorkloadPartitionForStoreRegisterMemCmd(*cmdMem)); @@ -78,33 +90,45 @@ void validateTimestampRegisters(GenCmdList &cmdList, } itor++; - { - ASSERT_NE(cmdList.end(), itor); - auto cmdLoadReg = genCmdCast(*itor); - EXPECT_EQ(secondLoadRegisterRegSrcAddress, cmdLoadReg->getSourceRegisterAddress()); - EXPECT_EQ(RegisterOffsets::csGprR13, cmdLoadReg->getDestinationRegisterAddress()); - } + if (useMask) { + { + ASSERT_NE(cmdList.end(), itor); + auto cmdLoadReg = genCmdCast(*itor); + EXPECT_EQ(secondLoadRegisterRegSrcAddress, cmdLoadReg->getSourceRegisterAddress()); + EXPECT_EQ(RegisterOffsets::csGprR13, cmdLoadReg->getDestinationRegisterAddress()); + } - itor++; - { - ASSERT_NE(cmdList.end(), itor); - auto cmdLoadImm = genCmdCast(*itor); - EXPECT_EQ(RegisterOffsets::csGprR14, cmdLoadImm->getRegisterOffset()); - EXPECT_EQ(mask, cmdLoadImm->getDataDword()); - } + itor++; + { + ASSERT_NE(cmdList.end(), itor); + auto cmdLoadImm = genCmdCast(*itor); + EXPECT_EQ(RegisterOffsets::csGprR14, cmdLoadImm->getRegisterOffset()); + EXPECT_EQ(mask, cmdLoadImm->getDataDword()); + } - itor++; - { - ASSERT_NE(cmdList.end(), itor); - auto cmdMath = genCmdCast(*itor); - EXPECT_EQ(3u, cmdMath->DW0.BitField.DwordLength); - } + itor++; + { + ASSERT_NE(cmdList.end(), itor); + auto cmdMath = genCmdCast(*itor); + EXPECT_EQ(3u, cmdMath->DW0.BitField.DwordLength); + } - itor++; - { + itor++; + { + ASSERT_NE(cmdList.end(), itor); + auto cmdMem = genCmdCast(*itor); + EXPECT_EQ(RegisterOffsets::csGprR12, cmdMem->getRegisterAddress()); + EXPECT_EQ(secondStoreRegMemAddress, cmdMem->getMemoryAddress()); + if (workloadPartition) { + EXPECT_TRUE(UnitTestHelper::getWorkloadPartitionForStoreRegisterMemCmd(*cmdMem)); + } else { + EXPECT_FALSE(UnitTestHelper::getWorkloadPartitionForStoreRegisterMemCmd(*cmdMem)); + } + } + } else { ASSERT_NE(cmdList.end(), itor); auto cmdMem = genCmdCast(*itor); - EXPECT_EQ(RegisterOffsets::csGprR12, cmdMem->getRegisterAddress()); + EXPECT_EQ(RegisterOffsets::gpThreadTimeRegAddressOffsetHigh, cmdMem->getRegisterAddress()); EXPECT_EQ(secondStoreRegMemAddress, cmdMem->getMemoryAddress()); if (workloadPartition) { EXPECT_TRUE(UnitTestHelper::getWorkloadPartitionForStoreRegisterMemCmd(*cmdMem)); @@ -112,6 +136,7 @@ void validateTimestampRegisters(GenCmdList &cmdList, EXPECT_FALSE(UnitTestHelper::getWorkloadPartitionForStoreRegisterMemCmd(*cmdMem)); } } + itor++; startIt = itor; } diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_barrier.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_barrier.cpp index fd2d43060a..16ef7924ee 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_barrier.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_barrier.cpp @@ -347,7 +347,7 @@ struct MultiTileCommandListAppendBarrierFixture : public MultiTileCommandListFix size_t timestampRegisters = 2 * (sizeof(MI_LOAD_REGISTER_REG) + sizeof(MI_LOAD_REGISTER_IMM) + NEO::EncodeMath::streamCommandSize + sizeof(MI_STORE_REGISTER_MEM)); if (NEO::UnitTestHelper::timestampRegisterHighAddress()) { - timestampRegisters *= 2; + timestampRegisters += 2 * sizeof(MI_STORE_REGISTER_MEM); } size_t postBarrierSynchronization = NEO::MemorySynchronizationCommands::getSizeForSingleBarrier(false) + @@ -385,6 +385,7 @@ struct MultiTileCommandListAppendBarrierFixture : public MultiTileCommandListFix begin, RegisterOffsets::globalTimestampLdw, globalStartAddress, RegisterOffsets::gpThreadTimeRegAddressOffsetLow, contextStartAddress, + true, true); auto barrierOffset = timestampRegisters; @@ -419,6 +420,7 @@ struct MultiTileCommandListAppendBarrierFixture : public MultiTileCommandListFix begin, RegisterOffsets::globalTimestampLdw, globalEndAddress, RegisterOffsets::gpThreadTimeRegAddressOffsetLow, contextEndAddress, + true, true); } }; diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_memory.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_memory.cpp index 03eae17704..375799261e 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_memory.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_memory.cpp @@ -813,13 +813,15 @@ HWTEST2_F(AppendMemoryCopyTests, begin, RegisterOffsets::globalTimestampLdw, globalStartAddress, RegisterOffsets::gpThreadTimeRegAddressOffsetLow, contextStartAddress, - false); + false, + true); validateTimestampRegisters(cmdList, secondWalker, RegisterOffsets::globalTimestampLdw, globalEndAddress, RegisterOffsets::gpThreadTimeRegAddressOffsetLow, contextEndAddress, - false); + false, + true); } HWTEST2_F(AppendMemoryCopyTests, @@ -871,13 +873,15 @@ HWTEST2_F(AppendMemoryCopyTests, begin, RegisterOffsets::globalTimestampLdw, globalStartAddress, RegisterOffsets::gpThreadTimeRegAddressOffsetLow, contextStartAddress, - false); + false, + true); validateTimestampRegisters(cmdList, thirdWalker, RegisterOffsets::globalTimestampLdw, globalEndAddress, RegisterOffsets::gpThreadTimeRegAddressOffsetLow, contextEndAddress, - false); + false, + true); } HWTEST2_F(AppendMemoryCopyTests, givenCopyCommandListImmediateWithDummyBlitWaWhenCopyMemoryRegionThenDummyBlitIsNotProgrammedButIsRequiredForNextFlushProgramming, IsAtLeastXeHpCore) { diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_signal_event.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_signal_event.cpp index 129dc00dad..4509733d12 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_signal_event.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_signal_event.cpp @@ -829,6 +829,7 @@ HWTEST2_F(CommandListAppendUsedPacketSignalEvent, startCmdList, RegisterOffsets::globalTimestampLdw, globalStartAddress, RegisterOffsets::gpThreadTimeRegAddressOffsetLow, contextStartAddress, + true, true); if (UnitTestHelper::timestampRegisterHighAddress()) { @@ -837,14 +838,16 @@ HWTEST2_F(CommandListAppendUsedPacketSignalEvent, validateTimestampRegisters(cmdList, startCmdList, RegisterOffsets::globalTimestampUn, globalStartAddressHigh, - 0x23AC, contextStartAddressHigh, - true); + RegisterOffsets::gpThreadTimeRegAddressOffsetHigh, contextStartAddressHigh, + true, + false); } validateTimestampRegisters(cmdList, startCmdList, RegisterOffsets::globalTimestampLdw, globalEndAddress, RegisterOffsets::gpThreadTimeRegAddressOffsetLow, contextEndAddress, + true, true); if (UnitTestHelper::timestampRegisterHighAddress()) { @@ -853,8 +856,9 @@ HWTEST2_F(CommandListAppendUsedPacketSignalEvent, validateTimestampRegisters(cmdList, startCmdList, RegisterOffsets::globalTimestampUn, globalEndAddressHigh, - 0x23AC, contextEndAddressHigh, - true); + RegisterOffsets::gpThreadTimeRegAddressOffsetHigh, contextEndAddressHigh, + true, + false); } } diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_fill.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_fill.cpp index abf096681d..edcaa59567 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_fill.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_fill.cpp @@ -295,13 +295,15 @@ HWTEST2_F(AppendFillTest, begin, RegisterOffsets::globalTimestampLdw, globalStartAddress, RegisterOffsets::gpThreadTimeRegAddressOffsetLow, contextStartAddress, - false); + false, + true); validateTimestampRegisters(cmdList, secondWalker, RegisterOffsets::globalTimestampLdw, globalEndAddress, RegisterOffsets::gpThreadTimeRegAddressOffsetLow, contextEndAddress, - false); + false, + true); } HWTEST2_F(AppendFillTest, @@ -349,13 +351,15 @@ HWTEST2_F(AppendFillTest, begin, RegisterOffsets::globalTimestampLdw, globalStartAddress, RegisterOffsets::gpThreadTimeRegAddressOffsetLow, contextStartAddress, - false); + false, + true); validateTimestampRegisters(cmdList, secondWalker, RegisterOffsets::globalTimestampLdw, globalEndAddress, RegisterOffsets::gpThreadTimeRegAddressOffsetLow, contextEndAddress, - false); + false, + true); } } // namespace ult diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_xe2_and_later.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_xe2_and_later.cpp index 262b4f340c..af1cd1d185 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_xe2_and_later.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_xe2_and_later.cpp @@ -98,17 +98,15 @@ struct CommandListXe2AndLaterFixture : public DeviceFixture { uint64_t contextAddress = ptrOffset(baseAddr, contextOffset); if (useMask) { - ASSERT_EQ(8u, srmCommands.size()); + ASSERT_EQ(6u, srmCommands.size()); validateSrmCommand(reinterpret_cast(*srmCommands[0]), globalAddress, RegisterOffsets::csGprR12); validateSrmCommand(reinterpret_cast(*srmCommands[1]), contextAddress, RegisterOffsets::csGprR12); - validateSrmCommand(reinterpret_cast(*srmCommands[2]), globalAddress + sizeof(uint32_t), RegisterOffsets::csGprR12); - validateSrmCommand(reinterpret_cast(*srmCommands[3]), contextAddress + sizeof(uint32_t), RegisterOffsets::csGprR12); + validateSrmCommand(reinterpret_cast(*srmCommands[2]), globalAddress + sizeof(uint32_t), RegisterOffsets::globalTimestampUn); + validateSrmCommand(reinterpret_cast(*srmCommands[3]), contextAddress + sizeof(uint32_t), RegisterOffsets::gpThreadTimeRegAddressOffsetHigh); validateLrrCommand(reinterpret_cast(*srmCommands[4]), RegisterOffsets::globalTimestampLdw); validateLrrCommand(reinterpret_cast(*srmCommands[5]), RegisterOffsets::gpThreadTimeRegAddressOffsetLow); - validateLrrCommand(reinterpret_cast(*srmCommands[6]), RegisterOffsets::globalTimestampUn); - validateLrrCommand(reinterpret_cast(*srmCommands[7]), RegisterOffsets::gpThreadTimeRegAddressOffsetHigh); } else { ASSERT_EQ(4u, srmCommands.size());