This is the mail archive of the
gcc-cvs@gcc.gnu.org
mailing list for the GCC project.
r270816 svn:log changed - in /branches/gcc-9-br...
- From: macro at gcc dot gnu dot org
- To: gcc-cvs at gcc dot gnu dot org
- Date: Sat, 16 Nov 2019 02:17:39 -0000
- Subject: r270816 svn:log changed - in /branches/gcc-9-br...
Author: macro
Revision: 270816
Modified property: svn:log
Modified: svn:log at Sat Nov 16 02:17:39 2019
------------------------------------------------------------------------------
--- svn:log (original)
+++ svn:log Sat Nov 16 02:17:39 2019
@@ -1,6 +1,39 @@
libphobos: RISC-V: Fix soft-float build errors with IEEE exception flags
+Fix assembly errors:
+
+.../libphobos/src/std/math.d: Assembler messages:
+.../libphobos/src/std/math.d:4773: Error: unrecognized opcode `frflags a0'
+.../libphobos/src/std/math.d:4856: Error: unrecognized opcode `fsflags a5'
+.../libphobos/src/std/math.d:4856: Error: unrecognized opcode `fsflags a5'
+.../libphobos/src/std/math.d:4773: Error: unrecognized opcode `frflags a0'
+.../libphobos/src/std/math.d:5549: Error: unrecognized opcode `fscsr a5'
+.../libphobos/src/std/math.d:5456: Error: unrecognized opcode `frcsr a5'
+.../libphobos/src/std/math.d:5456: Error: unrecognized opcode `frcsr a5'
+.../libphobos/src/std/math.d:5549: Error: unrecognized opcode `fscsr a5'
+.../libphobos/src/std/math.d:5456: Error: unrecognized opcode `frcsr a5'
+.../libphobos/src/std/math.d:5549: Error: unrecognized opcode `fscsr a0'
+.../libphobos/src/std/math.d:5456: Error: unrecognized opcode `frcsr a0'
+.../libphobos/src/std/math.d:5456: Error: unrecognized opcode `frcsr a0'
+.../libphobos/src/std/math.d:5549: Error: unrecognized opcode `fscsr s2'
+make[8]: *** [Makefile:1119: std/math.lo] Error 1
+
+triggered with the RISC-V lp64 multilib in a GCC build configured with
+`--enable-multilib --enable-languages=all --target=riscv64-linux-gnu'.
+This is due to unconditional explicit use of F extension instructions
+within inline assembly, to access IEEE exception flags. The use of
+these instructions is not allowed when building for a soft-float ABI.
+
+Correct the problem by wrapping said inline assembly into a conditional
+such that if `D_SoftFloat' is true, then reads from IEEE exception flags
+return 0 and writes are ignored instead, complementing r270522
+("libphobos: Add D support for RISC-V Linux"), which is an updated
+version of <https://gcc.gnu.org/ml/gcc-patches/2019-04/msg00325.html>,
+where the problematic code has originated from.
+
libphobos/ChangeLog:
+
+2019-05-02 Maciej Rozycki <macro@wdc.com>
* std/math.d (IeeeFlags.getIeeeFlags): Handle RISC-V soft-float ABI.
(IeeeFlags.resetIeeeFlags): Likewise.