diff --git a/ports/qemu-arm/mpconfigport.h b/ports/qemu-arm/mpconfigport.h
index a12165a92a223e78e46fcc7794a20caea6b1a141..51706b92771a47007e8b614ac67ac9f60e3e3073 100644
--- a/ports/qemu-arm/mpconfigport.h
+++ b/ports/qemu-arm/mpconfigport.h
@@ -18,6 +18,7 @@
 #define MICROPY_FLOAT_IMPL          (MICROPY_FLOAT_IMPL_FLOAT)
 #define MICROPY_CAN_OVERRIDE_BUILTINS (1)
 #define MICROPY_PY_ALL_SPECIAL_METHODS (1)
+#define MICROPY_PY_REVERSE_SPECIAL_METHODS (1)
 #define MICROPY_PY_ARRAY_SLICE_ASSIGN (1)
 #define MICROPY_PY_BUILTINS_FROZENSET (1)
 #define MICROPY_PY_BUILTINS_MEMORYVIEW (1)
diff --git a/tests/basics/class_reverse_op.py b/tests/basics/class_reverse_op.py
new file mode 100644
index 0000000000000000000000000000000000000000..d41c55c9d764e69381ea651b6e716fe129d1aefd
--- /dev/null
+++ b/tests/basics/class_reverse_op.py
@@ -0,0 +1,18 @@
+class A:
+
+    def __init__(self, v):
+        self.v = v
+
+    def __add__(self, o):
+        if isinstance(o, A):
+            return A(self.v + o.v)
+        return A(self.v + o)
+
+    def __radd__(self, o):
+        return A(self.v + o)
+
+    def __repr__(self):
+        return "A(%s)" % self.v
+
+print(A(3) + 1)
+print(2 + A(5))
diff --git a/tests/feature_check/reverse_ops.py b/tests/feature_check/reverse_ops.py
new file mode 100644
index 0000000000000000000000000000000000000000..668748bc5742f4d7454030cfd5fe04788237d351
--- /dev/null
+++ b/tests/feature_check/reverse_ops.py
@@ -0,0 +1,9 @@
+class Foo:
+
+    def __radd__(self, other):
+        pass
+
+try:
+    5 + Foo()
+except TypeError:
+    print("TypeError")
diff --git a/tests/feature_check/reverse_ops.py.exp b/tests/feature_check/reverse_ops.py.exp
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/tests/run-tests b/tests/run-tests
index 14df1e986d1d9fc11973baacce9e7a18941487e7..c9f9efe77dea4deee1ecf37e43fefa34c666a0e9 100755
--- a/tests/run-tests
+++ b/tests/run-tests
@@ -207,6 +207,7 @@ def run_tests(pyb, tests, args, base_path="."):
     skip_set_type = False
     skip_async = False
     skip_const = False
+    skip_revops = False
 
     # Check if micropython.native is supported, and skip such tests if it's not
     native = run_feature_check(pyb, args, base_path, 'native_check.py')
@@ -233,6 +234,11 @@ def run_tests(pyb, tests, args, base_path="."):
     if native == b'CRASH':
         skip_const = True
 
+    # Check if __rOP__ special methods are supported, and skip such tests if it's not
+    native = run_feature_check(pyb, args, base_path, 'reverse_ops.py')
+    if native == b'TypeError\n':
+        skip_revops = True
+
     # Check if emacs repl is supported, and skip such tests if it's not
     t = run_feature_check(pyb, args, base_path, 'repl_emacs_check.py')
     if not 'True' in str(t, 'ascii'):
@@ -360,6 +366,7 @@ def run_tests(pyb, tests, args, base_path="."):
         skip_it |= skip_set_type and is_set_type
         skip_it |= skip_async and is_async
         skip_it |= skip_const and is_const
+        skip_it |= skip_revops and test_name.startswith("class_reverse_op")
 
         if skip_it:
             print("skip ", test_file)