summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/reference/mpyfiles.rst2
-rw-r--r--mpy-cross/main.c9
-rw-r--r--mpy-cross/mpy_cross/__init__.py1
-rw-r--r--py/persistentcode.h1
-rw-r--r--tests/feature_check/target_info.py1
-rwxr-xr-xtools/mpy-tool.py6
6 files changed, 16 insertions, 4 deletions
diff --git a/docs/reference/mpyfiles.rst b/docs/reference/mpyfiles.rst
index be0114701..cd4db623f 100644
--- a/docs/reference/mpyfiles.rst
+++ b/docs/reference/mpyfiles.rst
@@ -58,7 +58,7 @@ If importing an .mpy file fails then try the following:
sys_mpy = sys.implementation._mpy
arch = [None, 'x86', 'x64',
'armv6', 'armv6m', 'armv7m', 'armv7em', 'armv7emsp', 'armv7emdp',
- 'xtensa', 'xtensawin', 'rv32imc'][sys_mpy >> 10]
+ 'xtensa', 'xtensawin', 'rv32imc', 'rv64imc'][sys_mpy >> 10]
print('mpy version:', sys_mpy & 0xff)
print('mpy sub-version:', sys_mpy >> 8 & 3)
print('mpy flags:', end='')
diff --git a/mpy-cross/main.c b/mpy-cross/main.c
index b7771ce6e..63a74d084 100644
--- a/mpy-cross/main.c
+++ b/mpy-cross/main.c
@@ -130,7 +130,8 @@ static int usage(char **argv) {
"Target specific options:\n"
"-msmall-int-bits=number : set the maximum bits used to encode a small-int\n"
"-march=<arch> : set architecture for native emitter;\n"
- " x86, x64, armv6, armv6m, armv7m, armv7em, armv7emsp, armv7emdp, xtensa, xtensawin, rv32imc, host, debug\n"
+ " x86, x64, armv6, armv6m, armv7m, armv7em, armv7emsp,\n"
+ " armv7emdp, xtensa, xtensawin, rv32imc, rv64imc, host, debug\n"
"\n"
"Implementation specific options:\n", argv[0]
);
@@ -316,6 +317,9 @@ MP_NOINLINE int main_(int argc, char **argv) {
} else if (strcmp(arch, "rv32imc") == 0) {
mp_dynamic_compiler.native_arch = MP_NATIVE_ARCH_RV32IMC;
mp_dynamic_compiler.nlr_buf_num_regs = MICROPY_NLR_NUM_REGS_RV32I;
+ } else if (strcmp(arch, "rv64imc") == 0) {
+ mp_dynamic_compiler.native_arch = MP_NATIVE_ARCH_RV64IMC;
+ mp_dynamic_compiler.nlr_buf_num_regs = MICROPY_NLR_NUM_REGS_RV64I;
} else if (strcmp(arch, "debug") == 0) {
mp_dynamic_compiler.native_arch = MP_NATIVE_ARCH_DEBUG;
mp_dynamic_compiler.nlr_buf_num_regs = 0;
@@ -329,6 +333,9 @@ MP_NOINLINE int main_(int argc, char **argv) {
#elif defined(__arm__) && !defined(__thumb2__)
mp_dynamic_compiler.native_arch = MP_NATIVE_ARCH_ARMV6;
mp_dynamic_compiler.nlr_buf_num_regs = MICROPY_NLR_NUM_REGS_ARM_THUMB_FP;
+ #elif defined(__riscv) && (__riscv_xlen == 64)
+ mp_dynamic_compiler.native_arch = MP_NATIVE_ARCH_RV64IMC;
+ mp_dynamic_compiler.nlr_buf_num_regs = MICROPY_NLR_NUM_REGS_RV64I;
#else
mp_printf(&mp_stderr_print, "unable to determine host architecture for -march=host\n");
exit(1);
diff --git a/mpy-cross/mpy_cross/__init__.py b/mpy-cross/mpy_cross/__init__.py
index 9399aa92f..6d7002a3b 100644
--- a/mpy-cross/mpy_cross/__init__.py
+++ b/mpy-cross/mpy_cross/__init__.py
@@ -43,6 +43,7 @@ NATIVE_ARCHS = {
"NATIVE_ARCH_XTENSA": "xtensa",
"NATIVE_ARCH_XTENSAWIN": "xtensawin",
"NATIVE_ARCH_RV32IMC": "rv32imc",
+ "NATIVE_ARCH_RV64IMC": "rv64imc",
}
globals().update(NATIVE_ARCHS)
diff --git a/py/persistentcode.h b/py/persistentcode.h
index cf257a7ab..a45d5fd18 100644
--- a/py/persistentcode.h
+++ b/py/persistentcode.h
@@ -98,6 +98,7 @@ enum {
MP_NATIVE_ARCH_XTENSA,
MP_NATIVE_ARCH_XTENSAWIN,
MP_NATIVE_ARCH_RV32IMC,
+ MP_NATIVE_ARCH_RV64IMC,
MP_NATIVE_ARCH_DEBUG, // this entry should always be last
};
diff --git a/tests/feature_check/target_info.py b/tests/feature_check/target_info.py
index 5367eb6a4..35a995a15 100644
--- a/tests/feature_check/target_info.py
+++ b/tests/feature_check/target_info.py
@@ -19,6 +19,7 @@ arch = [
"xtensa",
"xtensawin",
"rv32imc",
+ "rv64imc",
][sys_mpy >> 10]
build = getattr(sys.implementation, "_build", "unknown")
thread = getattr(sys.implementation, "_thread", None)
diff --git a/tools/mpy-tool.py b/tools/mpy-tool.py
index c87c656ff..df918e153 100755
--- a/tools/mpy-tool.py
+++ b/tools/mpy-tool.py
@@ -94,6 +94,7 @@ MP_NATIVE_ARCH_ARMV7EMDP = 8
MP_NATIVE_ARCH_XTENSA = 9
MP_NATIVE_ARCH_XTENSAWIN = 10
MP_NATIVE_ARCH_RV32IMC = 11
+MP_NATIVE_ARCH_RV64IMC = 12
MP_PERSISTENT_OBJ_FUN_TABLE = 0
MP_PERSISTENT_OBJ_NONE = 1
@@ -1061,6 +1062,7 @@ class RawCodeNative(RawCode):
MP_NATIVE_ARCH_XTENSA,
MP_NATIVE_ARCH_XTENSAWIN,
MP_NATIVE_ARCH_RV32IMC,
+ MP_NATIVE_ARCH_RV64IMC,
):
self.fun_data_attributes = '__attribute__((section(".text,\\"ax\\",@progbits # ")))'
else:
@@ -1078,8 +1080,8 @@ class RawCodeNative(RawCode):
self.fun_data_attributes += " __attribute__ ((aligned (4)))"
elif (
MP_NATIVE_ARCH_ARMV6M <= config.native_arch <= MP_NATIVE_ARCH_ARMV7EMDP
- ) or config.native_arch == MP_NATIVE_ARCH_RV32IMC:
- # ARMVxxM or RV32IMC -- two byte align.
+ ) or MP_NATIVE_ARCH_RV32IMC <= config.native_arch <= MP_NATIVE_ARCH_RV64IMC:
+ # ARMVxxM or RV{32,64}IMC -- two byte align.
self.fun_data_attributes += " __attribute__ ((aligned (2)))"
def disassemble(self):