From: Jeff Law Date: Mon, 4 Dec 2023 17:06:49 +0000 (-0700) Subject: [committed] Fix HImode load mnemonic on microblaze port X-Git-Tag: basepoints/gcc-15~4014 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b544ec681bdc9c48587d2e014f9559674097738a;p=thirdparty%2Fgcc.git [committed] Fix HImode load mnemonic on microblaze port The tester recently started failing va-arg-22.c on microblaze-linux: gcc.c-torture/execute/va-arg-22.c -O0 (test for excess errors) It was failing with an undefined reference to "r7" at link time. This was ultimately tracked down to a HImode load using (reg+reg) addressing mode, but which used the lhui instruction instead of lhu. The "i" means it's supposed to be (reg+disp) so the assembler tried to interpret "r7" as an immediate/symbol. The port uses %i as an output modifier to select between sh/shi and various other mnemonics for loads/stores. The movhi pattern simply failed to use it for the two cases where it's loading from memory (interestingly enough it was used for stores). Clearly we aren't using reg+reg much for HImode loads as this didn't fix anything else in the testsuite. gcc/ * config/microblaze/microblaze.md (movhi): Use %i for half-word loads to properly select between lhu/lhui. --- diff --git a/gcc/config/microblaze/microblaze.md b/gcc/config/microblaze/microblaze.md index 671667b537cb..a8ee886d36b0 100644 --- a/gcc/config/microblaze/microblaze.md +++ b/gcc/config/microblaze/microblaze.md @@ -1089,8 +1089,8 @@ "@ addik\t%0,r0,%1\t# %X1 addk\t%0,%1,r0 - lhui\t%0,%1 - lhui\t%0,%1 + lhu%i1\t%0,%1 + lhu%i1\t%0,%1 sh%i0\t%z1,%0 sh%i0\t%z1,%0" [(set_attr "type" "arith,move,load,no_delay_load,store,no_delay_store")