Compare commits

...

2 Commits

Author SHA1 Message Date
David Abdurachmanov c4fca843fb
Update RISC-V (riscv64) patch with atomic support
Signed-off-by: David Abdurachmanov <david.abdurachmanov@gmail.com>
2018-10-18 09:02:33 +02:00
David Abdurachmanov 5f9d548355
Add support for RISC-V (riscv64)
Signed-off-by: David Abdurachmanov <david.abdurachmanov@gmail.com>
2018-10-16 11:27:12 +02:00
2 changed files with 97 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 a8970b0d3..41503c81e 100644
--- a/js/src/jit/AtomicOperations.h
+++ b/js/src/jit/AtomicOperations.h
@@ -387,6 +387,8 @@ 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 da5722843..288b45313 100644
--- a/js/src/jit/none/AtomicOperations-feeling-lucky.h
+++ b/js/src/jit/none/AtomicOperations-feeling-lucky.h
@@ -79,6 +79,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

@ -12,7 +12,7 @@
Name: mozjs%{major}
Version: 60.2.2
Release: 1%{?dist}
Release: 1.1.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
@ -37,6 +37,9 @@ Patch14: init_patch.patch
# Patches from Fedora firefox package:
Patch26: build-icu-big-endian.patch
# Add support for RISC-V (riscv64)
Patch400: firefox-60.2.2-add-riscv64.patch
BuildRequires: autoconf213
BuildRequires: gcc
BuildRequires: gcc-c++
@ -88,6 +91,8 @@ pushd ../..
%patch26 -p1 -b .icu
%endif
%patch400 -p1
# make sure we don't ever accidentally link against bundled security libs
rm -rf security/
popd
@ -115,6 +120,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"
@ -173,6 +181,9 @@ ln -s libmozjs-%{major}.so.0 %{buildroot}%{_libdir}/libmozjs-%{major}.so
%{_includedir}/mozjs-%{major}/
%changelog
* Tue Oct 16 2018 David Abdurachmanov <david.abdurachmanov@gmail.com> - 60.2.2-1.1.riscv64
- Add support for RISC-V (riscv64)
* Thu Oct 04 2018 Kalev Lember <klember@redhat.com> - 60.2.2-1
- Update to 60.2.2