summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/qemu/boards/MICROBIT.mk3
-rw-r--r--ports/qemu/boards/MPS2_AN385.mk3
-rw-r--r--ports/qemu/boards/NETDUINO2.mk3
-rw-r--r--ports/qemu/boards/SABRELITE.mk2
-rw-r--r--ports/qemu/boards/VIRT_RV32.mk3
-rw-r--r--tests/feature_check/inlineasm_rv32.py9
-rw-r--r--tests/feature_check/inlineasm_rv32.py.exp1
-rw-r--r--tests/feature_check/inlineasm_thumb.py9
-rw-r--r--tests/feature_check/inlineasm_thumb.py.exp1
-rw-r--r--tests/feature_check/inlineasm_xtensa.py9
-rw-r--r--tests/feature_check/inlineasm_xtensa.py.exp1
-rwxr-xr-xtests/run-tests.py60
12 files changed, 68 insertions, 36 deletions
diff --git a/ports/qemu/boards/MICROBIT.mk b/ports/qemu/boards/MICROBIT.mk
index d6cfd7e22..02eb0576c 100644
--- a/ports/qemu/boards/MICROBIT.mk
+++ b/ports/qemu/boards/MICROBIT.mk
@@ -11,6 +11,3 @@ LDSCRIPT = mcu/arm/nrf51.ld
SRC_BOARD_O = shared/runtime/gchelper_native.o shared/runtime/gchelper_thumb1.o
MPY_CROSS_FLAGS += -march=armv7m
-
-# These RV32 tests don't run on Thumb, so exclude them.
-RUN_TESTS_ARGS = --exclude 'inlineasm/rv32'
diff --git a/ports/qemu/boards/MPS2_AN385.mk b/ports/qemu/boards/MPS2_AN385.mk
index 8d5c27df5..182d076eb 100644
--- a/ports/qemu/boards/MPS2_AN385.mk
+++ b/ports/qemu/boards/MPS2_AN385.mk
@@ -10,6 +10,3 @@ LDSCRIPT = mcu/arm/mps2.ld
SRC_BOARD_O = shared/runtime/gchelper_native.o shared/runtime/gchelper_thumb2.o
MPY_CROSS_FLAGS += -march=armv7m
-
-# These RV32 tests don't run on Thumb, so exclude them.
-RUN_TESTS_ARGS = --exclude 'inlineasm/rv32'
diff --git a/ports/qemu/boards/NETDUINO2.mk b/ports/qemu/boards/NETDUINO2.mk
index f88ea32e7..ffa781f33 100644
--- a/ports/qemu/boards/NETDUINO2.mk
+++ b/ports/qemu/boards/NETDUINO2.mk
@@ -10,6 +10,3 @@ LDSCRIPT = mcu/arm/stm32.ld
SRC_BOARD_O = shared/runtime/gchelper_native.o shared/runtime/gchelper_thumb2.o
MPY_CROSS_FLAGS += -march=armv7m
-
-# These RV32 tests don't run on Thumb, so exclude them.
-RUN_TESTS_ARGS = --exclude 'inlineasm/rv32'
diff --git a/ports/qemu/boards/SABRELITE.mk b/ports/qemu/boards/SABRELITE.mk
index d3f4e14d4..839b3d6ac 100644
--- a/ports/qemu/boards/SABRELITE.mk
+++ b/ports/qemu/boards/SABRELITE.mk
@@ -16,4 +16,4 @@ SRC_BOARD_O = shared/runtime/gchelper_generic.o
MPY_CROSS_FLAGS += -march=armv6
# These tests don't work on Cortex-A9, so exclude them.
-RUN_TESTS_ARGS = --exclude 'inlineasm/rv32|inlineasm/thumb/(asmdiv|asmspecialregs).py'
+RUN_TESTS_ARGS = --exclude 'inlineasm/thumb/(asmdiv|asmspecialregs).py'
diff --git a/ports/qemu/boards/VIRT_RV32.mk b/ports/qemu/boards/VIRT_RV32.mk
index 80dd5d56f..dd9264800 100644
--- a/ports/qemu/boards/VIRT_RV32.mk
+++ b/ports/qemu/boards/VIRT_RV32.mk
@@ -10,7 +10,4 @@ SRC_BOARD_O += shared/runtime/gchelper_native.o shared/runtime/gchelper_rv32i.o
MPY_CROSS_FLAGS += -march=rv32imc
-# These Thumb tests don't run on RV32, so exclude them.
-RUN_TESTS_ARGS = --exclude 'inlineasm/thumb'
-
RUN_NATMODTESTS_ARGS = --arch rv32imc
diff --git a/tests/feature_check/inlineasm_rv32.py b/tests/feature_check/inlineasm_rv32.py
new file mode 100644
index 000000000..21dd103b6
--- /dev/null
+++ b/tests/feature_check/inlineasm_rv32.py
@@ -0,0 +1,9 @@
+# check if RISC-V 32 inline asm is supported
+
+
+@micropython.asm_rv32
+def f():
+ add(a0, a0, a0)
+
+
+print("rv32")
diff --git a/tests/feature_check/inlineasm_rv32.py.exp b/tests/feature_check/inlineasm_rv32.py.exp
new file mode 100644
index 000000000..5eecf09c2
--- /dev/null
+++ b/tests/feature_check/inlineasm_rv32.py.exp
@@ -0,0 +1 @@
+rv32
diff --git a/tests/feature_check/inlineasm_thumb.py b/tests/feature_check/inlineasm_thumb.py
new file mode 100644
index 000000000..321eab0e2
--- /dev/null
+++ b/tests/feature_check/inlineasm_thumb.py
@@ -0,0 +1,9 @@
+# check if Thumb inline asm is supported
+
+
+@micropython.asm_thumb
+def f():
+ nop()
+
+
+print("thumb")
diff --git a/tests/feature_check/inlineasm_thumb.py.exp b/tests/feature_check/inlineasm_thumb.py.exp
new file mode 100644
index 000000000..bb48e1a2f
--- /dev/null
+++ b/tests/feature_check/inlineasm_thumb.py.exp
@@ -0,0 +1 @@
+thumb
diff --git a/tests/feature_check/inlineasm_xtensa.py b/tests/feature_check/inlineasm_xtensa.py
new file mode 100644
index 000000000..2a24d3997
--- /dev/null
+++ b/tests/feature_check/inlineasm_xtensa.py
@@ -0,0 +1,9 @@
+# check if Xtensa inline asm is supported
+
+
+@micropython.asm_xtensa
+def f():
+ ret_n()
+
+
+print("xtensa")
diff --git a/tests/feature_check/inlineasm_xtensa.py.exp b/tests/feature_check/inlineasm_xtensa.py.exp
new file mode 100644
index 000000000..036142c50
--- /dev/null
+++ b/tests/feature_check/inlineasm_xtensa.py.exp
@@ -0,0 +1 @@
+xtensa
diff --git a/tests/run-tests.py b/tests/run-tests.py
index db5ebe34c..3dc0df029 100755
--- a/tests/run-tests.py
+++ b/tests/run-tests.py
@@ -232,6 +232,14 @@ def get_test_instance(test_instance, baudrate, user, password):
return pyb
+def detect_inline_asm_arch(pyb, args):
+ for arch in ("rv32", "thumb", "xtensa"):
+ output = run_feature_check(pyb, args, "inlineasm_{}.py".format(arch))
+ if output.strip() == arch.encode():
+ return arch
+ return None
+
+
def detect_test_platform(pyb, args):
# Run a script to detect various bits of information about the target test instance.
output = run_feature_check(pyb, args, "target_info.py")
@@ -240,15 +248,19 @@ def detect_test_platform(pyb, args):
platform, arch = str(output, "ascii").strip().split()
if arch == "None":
arch = None
+ inlineasm_arch = detect_inline_asm_arch(pyb, args)
args.platform = platform
args.arch = arch
if arch and not args.mpy_cross_flags:
args.mpy_cross_flags = "-march=" + arch
+ args.inlineasm_arch = inlineasm_arch
print("platform={}".format(platform), end="")
if arch:
print(" arch={}".format(arch), end="")
+ if inlineasm_arch:
+ print(" inlineasm={}".format(inlineasm_arch), end="")
print()
@@ -601,6 +613,7 @@ def run_tests(pyb, tests, args, result_dir, num_threads=1):
skip_io_module = False
skip_fstring = False
skip_endian = False
+ skip_inlineasm = False
has_complex = True
has_coverage = False
@@ -661,20 +674,21 @@ def run_tests(pyb, tests, args, result_dir, num_threads=1):
if output != b"a=1\n":
skip_fstring = True
- # Check if @micropython.asm_thumb supports Thumb2 instructions, and skip such tests if it doesn't
- output = run_feature_check(pyb, args, "inlineasm_thumb2.py")
- if output != b"thumb2\n":
- skip_tests.add("inlineasm/thumb/asmbcc.py")
- skip_tests.add("inlineasm/thumb/asmbitops.py")
- skip_tests.add("inlineasm/thumb/asmconst.py")
- skip_tests.add("inlineasm/thumb/asmdiv.py")
- skip_tests.add("inlineasm/thumb/asmfpaddsub.py")
- skip_tests.add("inlineasm/thumb/asmfpcmp.py")
- skip_tests.add("inlineasm/thumb/asmfpldrstr.py")
- skip_tests.add("inlineasm/thumb/asmfpmuldiv.py")
- skip_tests.add("inlineasm/thumb/asmfpsqrt.py")
- skip_tests.add("inlineasm/thumb/asmit.py")
- skip_tests.add("inlineasm/thumb/asmspecialregs.py")
+ if args.inlineasm_arch == "thumb":
+ # Check if @micropython.asm_thumb supports Thumb2 instructions, and skip such tests if it doesn't
+ output = run_feature_check(pyb, args, "inlineasm_thumb2.py")
+ if output != b"thumb2\n":
+ skip_tests.add("inlineasm/thumb/asmbcc.py")
+ skip_tests.add("inlineasm/thumb/asmbitops.py")
+ skip_tests.add("inlineasm/thumb/asmconst.py")
+ skip_tests.add("inlineasm/thumb/asmdiv.py")
+ skip_tests.add("inlineasm/thumb/asmfpaddsub.py")
+ skip_tests.add("inlineasm/thumb/asmfpcmp.py")
+ skip_tests.add("inlineasm/thumb/asmfpldrstr.py")
+ skip_tests.add("inlineasm/thumb/asmfpmuldiv.py")
+ skip_tests.add("inlineasm/thumb/asmfpsqrt.py")
+ skip_tests.add("inlineasm/thumb/asmit.py")
+ skip_tests.add("inlineasm/thumb/asmspecialregs.py")
# Check if emacs repl is supported, and skip such tests if it's not
t = run_feature_check(pyb, args, "repl_emacs_check.py")
@@ -699,6 +713,8 @@ def run_tests(pyb, tests, args, result_dir, num_threads=1):
)
skip_endian = upy_byteorder != cpy_byteorder
+ skip_inlineasm = args.inlineasm_arch is None
+
# These tests don't test slice explicitly but rather use it to perform the test
misc_slice_tests = (
"builtin_range",
@@ -852,6 +868,7 @@ def run_tests(pyb, tests, args, result_dir, num_threads=1):
is_const = test_name.startswith("const")
is_io_module = test_name.startswith("io_")
is_fstring = test_name.startswith("string_fstring")
+ is_inlineasm = test_name.startswith("asm")
skip_it = test_file in skip_tests
skip_it |= skip_native and is_native
@@ -865,6 +882,7 @@ def run_tests(pyb, tests, args, result_dir, num_threads=1):
skip_it |= skip_revops and "reverse_op" in test_name
skip_it |= skip_io_module and is_io_module
skip_it |= skip_fstring and is_fstring
+ skip_it |= skip_inlineasm and is_inlineasm
if skip_it:
print("skip ", test_file)
@@ -1213,17 +1231,17 @@ the last matching regex is used:
"misc",
"extmod",
)
+ if args.inlineasm_arch is not None:
+ test_dirs += ("inlineasm/{}".format(args.inlineasm_arch),)
if args.platform == "pyboard":
# run pyboard tests
- test_dirs += ("float", "stress", "inlineasm/thumb", "ports/stm32")
+ test_dirs += ("float", "stress", "ports/stm32")
elif args.platform == "mimxrt":
- test_dirs += ("float", "stress", "inlineasm/thumb")
+ test_dirs += ("float", "stress")
elif args.platform == "renesas-ra":
- test_dirs += ("float", "inlineasm/thumb", "ports/renesas-ra")
+ test_dirs += ("float", "ports/renesas-ra")
elif args.platform == "rp2":
test_dirs += ("float", "stress", "thread", "ports/rp2")
- if "arm" in args.mpy_cross_flags:
- test_dirs += ("inlineasm/thumb",)
elif args.platform == "esp32":
test_dirs += ("float", "stress", "thread")
elif args.platform in ("esp8266", "minimal", "samd", "nrf"):
@@ -1247,10 +1265,6 @@ the last matching regex is used:
"float",
"ports/qemu",
)
- if args.arch == "rv32imc":
- test_dirs += ("inlineasm/rv32",)
- else:
- test_dirs += ("inlineasm/thumb",)
elif args.platform == "webassembly":
test_dirs += ("float", "ports/webassembly")
else: