Skip to content

Commit

Permalink
Add base riscv64 file (mozilla#5)
Browse files Browse the repository at this point in the history
* Add base riscv64

* Add base simulator

* add base disasm

* add base assembler

* fix debug build

* fix style
  • Loading branch information
luyahan authored Aug 22, 2022
1 parent 5f1fc73 commit 2894cf7
Show file tree
Hide file tree
Showing 93 changed files with 15,801 additions and 168 deletions.
4 changes: 2 additions & 2 deletions config/check_macroassembler_style.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@

architecture_independent = set(["generic"])
all_unsupported_architectures_names = set(["mips32", "mips64", "mips_shared"])
all_architecture_names = set(["x86", "x64", "arm", "arm64", "loong64", "wasm32"])
all_shared_architecture_names = set(["x86_shared", "arm", "arm64", "loong64", "wasm32"])
all_architecture_names = set(["x86", "x64", "arm", "arm64", "loong64", "riscv64", "wasm32"])
all_shared_architecture_names = set(["x86_shared", "arm", "arm64", "loong64", "riscv64", "wasm32"])

reBeforeArg = "(?<=[(,\s])"
reArgType = "(?P<type>[\w\s:*&<>]+)"
Expand Down
23 changes: 21 additions & 2 deletions js/moz.configure
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ def jit_default(target, enable_record_tuple):
"mips32",
"mips64",
"loongarch64",
"riscv64"
):
return True
return False
Expand All @@ -202,7 +203,7 @@ def report_deprecated(value):
# =======================================================
option(
"--enable-simulator",
choices=("arm", "arm64", "mips32", "mips64", "loong64"),
choices=("arm", "arm64", "mips32", "mips64", "loong64", "riscv64"),
nargs=1,
help="Enable a JIT code simulator for the specified architecture",
)
Expand All @@ -219,7 +220,7 @@ def simulator(jit_enabled, simulator_enabled, target):
if target.cpu != "x86":
die("The %s simulator only works on x86." % sim_cpu)

if sim_cpu in ("arm64", "mips64", "loong64"):
if sim_cpu in ("arm64", "mips64", "loong64", "riscv64"):
if target.cpu != "x86_64" and target.cpu != "aarch64":
die("The %s simulator only works on x86-64 or arm64." % sim_cpu)

Expand All @@ -232,12 +233,14 @@ set_config("JS_SIMULATOR_ARM64", simulator.arm64)
set_config("JS_SIMULATOR_MIPS32", simulator.mips32)
set_config("JS_SIMULATOR_MIPS64", simulator.mips64)
set_config("JS_SIMULATOR_LOONG64", simulator.loong64)
set_config("JS_SIMULATOR_RISCV64", simulator.riscv64)
set_define("JS_SIMULATOR", depends_if(simulator)(lambda x: True))
set_define("JS_SIMULATOR_ARM", simulator.arm)
set_define("JS_SIMULATOR_ARM64", simulator.arm64)
set_define("JS_SIMULATOR_MIPS32", simulator.mips32)
set_define("JS_SIMULATOR_MIPS64", simulator.mips64)
set_define("JS_SIMULATOR_LOONG64", simulator.loong64)
set_define("JS_SIMULATOR_RISCV64", simulator.riscv64)


@depends("--enable-jit", simulator, target)
Expand All @@ -262,6 +265,7 @@ set_config("JS_CODEGEN_ARM64", jit_codegen.arm64)
set_config("JS_CODEGEN_MIPS32", jit_codegen.mips32)
set_config("JS_CODEGEN_MIPS64", jit_codegen.mips64)
set_config("JS_CODEGEN_LOONG64", jit_codegen.loong64)
set_config("JS_CODEGEN_RISCV64", jit_codegen.riscv64)
set_config("JS_CODEGEN_X86", jit_codegen.x86)
set_config("JS_CODEGEN_X64", jit_codegen.x64)
set_config("JS_CODEGEN_WASM32", jit_codegen.wasm32)
Expand All @@ -271,6 +275,7 @@ set_define("JS_CODEGEN_ARM64", jit_codegen.arm64)
set_define("JS_CODEGEN_MIPS32", jit_codegen.mips32)
set_define("JS_CODEGEN_MIPS64", jit_codegen.mips64)
set_define("JS_CODEGEN_LOONG64", jit_codegen.loong64)
set_define("JS_CODEGEN_RISCV64", jit_codegen.riscv64)
set_define("JS_CODEGEN_X86", jit_codegen.x86)
set_define("JS_CODEGEN_X64", jit_codegen.x64)
set_define("JS_CODEGEN_WASM32", jit_codegen.wasm32)
Expand Down Expand Up @@ -456,6 +461,20 @@ def jit_disasm_arm(jit_enabled, spew, simulator, target, debug):
set_config("JS_DISASM_ARM", jit_disasm_arm)
set_define("JS_DISASM_ARM", jit_disasm_arm)

@depends("--enable-jit", "--enable-jitspew", simulator, target, moz_debug)
def jit_disasm_riscv(jit_enabled, spew, simulator, target, debug):
if not jit_enabled:
return

if simulator and (debug or spew):
if getattr(simulator, "riscv64", None):
return True

if target.cpu == "riscv64" and (debug or spew):
return True

set_config("JS_DISASM_RISCV64", jit_disasm_riscv)
set_define("JS_DISASM_RISCV64", jit_disasm_riscv)

@depends("--enable-jit", "--enable-jitspew", simulator, target, moz_debug)
def jit_disasm_arm64(jit_enabled, spew, simulator, target, debug):
Expand Down
2 changes: 2 additions & 0 deletions js/src/jit/Assembler.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
# include "jit/mips64/Assembler-mips64.h"
#elif defined(JS_CODEGEN_LOONG64)
# include "jit/loong64/Assembler-loong64.h"
#elif defined(JS_CODEGEN_RISCV64)
# include "jit/riscv64/Assembler-riscv64.h"
#elif defined(JS_CODEGEN_WASM32)
# include "jit/wasm32/Assembler-wasm32.h"
#elif defined(JS_CODEGEN_NONE)
Expand Down
5 changes: 1 addition & 4 deletions js/src/jit/BaselineBailouts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@

#include "builtin/ModuleObject.h"
#include "debugger/DebugAPI.h"
#include "jit/arm/Simulator-arm.h"
#include "jit/Bailouts.h"
#include "jit/BaselineFrame.h"
#include "jit/BaselineIC.h"
Expand All @@ -21,11 +20,9 @@
#include "jit/JitFrames.h"
#include "jit/JitRuntime.h"
#include "jit/JitSpewer.h"
#include "jit/loong64/Simulator-loong64.h"
#include "jit/mips32/Simulator-mips32.h"
#include "jit/mips64/Simulator-mips64.h"
#include "jit/RematerializedFrame.h"
#include "jit/SharedICRegisters.h"
#include "jit/Simulator.h"
#include "js/friend/StackLimits.h" // js::AutoCheckRecursionLimit, js::ReportOverRecursed
#include "js/Utility.h"
#include "util/Memory.h"
Expand Down
2 changes: 2 additions & 0 deletions js/src/jit/BaselineCodeGen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -516,6 +516,8 @@ bool BaselineCodeGen<Handler>::emitOutOfLinePostBarrierSlot() {
masm.push(ra);
#elif defined(JS_CODEGEN_LOONG64)
masm.push(ra);
#elif defined(JS_CODEGEN_RISCV64)
masm.push(ra);
#endif
masm.pushValue(R0);

Expand Down
2 changes: 1 addition & 1 deletion js/src/jit/CodeGenerator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11591,7 +11591,7 @@ void CodeGenerator::visitOutOfLineStoreElementHole(
// Also note: this branch does not need Spectre mitigations, doing that for
// the capacity check below is sufficient.
#if defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) || \
defined(JS_CODEGEN_LOONG64)
defined(JS_CODEGEN_LOONG64) || defined(JS_CODEGEN_RISV64)
// Had to reimplement for MIPS because there are no flags.
Address initLength(elements, ObjectElements::offsetOfInitializedLength());
masm.branch32(Assembler::NotEqual, initLength, indexReg, ool->callStub());
Expand Down
2 changes: 2 additions & 0 deletions js/src/jit/CodeGenerator.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
# include "jit/mips64/CodeGenerator-mips64.h"
#elif defined(JS_CODEGEN_LOONG64)
# include "jit/loong64/CodeGenerator-loong64.h"
#elif defined(JS_CODEGEN_RISCV64)
# include "jit/riscv64/CodeGenerator-riscv64.h"
#elif defined(JS_CODEGEN_WASM32)
# include "jit/wasm32/CodeGenerator-wasm32.h"
#elif defined(JS_CODEGEN_NONE)
Expand Down
4 changes: 2 additions & 2 deletions js/src/jit/FlushICache.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ inline void FlushICache(void* code, size_t size) {

#elif (defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64)) || \
(defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64)) || \
defined(JS_CODEGEN_LOONG64)
defined(JS_CODEGEN_LOONG64) || defined(JS_CODEGEN_RISCV64)

// Invalidate the given code range from the icache. This will also flush the
// execution context for this core. If this code is to be executed on another
Expand All @@ -42,7 +42,7 @@ inline void FlushICache(void* code, size_t size) { MOZ_CRASH(); }

#if (defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64)) || \
(defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64)) || \
defined(JS_CODEGEN_LOONG64)
defined(JS_CODEGEN_LOONG64) || defined(JS_CODEGEN_RISCV64)

inline void FlushExecutionContext() {
// No-op. Execution context is coherent with instruction cache.
Expand Down
2 changes: 1 addition & 1 deletion js/src/jit/JitOptions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ DefaultJitOptions::DefaultJitOptions() {
}

#if defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) || \
defined(JS_CODEGEN_LOONG64)
defined(JS_CODEGEN_LOONG64) || defined(JS_CODEGEN_RISCV64)
SET_DEFAULT(spectreIndexMasking, false);
SET_DEFAULT(spectreObjectMitigations, false);
SET_DEFAULT(spectreStringMitigations, false);
Expand Down
2 changes: 2 additions & 0 deletions js/src/jit/LIR.h
Original file line number Diff line number Diff line change
Expand Up @@ -1926,6 +1926,8 @@ AnyRegister LAllocation::toRegister() const {
# include "jit/arm64/LIR-arm64.h"
#elif defined(JS_CODEGEN_LOONG64)
# include "jit/loong64/LIR-loong64.h"
#elif defined(JS_CODEGEN_RISCV64)
# include "jit/riscv64/LIR-riscv64.h"
#elif defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64)
# if defined(JS_CODEGEN_MIPS32)
# include "jit/mips32/LIR-mips32.h"
Expand Down
2 changes: 1 addition & 1 deletion js/src/jit/Label.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ struct LabelBase {
void operator=(const LabelBase& label) = delete;

#if defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) || \
defined(JS_CODEGEN_LOONG64)
defined(JS_CODEGEN_LOONG64)|| defined(JS_CODEGEN_RISCV64)
public:
#endif
static const uint32_t INVALID_OFFSET = 0x7fffffff; // UINT31_MAX.
Expand Down
2 changes: 2 additions & 0 deletions js/src/jit/Lowering.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
# include "jit/mips64/Lowering-mips64.h"
#elif defined(JS_CODEGEN_LOONG64)
# include "jit/loong64/Lowering-loong64.h"
#elif defined(JS_CODEGEN_RISCV64)
# include "jit/riscv64/Lowering-riscv64.h"
#elif defined(JS_CODEGEN_WASM32)
# include "jit/wasm32/Lowering-wasm32.h"
#elif defined(JS_CODEGEN_NONE)
Expand Down
2 changes: 2 additions & 0 deletions js/src/jit/MacroAssembler-inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@
# include "jit/mips64/MacroAssembler-mips64-inl.h"
#elif defined(JS_CODEGEN_LOONG64)
# include "jit/loong64/MacroAssembler-loong64-inl.h"
#elif defined(JS_CODEGEN_RISCV64)
# include "jit/riscv64/MacroAssembler-riscv64-inl.h"
#elif defined(JS_CODEGEN_WASM32)
# include "jit/wasm32/MacroAssembler-wasm32-inl.h"
#elif !defined(JS_CODEGEN_NONE)
Expand Down
6 changes: 4 additions & 2 deletions js/src/jit/MacroAssembler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2321,7 +2321,7 @@ void MacroAssembler::outOfLineTruncateSlow(FloatRegister src, Register dest,

#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) || \
defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) || \
defined(JS_CODEGEN_LOONG64)
defined(JS_CODEGEN_LOONG64) || defined(JS_CODEGEN_RISCV64)
ScratchDoubleScope fpscratch(*this);
if (widenFloatToDouble) {
convertFloat32ToDouble(src, fpscratch);
Expand Down Expand Up @@ -2360,7 +2360,7 @@ void MacroAssembler::outOfLineTruncateSlow(FloatRegister src, Register dest,

#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) || \
defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) || \
defined(JS_CODEGEN_LOONG64)
defined(JS_CODEGEN_LOONG64)|| defined(JS_CODEGEN_RISCV64)
// Nothing
#elif defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64)
if (widenFloatToDouble) {
Expand Down Expand Up @@ -4078,6 +4078,8 @@ void MacroAssembler::emitPreBarrierFastPath(JSRuntime* rt, MIRType type,
ma_dsll(temp1, temp1, temp3);
#elif JS_CODEGEN_LOONG64
as_sll_d(temp1, temp1, temp3);
#elif JS_CODEGEN_RISCV64
MOZ_CRASH();
#elif JS_CODEGEN_WASM32
MOZ_CRASH();
#elif JS_CODEGEN_NONE
Expand Down
Loading

0 comments on commit 2894cf7

Please sign in to comment.