https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102584
Bug ID: 102584 Summary: [OpenRISC] backend generates wrong halfword constant Product: gcc Version: 11.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: thrustl at hotmail dot com Target Milestone: --- The following simple program: void f1(unsigned short); void f2(short); int main() { f1(0xf123); f2(0xf123); } When compiled with $ openrisc-linux-gnu-gcc -S 35.c generates the following assembly: .section .text .align 4 .global main .type main, @function main: l.addi r1, r1, -8 l.sw 0(r1), r2 l.addi r2, r1, 8 l.sw 4(r1), r9 l.xori r3, r0, -3805 l.jal f1 l.nop l.xori r3, r0, -3805 l.jal f2 l.nop l.movhi r17, hi(0) l.or r11, r17, r17 l.lwz r2, 0(r1) l.lwz r9, 4(r1) l.addi r1, r1, 8 l.jr r9 l.nop .size main, .-main Both f1() and f2() are called with signed constant -3805. I believe f1() should be called with unsigned constant 0xf123, generated by l.ori instruction. GCC version (comes with Fedora 34): $ openrisc-linux-gnu-gcc -v Using built-in specs. COLLECT_GCC=openrisc-linux-gnu-gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/or1k-linux/11/lto-wrapper Target: or1k-linux Configured with: ../gcc-11.2.1-20210728/configure --bindir=/usr/bin --build=x86_64-redhat-linux-gnu --datadir=/usr/share --disable-decimal-float --disable-dependency-tracking --disable-gold --disable-libgcj --disable-libgomp --disable-libmpx --disable-libquadmath --disable-libssp --disable-libunwind-exceptions --disable-shared --disable-silent-rules --disable-sjlj-exceptions --disable-threads --with-ld=/usr/bin/openrisc-linux-gnu-ld --enable-__cxa_atexit --enable-checking=release --enable-gnu-unique-object --enable-initfini-array --enable-languages=c,c++ --enable-linker-build-id --enable-lto --enable-nls --enable-obsolete --enable-plugin --enable-targets=all --exec-prefix=/usr --host=x86_64-redhat-linux-gnu --includedir=/usr/include --infodir=/usr/share/info --libexecdir=/usr/libexec --localstatedir=/var --mandir=/usr/share/man --prefix=/usr --program-prefix=openrisc-linux-gnu- --sbindir=/usr/sbin --sharedstatedir=/var/lib --sysconfdir=/etc --target=or1k-linux --with-bugurl=http://bugzilla.redhat.com/bugzilla/ --with-gcc-major-version-only --with-isl --with-newlib --with-plugin-ld=/usr/bin/openrisc-linux-gnu-ld --with-sysroot=/usr/openrisc-linux-gnu/sys-root --with-system-libunwind --with-system-zlib --without-headers --with-linker-hash-style=gnu Thread model: single Supported LTO compression algorithms: zlib zstd gcc version 11.2.1 20210728 (Red Hat Cross 11.2.1-1) (GCC) I also tried to recompile and got the same result.