diff --git a/qemu-arm/Makefile b/qemu-arm/Makefile
index 9159f97e54488248aa7339cf65e9d84ec378cd5d..0af2fc901c4692e35f150eb1f50fe12d1ae9b775 100644
--- a/qemu-arm/Makefile
+++ b/qemu-arm/Makefile
@@ -14,9 +14,9 @@ INC += -I..
 INC += -I$(BUILD)
 INC += -I../tools/tinytest/
 
-CFLAGS_CORTEX_M3 = -mthumb -mcpu=cortex-m3
+CFLAGS_CORTEX_M3 = -mthumb -mcpu=cortex-m3 -mfloat-abi=soft
 CFLAGS = $(INC) -Wall -Wpointer-arith -Werror -ansi -std=gnu99 $(CFLAGS_CORTEX_M3) $(COPT) \
-	 -flto -ffunction-sections -fdata-sections
+	 -ffunction-sections -fdata-sections
 
 #Debugging/Optimization
 ifeq ($(DEBUG), 1)
@@ -40,6 +40,27 @@ SRC_C = \
 SRC_TEST_C = \
 	test_main.c \
 
+LIB_SRC_C = $(addprefix lib/,\
+	libm/math.c \
+	libm/fmodf.c \
+	libm/roundf.c \
+	libm/ef_sqrt.c \
+	libm/kf_rem_pio2.c \
+	libm/kf_sin.c \
+	libm/kf_cos.c \
+	libm/kf_tan.c \
+	libm/ef_rem_pio2.c \
+	libm/sf_sin.c \
+	libm/sf_cos.c \
+	libm/sf_tan.c \
+	libm/sf_frexp.c \
+	libm/sf_modf.c \
+	libm/sf_ldexp.c \
+	libm/asinfacosf.c \
+	libm/atanf.c \
+	libm/atan2f.c \
+	)
+
 STM_SRC_C = $(addprefix stmhal/,\
 	pybstdio.c \
 	)
@@ -50,12 +71,14 @@ OBJ =
 OBJ += $(PY_O)
 OBJ += $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
 OBJ += $(addprefix $(BUILD)/, $(SRC_S:.s=.o))
+OBJ += $(addprefix $(BUILD)/, $(LIB_SRC_C:.c=.o))
 OBJ += $(addprefix $(BUILD)/, $(STM_SRC_C:.c=.o))
 
 OBJ_TEST =
 OBJ_TEST += $(PY_O)
 OBJ_TEST += $(addprefix $(BUILD)/, $(SRC_TEST_C:.c=.o))
 OBJ_TEST += $(addprefix $(BUILD)/, $(SRC_S:.s=.o))
+OBJ_TEST += $(addprefix $(BUILD)/, $(LIB_SRC_C:.c=.o))
 OBJ_TEST += $(addprefix $(BUILD)/, $(STM_SRC_C:.c=.o))
 OBJ_TEST += $(BUILD)/tinytest.o
 
diff --git a/qemu-arm/mpconfigport.h b/qemu-arm/mpconfigport.h
index 2b8ae855ad7314d00f8117dfaf2109e9ea44f795..8ee9cdc4bbd47b564747fdc87d884ae5f41c7a5d 100644
--- a/qemu-arm/mpconfigport.h
+++ b/qemu-arm/mpconfigport.h
@@ -14,7 +14,7 @@
 #define MICROPY_HELPER_LEXER_UNIX   (0)
 #define MICROPY_ENABLE_SOURCE_LINE  (1)
 #define MICROPY_LONGINT_IMPL        (MICROPY_LONGINT_IMPL_MPZ)
-#define MICROPY_FLOAT_IMPL          (MICROPY_FLOAT_IMPL_NONE)
+#define MICROPY_FLOAT_IMPL          (MICROPY_FLOAT_IMPL_FLOAT)
 #define MICROPY_CAN_OVERRIDE_BUILTINS (1)
 #define MICROPY_PY_ALL_SPECIAL_METHODS (1)
 #define MICROPY_PY_ARRAY_SLICE_ASSIGN (1)
diff --git a/tools/tinytest-codegen.py b/tools/tinytest-codegen.py
index c4198832a7a5171bb4947d6ca80ab33cd221cd19..8e505f21a1bc99baf7b9b8fac71942508a5a5e0c 100755
--- a/tools/tinytest-codegen.py
+++ b/tools/tinytest-codegen.py
@@ -46,12 +46,11 @@ testgroup_member = (
 
 ## XXX: may be we could have `--without <groups>` argument...
 # currently these tests are selected because they pass on qemu-arm
-test_dirs = ('basics', 'micropython', 'extmod', 'inlineasm') # 'float', 'import', 'io', 'misc')
+test_dirs = ('basics', 'micropython', 'float', 'extmod', 'inlineasm') # 'import', 'io', 'misc')
 exclude_tests = (
+    'float/float2int_doubleprec.py', # requires double precision floating point to work
     'inlineasm/asmfpaddsub.py', 'inlineasm/asmfpcmp.py', 'inlineasm/asmfpldrstr.py', 'inlineasm/asmfpmuldiv.py', 'inlineasm/asmfpsqrt.py',
     'extmod/ticks_diff.py', 'extmod/time_ms_us.py',
-    'extmod/ujson_dumps_float.py', 'extmod/ujson_loads_float.py',
-    'extmod/uctypes_native_float.py', 'extmod/uctypes_le_float.py',
     'extmod/machine_pinbase.py', 'extmod/machine_pulse.py',
     'extmod/vfs_fat_ramdisk.py', 'extmod/vfs_fat_fileio.py', 'extmod/vfs_fat_fsusermount.py', 'extmod/vfs_fat_oldproto.py',
 )