From: Matthew Poremba Date: Mon, 25 Feb 2019 23:32:03 +0000 (-0800) Subject: arch-gcn3: Add memcpy condition when writing EXEC_LO X-Git-Tag: v20.1.0.0~433 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=39f305b329626f3649474fd42ab1f61c9cacaa8f;p=gem5.git 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 --- 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");