1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
https://raw.githubusercontent.com/xen0n/loongson-overlay/00901fd4c599ec320c7852cbd30b40d3f6aa8971/dev-lang/spidermonkey/files/spidermonkey-68.0-add-loongarch64-support.patch
--- a/build/moz.configure/init.configure
+++ b/build/moz.configure/init.configure
@@ -734,6 +734,9 @@ def split_triplet(triplet, allow_unknown
elif cpu == 'sh4':
canonical_cpu = 'sh4'
endianness = 'little'
+ elif cpu == 'loongarch64':
+ canonical_cpu = 'loongarch64'
+ endianness = 'little'
elif allow_unknown:
canonical_cpu = cpu
endianness = 'unknown'
--- a/js/src/jit/AtomicOperations.h
+++ b/js/src/jit/AtomicOperations.h
@@ -382,6 +382,9 @@ inline bool AtomicOperations::isLockfree
# else
# include "jit/shared/AtomicOperations-feeling-lucky.h"
# endif
+#elif defined(__loongarch64)
+// This is only here to avoid merge conflict with spidermonkey-68.0-add-riscv-support.patch.
+# include "jit/shared/AtomicOperations-feeling-lucky.h"
#elif defined(__mips__)
# if defined(__clang__) || defined(__GNUC__)
# include "jit/mips-shared/AtomicOperations-mips-shared.h"
--- a/js/src/jit/shared/AtomicOperations-feeling-lucky-gcc.h
+++ b/js/src/jit/shared/AtomicOperations-feeling-lucky-gcc.h
@@ -57,6 +57,11 @@
# define HAS_64BIT_LOCKFREE
#endif
+#ifdef __loongarch64
+# define HAS_64BIT_ATOMICS
+# define HAS_64BIT_LOCKFREE
+#endif
+
#if defined(__ppc64__) || defined(__PPC64__) || defined(__ppc64le__) || \
defined(__PPC64LE__)
# define HAS_64BIT_ATOMICS
--- a/mfbt/tests/TestPoisonArea.cpp
+++ b/mfbt/tests/TestPoisonArea.cpp
@@ -127,6 +127,9 @@
#elif defined __arm__ || defined _M_ARM
# define RETURN_INSTR 0xE12FFF1E /* bx lr */
+#elif defined __loongarch__
+# define RETURN_INSTR 0x4c000020 /* jirl zero, ra, 0 */
+
// PPC has its own style of CPU-id #defines. There is no Windows for
// PPC as far as I know, so no _M_ variant.
#elif defined _ARCH_PPC || defined _ARCH_PWR || defined _ARCH_PWR2
--- a/python/mozbuild/mozbuild/configure/constants.py
+++ b/python/mozbuild/mozbuild/configure/constants.py
@@ -46,6 +46,7 @@ CPU_bitness = {
'arm': 32,
'hppa': 32,
'ia64': 64,
+ 'loongarch64': 64,
'mips32': 32,
'mips64': 64,
'ppc': 32,
@@ -78,6 +79,7 @@ CPU_preprocessor_checks = OrderedDict((
('arm', '__arm__ || _M_ARM'),
('aarch64', '__aarch64__ || _M_ARM64'),
('ia64', '__ia64__'),
+ ('loongarch64', '__loongarch64'),
('s390x', '__s390x__'),
('s390', '__s390__'),
('ppc64', '__powerpc64__'),
--- a/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py
+++ b/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py
@@ -1068,6 +1068,10 @@ class LinuxCrossCompileToolchainTest(Bas
'ia64-unknown-linux-gnu': little_endian + {
'__ia64__': 1,
},
+ 'loongarch64-unknown-linux-gnu': little_endian + {
+ '__loongarch__': 1,
+ '__loongarch64': 1,
+ },
's390x-unknown-linux-gnu': big_endian + {
'__s390x__': 1,
'__s390__': 1,
--- a/intl/icu/source/i18n/double-conversion-utils.h
+++ b/intl/icu/source/i18n/double-conversion-utils.h
@@ -117,6 +117,7 @@ int main(int argc, char** argv) {
#if defined(_M_X64) || defined(__x86_64__) || \
defined(__ARMEL__) || defined(__avr32__) || defined(_M_ARM) || defined(_M_ARM64) || \
defined(__hppa__) || defined(__ia64__) || \
+ defined(__loongarch__) || \
defined(__mips__) || \
defined(__nios2__) || defined(__ghs) || \
defined(__powerpc__) || defined(__ppc__) || defined(__ppc64__) || \
--- a/mfbt/double-conversion/double-conversion/utils.h
+++ b/mfbt/double-conversion/double-conversion/utils.h
@@ -117,6 +117,7 @@ int main(int argc, char** argv) {
#if defined(_M_X64) || defined(__x86_64__) || \
defined(__ARMEL__) || defined(__avr32__) || defined(_M_ARM) || defined(_M_ARM64) || \
defined(__hppa__) || defined(__ia64__) || \
+ defined(__loongarch__) || \
defined(__mips__) || \
defined(__nios2__) || defined(__ghs) || \
defined(__powerpc__) || defined(__ppc__) || defined(__ppc64__) || \
|