From 36b57f9b4e134e34e66c707e5d1d77d74ff6bde3 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Mon, 8 Feb 2021 00:36:51 -0800 Subject: [PATCH] arch-sparc: Fix an operator precedence bug in the iob device. Like in the nomali library, this bug is in some code making a bitmask where what bits are enabled depends on some conditions. It used ?: to evaluate the conditions and | to aggregate the bits, but didn't use any ()s, so the | happened first, then the ?:s. This would generate an incorrect bitmask. Change-Id: Iabcc8a9fd38cde5de3c0627a3b143407247c0c0e Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/40955 Maintainer: Gabe Black Tested-by: kokoro Reviewed-by: Boris Shingarov --- src/dev/sparc/iob.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dev/sparc/iob.cc b/src/dev/sparc/iob.cc index a0d1982fef..624563e55a 100644 --- a/src/dev/sparc/iob.cc +++ b/src/dev/sparc/iob.cc @@ -101,8 +101,8 @@ Iob::readIob(PacketPtr pkt) if (accessAddr >= IntCtlAddr && accessAddr < IntCtlAddr + IntCtlSize) { int index = (accessAddr - IntCtlAddr) >> 3; - uint64_t data = intCtl[index].mask ? 1 << 2 : 0 | - intCtl[index].pend ? 1 << 0 : 0; + uint64_t data = (intCtl[index].mask ? (1 << 2) : 0) | + (intCtl[index].pend ? (1 << 0) : 0); pkt->setBE(data); return; }