Commit d9392bfa by Iain Buclaw Committed by Iain Buclaw

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
parent 1bacd25b
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> 2019-04-23 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
Bernd Edlinger <bernd.edlinger@hotmail.de> Bernd Edlinger <bernd.edlinger@hotmail.de>
Jakub Jelinek <jakub@redhat.com> Jakub Jelinek <jakub@redhat.com>
......
...@@ -29,6 +29,9 @@ case "${target}" in ...@@ -29,6 +29,9 @@ case "${target}" in
mips*-*-linux*) mips*-*-linux*)
LIBPHOBOS_SUPPORTED=yes LIBPHOBOS_SUPPORTED=yes
;; ;;
riscv*-*-linux*)
LIBPHOBOS_SUPPORTED=yes
;;
x86_64-*-kfreebsd*-gnu | i?86-*-kfreebsd*-gnu) x86_64-*-kfreebsd*-gnu | i?86-*-kfreebsd*-gnu)
LIBPHOBOS_SUPPORTED=yes LIBPHOBOS_SUPPORTED=yes
;; ;;
......
...@@ -22,6 +22,9 @@ ...@@ -22,6 +22,9 @@
module gcc.sections.elf_shared; module gcc.sections.elf_shared;
version (RISCV32) version = RISCV_Any;
version (RISCV64) version = RISCV_Any;
version (CRuntime_Glibc) enum SharedELF = true; version (CRuntime_Glibc) enum SharedELF = true;
else version (CRuntime_Musl) enum SharedELF = true; else version (CRuntime_Musl) enum SharedELF = true;
else version (FreeBSD) enum SharedELF = true; else version (FreeBSD) enum SharedELF = true;
...@@ -723,7 +726,16 @@ version (Shared) ...@@ -723,7 +726,16 @@ version (Shared)
version (CRuntime_Musl) version (CRuntime_Musl)
strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate
else version (linux) else version (linux)
{
// 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; strtab = cast(const(char)*)dyn.d_un.d_ptr;
}
else version (FreeBSD) else version (FreeBSD)
strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate
else version (NetBSD) else version (NetBSD)
......
...@@ -4757,6 +4757,15 @@ private: ...@@ -4757,6 +4757,15 @@ private:
return result; return result;
} }
} }
else version (RISCV_Any)
{
uint result = void;
asm pure nothrow @nogc
{
"frflags %0" : "=r" result;
}
return result;
}
else else
assert(0, "Not yet supported"); assert(0, "Not yet supported");
} }
...@@ -4831,6 +4840,14 @@ private: ...@@ -4831,6 +4840,14 @@ private:
} }
} }
} }
else version (RISCV_Any)
{
uint newValues = 0x0;
asm pure nothrow @nogc
{
"fsflags %0" : : "r" newValues;
}
}
else else
assert(0, "Not yet supported"); assert(0, "Not yet supported");
} }
...@@ -5423,6 +5440,15 @@ private: ...@@ -5423,6 +5440,15 @@ private:
} }
return cont; return cont;
} }
else version (RISCV_Any)
{
ControlState cont;
asm pure nothrow @nogc
{
"frcsr %0" : "=r" cont;
}
return cont;
}
else else
assert(0, "Not yet supported"); assert(0, "Not yet supported");
} }
...@@ -5508,6 +5534,13 @@ private: ...@@ -5508,6 +5534,13 @@ private:
} }
} }
} }
else version (RISCV_Any)
{
asm pure nothrow @nogc
{
"fscsr %0" : : "r" (newState);
}
}
else else
assert(0, "Not yet supported"); assert(0, "Not yet supported");
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment