@@ -196,6 +196,73 @@ set(PICO_SDK_COMPONENTS
196
196
tinyusb_device
197
197
)
198
198
199
+ # Use our custom pico_float_micropython float implementation. This is needed for two reasons:
200
+ # - to fix inf handling in pico-sdk's __wrap___aeabi_fadd();
201
+ # - so we can use our own libm functions, to fix inaccuracies in the pico-sdk versions.
202
+ pico_set_float_implementation(${MICROPY_TARGET} micropython)
203
+
204
+ # Define our custom pico_float_micropython component.
205
+ pico_add_library(pico_float_micropython)
206
+
207
+ # pico_float_micropython: add pico-sdk float and our libm source files.
208
+ target_sources (pico_float_micropython INTERFACE
209
+ ${PICO_SDK_PATH} /src/rp2_common/pico_float/float_aeabi.S
210
+ ${PICO_SDK_PATH} /src/rp2_common/pico_float/float_init_rom.c
211
+ ${PICO_SDK_PATH} /src/rp2_common/pico_float/float_v1_rom_shim.S
212
+ ${MICROPY_DIR} /lib/libm/math.c
213
+ ${MICROPY_DIR} /lib/libm/acoshf.c
214
+ ${MICROPY_DIR} /lib/libm/asinfacosf.c
215
+ ${MICROPY_DIR} /lib/libm/asinhf.c
216
+ ${MICROPY_DIR} /lib/libm/atan2f.c
217
+ ${MICROPY_DIR} /lib/libm/atanf.c
218
+ ${MICROPY_DIR} /lib/libm/atanhf.c
219
+ ${MICROPY_DIR} /lib/libm/ef_rem_pio2.c
220
+ ${MICROPY_DIR} /lib/libm/ef_sqrt.c
221
+ ${MICROPY_DIR} /lib/libm/erf_lgamma.c
222
+ ${MICROPY_DIR} /lib/libm/fmodf.c
223
+ ${MICROPY_DIR} /lib/libm/kf_cos.c
224
+ ${MICROPY_DIR} /lib/libm/kf_rem_pio2.c
225
+ ${MICROPY_DIR} /lib/libm/kf_sin.c
226
+ ${MICROPY_DIR} /lib/libm/kf_tan.c
227
+ ${MICROPY_DIR} /lib/libm/log1pf.c
228
+ ${MICROPY_DIR} /lib/libm/nearbyintf.c
229
+ ${MICROPY_DIR} /lib/libm/roundf.c
230
+ ${MICROPY_DIR} /lib/libm/sf_cos.c
231
+ ${MICROPY_DIR} /lib/libm/sf_erf.c
232
+ ${MICROPY_DIR} /lib/libm/sf_frexp.c
233
+ ${MICROPY_DIR} /lib/libm/sf_ldexp.c
234
+ ${MICROPY_DIR} /lib/libm/sf_modf.c
235
+ ${MICROPY_DIR} /lib/libm/sf_sin.c
236
+ ${MICROPY_DIR} /lib/libm/sf_tan.c
237
+ ${MICROPY_DIR} /lib/libm/wf_lgamma.c
238
+ ${MICROPY_DIR} /lib/libm/wf_tgamma.c
239
+ ${MICROPY_PORT_DIR} /libm_extra.c
240
+ )
241
+
242
+ # pico_float_micropython: wrap low-level floating-point ops, to call the pico-sdk versions.
243
+ pico_wrap_function(pico_float_micropython __aeabi_fdiv)
244
+ pico_wrap_function(pico_float_micropython __aeabi_fmul)
245
+ pico_wrap_function(pico_float_micropython __aeabi_frsub)
246
+ pico_wrap_function(pico_float_micropython __aeabi_fsub)
247
+ pico_wrap_function(pico_float_micropython __aeabi_cfcmpeq)
248
+ pico_wrap_function(pico_float_micropython __aeabi_cfrcmple)
249
+ pico_wrap_function(pico_float_micropython __aeabi_cfcmple)
250
+ pico_wrap_function(pico_float_micropython __aeabi_fcmpeq)
251
+ pico_wrap_function(pico_float_micropython __aeabi_fcmplt)
252
+ pico_wrap_function(pico_float_micropython __aeabi_fcmple)
253
+ pico_wrap_function(pico_float_micropython __aeabi_fcmpge)
254
+ pico_wrap_function(pico_float_micropython __aeabi_fcmpgt)
255
+ pico_wrap_function(pico_float_micropython __aeabi_fcmpun)
256
+ pico_wrap_function(pico_float_micropython __aeabi_i2f)
257
+ pico_wrap_function(pico_float_micropython __aeabi_l2f)
258
+ pico_wrap_function(pico_float_micropython __aeabi_ui2f)
259
+ pico_wrap_function(pico_float_micropython __aeabi_ul2f)
260
+ pico_wrap_function(pico_float_micropython __aeabi_f2iz)
261
+ pico_wrap_function(pico_float_micropython __aeabi_f2lz)
262
+ pico_wrap_function(pico_float_micropython __aeabi_f2uiz)
263
+ pico_wrap_function(pico_float_micropython __aeabi_f2ulz)
264
+ pico_wrap_function(pico_float_micropython __aeabi_f2d)
265
+
199
266
if (MICROPY_PY_LWIP)
200
267
target_link_libraries (${MICROPY_TARGET} micropy_lib_lwip)
201
268
0 commit comments