Someday I'll type "sourceware.org" correctly on a consistent basis. -------- Forwarded Message -------- Subject: Yet another fix for mcore-sim Date: Sat, 16 Dec 2023 21:52:12 -0700 From: Jeff Law To: gdb-patches@sourcware.org This came up testing the CRC optimization work from Mariam@RAU. Basically to optimize some CRC loops into table lookups or carryless multiplies, we may need to do a bit reflection, which on the mcore processor is done using a rotate instruction. Unfortunately the simulator implementation of rotates has the exact same problem as we saw with right shifts. The input value may have been sign extended from 32 to 64 bits. When we rotate the extended value, we get those sign extension bits and thus the wrong result. The fix is the same. Rather than using a "long", use a uint32_t for the type of the temporary. This fixes a handful of tests in the GCC testsuite: > mcore-sim: gcc.c-torture/execute/20100805-1.c -O0 execution test > mcore-sim: gcc.c-torture/execute/20100805-1.c -O1 execution test > mcore-sim: gcc.c-torture/execute/20100805-1.c -O2 execution test > mcore-sim: gcc.c-torture/execute/20100805-1.c -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test > mcore-sim: gcc.c-torture/execute/20100805-1.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects execution test > mcore-sim: gcc.c-torture/execute/20100805-1.c -O3 -g execution test > mcore-sim: gcc.c-torture/execute/20100805-1.c -Os execution test > mcore-sim: gcc.c-torture/execute/20180112-1.c -O0 execution test > mcore-sim: gcc.c-torture/execute/20180112-1.c -O1 execution test > mcore-sim: gcc.c-torture/execute/20180112-1.c -O2 execution test > mcore-sim: gcc.c-torture/execute/20180112-1.c -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test > mcore-sim: gcc.c-torture/execute/20180112-1.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects execution test > mcore-sim: gcc.c-torture/execute/20180112-1.c -O3 -g execution test > mcore-sim: gcc.c-torture/execute/20180112-1.c -Os execution test > mcore-sim: gcc.dg/20050922-1.c execution test > mcore-sim: gcc.dg/crc-25.c execution test > mcore-sim: gcc.dg/crc-26.c execution test > mcore-sim: gcc.dg/crc-8.c execution test > mcore-sim: gcc.dg/pr57233.c execution test The crc-* tests are Mariam's CRC optimizer tests. The rest are regression tests already in the GCC testsuite. OK for the trunk? Jeff