From 39f305b329626f3649474fd42ab1f61c9cacaa8f Mon Sep 17 00:00:00 2001 From: Matthew Poremba Date: Mon, 25 Feb 2019 15:32:03 -0800 Subject: [PATCH] arch-gcn3: Add memcpy condition when writing EXEC_LO Some compilers emit an error on the operand template class when writing exec mask. Add a condition to explicitly set memcpy size argument to 32b or 64b based on the number of dwords. Change-Id: I49b0e4a1680283e772d0a5a8efd687b31d4f1624 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/29961 Reviewed-by: Anthony Gutierrez Reviewed-by: Matt Sinclair Maintainer: Anthony Gutierrez Tested-by: kokoro --- src/arch/gcn3/operand.hh | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/arch/gcn3/operand.hh b/src/arch/gcn3/operand.hh index 9d28deb30..97c6310d3 100644 --- a/src/arch/gcn3/operand.hh +++ b/src/arch/gcn3/operand.hh @@ -437,8 +437,15 @@ namespace Gcn3ISA if (_opIdx == REG_EXEC_LO) { ScalarRegU64 new_exec_mask_val = wf->execMask().to_ullong(); - std::memcpy((void*)&new_exec_mask_val, - (void*)srfData.data(), sizeof(srfData)); + if (NumDwords == 1) { + std::memcpy((void*)&new_exec_mask_val, + (void*)srfData.data(), sizeof(VecElemU32)); + } else if (NumDwords == 2) { + std::memcpy((void*)&new_exec_mask_val, + (void*)srfData.data(), sizeof(VecElemU64)); + } else { + panic("Trying to write more than 2 DWORDS to EXEC\n"); + } VectorMask new_exec_mask(new_exec_mask_val); wf->execMask() = new_exec_mask; DPRINTF(GPUSRF, "Write EXEC\n"); -- 2.30.2