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 W. Rozycki <macro@wdc.com> * std/math.d (IeeeFlags.getIeeeFlags): Handle RISC-V soft-float ABI. (IeeeFlags.resetIeeeFlags): Likewise. (FloatingPointControl.getControlState): Likewise. (FloatingPointControl.setControlState): Likewise. From-SVN: r270815
This commit is contained in:
parent
8c6a71e47c
commit
1770f16993
|
@ -1,3 +1,10 @@
|
|||
2019-05-02 Maciej Rozycki <macro@wdc.com>
|
||||
|
||||
* std/math.d (IeeeFlags.getIeeeFlags): Handle RISC-V soft-float ABI.
|
||||
(IeeeFlags.resetIeeeFlags): Likewise.
|
||||
(FloatingPointControl.getControlState): Likewise.
|
||||
(FloatingPointControl.setControlState): Likewise.
|
||||
|
||||
2019-04-25 Iain Buclaw <ibuclaw@gdcproject.org>
|
||||
|
||||
PR d/90250
|
||||
|
|
|
@ -4766,6 +4766,10 @@ private:
|
|||
}
|
||||
}
|
||||
else version (RISCV_Any)
|
||||
{
|
||||
version (D_SoftFloat)
|
||||
return 0;
|
||||
else
|
||||
{
|
||||
uint result = void;
|
||||
asm pure nothrow @nogc
|
||||
|
@ -4774,6 +4778,7 @@ private:
|
|||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
else
|
||||
assert(0, "Not yet supported");
|
||||
}
|
||||
|
@ -4849,6 +4854,10 @@ private:
|
|||
}
|
||||
}
|
||||
else version (RISCV_Any)
|
||||
{
|
||||
version (D_SoftFloat)
|
||||
return;
|
||||
else
|
||||
{
|
||||
uint newValues = 0x0;
|
||||
asm pure nothrow @nogc
|
||||
|
@ -4856,6 +4865,7 @@ private:
|
|||
"fsflags %0" : : "r" newValues;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
assert(0, "Not yet supported");
|
||||
}
|
||||
|
@ -5449,6 +5459,10 @@ private:
|
|||
return cont;
|
||||
}
|
||||
else version (RISCV_Any)
|
||||
{
|
||||
version (D_SoftFloat)
|
||||
return 0;
|
||||
else
|
||||
{
|
||||
ControlState cont;
|
||||
asm pure nothrow @nogc
|
||||
|
@ -5457,6 +5471,7 @@ private:
|
|||
}
|
||||
return cont;
|
||||
}
|
||||
}
|
||||
else
|
||||
assert(0, "Not yet supported");
|
||||
}
|
||||
|
@ -5543,12 +5558,17 @@ private:
|
|||
}
|
||||
}
|
||||
else version (RISCV_Any)
|
||||
{
|
||||
version (D_SoftFloat)
|
||||
return;
|
||||
else
|
||||
{
|
||||
asm pure nothrow @nogc
|
||||
{
|
||||
"fscsr %0" : : "r" (newState);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
assert(0, "Not yet supported");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue