libphobos: Add D support for RISC-V Linux
2019-04-23 Iain Buclaw <ibuclaw@gdcproject.org> * configure.tgt: Add riscv*-*-linux* as supported target. * libdruntime/gcc/sections/elf_shared.d (getDependencies): Adjust dlpi_addr on RISCV32 and RISCV64. * src/std/math.d: Add IEEE FPU control support for RISCV. From-SVN: r270522
This commit is contained in:
parent
1bacd25b0c
commit
d9392bfa03
@ -1,3 +1,10 @@
|
||||
2019-04-23 Iain Buclaw <ibuclaw@gdcproject.org>
|
||||
|
||||
* configure.tgt: Add linux/riscv as supported target.
|
||||
* libdruntime/gcc/sections/elf_shared.d (getDependencies): Adjust
|
||||
dlpi_addr on RISCV32 and RISCV64.
|
||||
* src/std/math.d: Add IEEE FPU control support for RISC-V.
|
||||
|
||||
2019-04-23 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
|
||||
Bernd Edlinger <bernd.edlinger@hotmail.de>
|
||||
Jakub Jelinek <jakub@redhat.com>
|
||||
|
@ -29,6 +29,9 @@ case "${target}" in
|
||||
mips*-*-linux*)
|
||||
LIBPHOBOS_SUPPORTED=yes
|
||||
;;
|
||||
riscv*-*-linux*)
|
||||
LIBPHOBOS_SUPPORTED=yes
|
||||
;;
|
||||
x86_64-*-kfreebsd*-gnu | i?86-*-kfreebsd*-gnu)
|
||||
LIBPHOBOS_SUPPORTED=yes
|
||||
;;
|
||||
|
@ -22,6 +22,9 @@
|
||||
|
||||
module gcc.sections.elf_shared;
|
||||
|
||||
version (RISCV32) version = RISCV_Any;
|
||||
version (RISCV64) version = RISCV_Any;
|
||||
|
||||
version (CRuntime_Glibc) enum SharedELF = true;
|
||||
else version (CRuntime_Musl) enum SharedELF = true;
|
||||
else version (FreeBSD) enum SharedELF = true;
|
||||
@ -723,7 +726,16 @@ version (Shared)
|
||||
version (CRuntime_Musl)
|
||||
strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate
|
||||
else version (linux)
|
||||
strtab = cast(const(char)*)dyn.d_un.d_ptr;
|
||||
{
|
||||
// This might change in future glibc releases (after 2.29) as dynamic sections
|
||||
// are not required to be read-only on RISC-V. This was copy & pasted from MIPS
|
||||
// while upstreaming RISC-V support. Otherwise MIPS is the only arch which sets
|
||||
// in glibc: #define DL_RO_DYN_SECTION 1
|
||||
version (RISCV_Any)
|
||||
strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate
|
||||
else
|
||||
strtab = cast(const(char)*)dyn.d_un.d_ptr;
|
||||
}
|
||||
else version (FreeBSD)
|
||||
strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate
|
||||
else version (NetBSD)
|
||||
|
@ -4757,6 +4757,15 @@ private:
|
||||
return result;
|
||||
}
|
||||
}
|
||||
else version (RISCV_Any)
|
||||
{
|
||||
uint result = void;
|
||||
asm pure nothrow @nogc
|
||||
{
|
||||
"frflags %0" : "=r" result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
else
|
||||
assert(0, "Not yet supported");
|
||||
}
|
||||
@ -4831,6 +4840,14 @@ private:
|
||||
}
|
||||
}
|
||||
}
|
||||
else version (RISCV_Any)
|
||||
{
|
||||
uint newValues = 0x0;
|
||||
asm pure nothrow @nogc
|
||||
{
|
||||
"fsflags %0" : : "r" newValues;
|
||||
}
|
||||
}
|
||||
else
|
||||
assert(0, "Not yet supported");
|
||||
}
|
||||
@ -5423,6 +5440,15 @@ private:
|
||||
}
|
||||
return cont;
|
||||
}
|
||||
else version (RISCV_Any)
|
||||
{
|
||||
ControlState cont;
|
||||
asm pure nothrow @nogc
|
||||
{
|
||||
"frcsr %0" : "=r" cont;
|
||||
}
|
||||
return cont;
|
||||
}
|
||||
else
|
||||
assert(0, "Not yet supported");
|
||||
}
|
||||
@ -5508,6 +5534,13 @@ private:
|
||||
}
|
||||
}
|
||||
}
|
||||
else version (RISCV_Any)
|
||||
{
|
||||
asm pure nothrow @nogc
|
||||
{
|
||||
"fscsr %0" : : "r" (newState);
|
||||
}
|
||||
}
|
||||
else
|
||||
assert(0, "Not yet supported");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user