Add support for riscv64

Signed-off-by: David Abdurachmanov <david.abdurachmanov@sifive.com>
This commit is contained in:
David Abdurachmanov 2020-12-01 09:39:57 +02:00
parent e5b3e47f21
commit 09a7bbfa49
Signed by: davidlt
GPG Key ID: 8B7F1DA0E2C9FDBB
2 changed files with 99 additions and 1 deletions

View File

@ -0,0 +1,85 @@
diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure
index 83b8d7055..200ea47e5 100644
--- a/build/moz.configure/init.configure
+++ b/build/moz.configure/init.configure
@@ -673,6 +673,9 @@ def split_triplet(triplet, allow_unknown=False):
elif cpu.startswith('aarch64'):
canonical_cpu = 'aarch64'
endianness = 'little'
+ elif cpu.startswith('riscv64'):
+ canonical_cpu = 'riscv64'
+ endianness = 'little'
elif cpu == 'sh4':
canonical_cpu = 'sh4'
endianness = 'little'
diff --git a/js/src/jit/AtomicOperations.h b/js/src/jit/AtomicOperations.h
index 3501e65b8..fda0b1487 100644
--- a/js/src/jit/AtomicOperations.h
+++ b/js/src/jit/AtomicOperations.h
@@ -393,6 +393,8 @@ inline bool AtomicOperations::isLockfreeJS(int32_t size) {
#include "jit/none/AtomicOperations-feeling-lucky.h"
#elif defined(__s390__) || defined(__s390x__)
#include "jit/none/AtomicOperations-feeling-lucky.h"
+#elif defined(__riscv)
+#include "jit/none/AtomicOperations-feeling-lucky.h"
#else
#error "No AtomicOperations support provided for this platform"
#endif
diff --git a/js/src/jit/none/AtomicOperations-feeling-lucky.h b/js/src/jit/none/AtomicOperations-feeling-lucky.h
index c0b436995..f0e2d7150 100644
--- a/js/src/jit/none/AtomicOperations-feeling-lucky.h
+++ b/js/src/jit/none/AtomicOperations-feeling-lucky.h
@@ -80,6 +80,14 @@
#define GNUC_COMPATIBLE
#endif
+#ifdef __riscv
+# define GNUC_COMPATIBLE
+# if __riscv_xlen == 64
+# define HAS_64BIT_ATOMICS
+# define HAS_64BIT_LOCKFREE
+# endif
+#endif
+
// The default implementation tactic for gcc/clang is to use the newer
// __atomic intrinsics added for use in C++11 <atomic>. Where that
// isn't available, we use GCC's older __sync functions instead.
diff --git a/mfbt/tests/TestPoisonArea.cpp b/mfbt/tests/TestPoisonArea.cpp
index 06c24ed03..708ea558e 100644
--- a/mfbt/tests/TestPoisonArea.cpp
+++ b/mfbt/tests/TestPoisonArea.cpp
@@ -160,6 +160,14 @@
#elif defined __aarch64__
#define RETURN_INSTR 0xd65f03c0 /* ret */
+#elif defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64
+#if defined(__riscv_compressed)
+#define RETURN_INSTR 0x8082 /* ret */
+#define RETURN_INSTR_TYPE uint16_t
+#else
+#define RETURN_INSTR 0x00008067 /* ret */
+#endif
+
#elif defined __ia64
struct ia64_instr { uint32_t mI[4]; };
static const ia64_instr _return_instr =
diff --git a/python/mozbuild/mozbuild/configure/constants.py b/python/mozbuild/mozbuild/configure/constants.py
index 33ae5a456..3edb0d618 100644
--- a/python/mozbuild/mozbuild/configure/constants.py
+++ b/python/mozbuild/mozbuild/configure/constants.py
@@ -50,6 +50,7 @@ CPU_bitness = {
'mips64': 64,
'ppc': 32,
'ppc64': 64,
+ 'riscv64': 64,
's390': 32,
's390x': 64,
'sh4': 32,
@@ -89,6 +90,7 @@ CPU_preprocessor_checks = OrderedDict((
('mips64', '__mips64'),
('mips32', '__mips__'),
('sh4', '__sh__'),
+ ('riscv64', 'defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64'),
))
assert sorted(CPU_preprocessor_checks.keys()) == sorted(CPU.POSSIBLE_VALUES)

View File

@ -16,7 +16,7 @@
Name: mozjs%{major}
Version: 60.9.0
Release: 7%{?dist}
Release: 7.0.riscv64%{?dist}
Summary: SpiderMonkey JavaScript library
License: MPLv2.0 and MPLv1.1 and BSD and GPLv2+ and GPLv3+ and LGPLv2+ and AFL and ASL 2.0
@ -54,6 +54,9 @@ Patch26: build-icu-big-endian.patch
Patch30: Save-x28-before-clobbering-it-in-the-regex-compiler.patch
Patch31: Save-and-restore-non-volatile-x28-on-ARM64-for-generated-unboxed-object-constructor.patch
# Add support for RISC-V (riscv64)
Patch400: firefox-60.2.2-add-riscv64.patch
BuildRequires: autoconf213
BuildRequires: gcc
BuildRequires: gcc-c++
@ -116,6 +119,10 @@ pushd ../..
%patch31 -p1
%endif
%ifarch riscv64
%patch400 -p1
%endif
# make sure we don't ever accidentally link against bundled security libs
rm -rf security/
popd
@ -148,6 +155,9 @@ autoconf-2.13
--disable-optimize \
--enable-pie \
--disable-jemalloc \
%ifarch riscv64
--disable-ion
%endif
%if 0%{?big_endian}
echo "Generate big endian version of config/external/icu/data/icud58l.dat"
@ -243,6 +253,9 @@ ln -s libmozjs-%{major}.so.0 %{buildroot}%{_libdir}/libmozjs-%{major}.so
%{_includedir}/mozjs-%{major}/
%changelog
* Tue Dec 01 2020 David Abdurachmanov <david.abdurachmanov@sifive.com> - 60.9.0-7.0.riscv64
- Add support for RISC-V (riscv64)
* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 60.9.0-7
- Second attempt - Rebuilt for
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild