Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
7efcdd9
add floating point benchmarks (and expose hardware/systick.h via pico…
kilograham Mar 11, 2026
093ef95
clean up pico_float and pico_double headers some more, and add prepro…
kilograham Mar 11, 2026
1e891bc
disable float benchmarks on RISC-V builds for now as they use systick…
kilograham Mar 11, 2026
f1415c7
fix compiler warning
kilograham Mar 11, 2026
9b07ea1
handle google llvm-libc missing functions in benchmarks
kilograham Mar 11, 2026
d515d4a
more minor test fixups to pass on all platforms
kilograham Mar 11, 2026
c850cb4
review fixes
kilograham Mar 16, 2026
90f89d3
exclue benchmarks from bazel build
kilograham Mar 16, 2026
190badc
update benchmarks to use new PICO_FLOAT/DOOUBLE_HAS defines
kilograham Mar 16, 2026
e1f344f
make use of the (u)fix2float/double_N macros in the custom_float/doub…
kilograham Mar 16, 2026
60cc670
clean up pico/float.h and pico/double.h somre more and add documentat…
kilograham Mar 17, 2026
fdb1d12
fix PICO_CONFIG
kilograham Mar 18, 2026
fda0e33
oops - carried away with copy/paste; there is no LIB_PICO_DOUBLE_PICO…
kilograham Mar 18, 2026
0e0adb9
oops
kilograham Mar 18, 2026
c926b27
fix typo
kilograham Mar 18, 2026
5460750
fix typo
kilograham Mar 18, 2026
49f94fc
fix typo
kilograham Mar 18, 2026
b933570
Comment fixes
kilograham Mar 19, 2026
07d05ca
code review fixes
kilograham Mar 19, 2026
48fd5fa
more code review fixes
kilograham Mar 19, 2026
382b3e3
Apply suggestions from code review
kilograham Mar 19, 2026
042feb9
cleanup suggestion mess
kilograham Mar 19, 2026
47abb00
oops
kilograham Mar 24, 2026
8981da8
fix typo
kilograham Mar 24, 2026
c4c5ba1
minor fix
kilograham Mar 24, 2026
58d305d
expand allowed range for fma for older GCC
kilograham Mar 18, 2026
e123e86
remove spurious newlines
kilograham Mar 24, 2026
9046fee
removed float.h include from double.h
kilograham Mar 24, 2026
e03aceb
add sqrtf_fast and fdiv_fast to pico_float_test
kilograham Mar 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/Doxyfile.in
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ PREDEFINED = __not_in_flash_func(x)= \
__no_inline_not_in_flash(x)= \
__attribute__(x)= \
DOXYGEN_GENERATION= \
PICO_DOCS=1 \
@DOXY_PREDEFINED@

ENABLED_SECTIONS = @DOXY_ENABLED_SECTIONS@
1 change: 1 addition & 0 deletions src/rp2040/pico_platform/include/pico/platform/cpu_regs.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#define arm_cpu_hw m0plus_hw
#include "hardware/structs/nvic.h"
#include "hardware/structs/scb.h"
#include "hardware/structs/systick.h"
#endif

#endif
1 change: 1 addition & 0 deletions src/rp2350/pico_platform/include/pico/platform/cpu_regs.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#define arm_cpu_hw m33_hw
#include "hardware/structs/nvic.h"
#include "hardware/structs/scb.h"
#include "hardware/structs/systick.h"
#endif
#endif
#endif
147 changes: 81 additions & 66 deletions src/rp2_common/pico_double/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,68 +23,84 @@ if (NOT TARGET pico_double)
$<IF:$<BOOL:$<TARGET_PROPERTY:PICO_TARGET_DOUBLE_IMPL>>,$<TARGET_PROPERTY:PICO_TARGET_DOUBLE_IMPL>,${PICO_DEFAULT_DOUBLE_IMPL}>)

function(wrap_double_functions TARGET)
pico_wrap_function(${TARGET} __aeabi_dadd)
pico_wrap_function(${TARGET} __aeabi_ddiv)
pico_wrap_function(${TARGET} __aeabi_dmul)
pico_wrap_function(${TARGET} __aeabi_drsub)
pico_wrap_function(${TARGET} __aeabi_dsub)
pico_wrap_function(${TARGET} __aeabi_cdcmpeq)
pico_wrap_function(${TARGET} __aeabi_cdrcmple)
pico_wrap_function(${TARGET} __aeabi_cdcmple)
pico_wrap_function(${TARGET} __aeabi_dcmpeq)
pico_wrap_function(${TARGET} __aeabi_dcmplt)
pico_wrap_function(${TARGET} __aeabi_dcmple)
pico_wrap_function(${TARGET} __aeabi_dcmpge)
pico_wrap_function(${TARGET} __aeabi_dcmpgt)
pico_wrap_function(${TARGET} __aeabi_dcmpun)
pico_wrap_function(${TARGET} __aeabi_i2d)
pico_wrap_function(${TARGET} __aeabi_l2d)
pico_wrap_function(${TARGET} __aeabi_ui2d)
pico_wrap_function(${TARGET} __aeabi_ul2d)
pico_wrap_function(${TARGET} __aeabi_d2iz)
pico_wrap_function(${TARGET} __aeabi_d2lz)
pico_wrap_function(${TARGET} __aeabi_d2uiz)
pico_wrap_function(${TARGET} __aeabi_d2ulz)
pico_wrap_function(${TARGET} __aeabi_d2f)
pico_wrap_function(${TARGET} sqrt)
pico_wrap_function(${TARGET} cos)
pico_wrap_function(${TARGET} sin)
pico_wrap_function(${TARGET} tan)
pico_wrap_function(${TARGET} atan2)
pico_wrap_function(${TARGET} exp)
pico_wrap_function(${TARGET} log)

pico_wrap_function(${TARGET} ldexp)
pico_wrap_function(${TARGET} copysign)
pico_wrap_function(${TARGET} trunc)
pico_wrap_function(${TARGET} floor)
pico_wrap_function(${TARGET} ceil)
pico_wrap_function(${TARGET} round)
pico_wrap_function(${TARGET} sincos) # gnu
pico_wrap_function(${TARGET} asin)
pico_wrap_function(${TARGET} acos)
pico_wrap_function(${TARGET} atan)
pico_wrap_function(${TARGET} sinh)
pico_wrap_function(${TARGET} cosh)
pico_wrap_function(${TARGET} tanh)
pico_wrap_function(${TARGET} asinh)
pico_wrap_function(${TARGET} acosh)
pico_wrap_function(${TARGET} atanh)
pico_wrap_function(${TARGET} exp2)
pico_wrap_function(${TARGET} log2)
pico_wrap_function(${TARGET} exp10)
pico_wrap_function(${TARGET} log10)
pico_wrap_function(${TARGET} pow)
pico_wrap_function(${TARGET} powint) #gnu
pico_wrap_function(${TARGET} hypot)
pico_wrap_function(${TARGET} cbrt)
pico_wrap_function(${TARGET} fmod)
pico_wrap_function(${TARGET} drem)
pico_wrap_function(${TARGET} remainder)
pico_wrap_function(${TARGET} remquo)
pico_wrap_function(${TARGET} expm1)
pico_wrap_function(${TARGET} log1p)
pico_wrap_function(${TARGET} fma)
cmake_parse_arguments(WRAP_DOUBLE "NO_AEABI_ARITHMETIC;NO_AEABI_CMP;NO_AEABI_CONV_32;NO_AEABI_CONV_64;NO_AEABI_CONV_FLOAT;NO_SQRT;NO_SCI;NO_SCI_EXTRA" "" "" ${ARGN} )
if (NOT WRAP_DOUBLE_NO_AEABI_ARITHMETIC)
pico_wrap_function(${TARGET} __aeabi_dadd)
pico_wrap_function(${TARGET} __aeabi_ddiv)
pico_wrap_function(${TARGET} __aeabi_dmul)
pico_wrap_function(${TARGET} __aeabi_drsub)
pico_wrap_function(${TARGET} __aeabi_dsub)
endif()
if (NOT WRAP_DOUBLE_NO_AEABI_CMP)
pico_wrap_function(${TARGET} __aeabi_cdcmpeq)
pico_wrap_function(${TARGET} __aeabi_cdrcmple)
pico_wrap_function(${TARGET} __aeabi_cdcmple)
pico_wrap_function(${TARGET} __aeabi_dcmpeq)
pico_wrap_function(${TARGET} __aeabi_dcmplt)
pico_wrap_function(${TARGET} __aeabi_dcmple)
pico_wrap_function(${TARGET} __aeabi_dcmpge)
pico_wrap_function(${TARGET} __aeabi_dcmpgt)
pico_wrap_function(${TARGET} __aeabi_dcmpun)
endif()
if (NOT WRAP_DOUBLE_NO_AEABI_CONV_32)
pico_wrap_function(${TARGET} __aeabi_i2d)
pico_wrap_function(${TARGET} __aeabi_ui2d)
pico_wrap_function(${TARGET} __aeabi_d2iz)
pico_wrap_function(${TARGET} __aeabi_d2uiz)
endif()
if (NOT WRAP_DOUBLE_NO_AEABI_CONV_64)
pico_wrap_function(${TARGET} __aeabi_l2d)
pico_wrap_function(${TARGET} __aeabi_ul2d)
pico_wrap_function(${TARGET} __aeabi_d2lz)
pico_wrap_function(${TARGET} __aeabi_d2ulz)
endif()
if (NOT WRAP_DOUBLE_NO_AEABI_CONV_FLOAT)
pico_wrap_function(${TARGET} __aeabi_d2f)
endif()
if (NOT WRAP_DOUBLE_NO_SQRT)
pico_wrap_function(${TARGET} sqrt)
endif()
if (NOT WRAP_DOUBLE_NO_SCI)
pico_wrap_function(${TARGET} cos)
pico_wrap_function(${TARGET} sin)
pico_wrap_function(${TARGET} tan)
pico_wrap_function(${TARGET} atan2)
pico_wrap_function(${TARGET} exp)
pico_wrap_function(${TARGET} log)
endif()
if (NOT WRAP_DOUBLE_NO_SCI_EXTRA)
pico_wrap_function(${TARGET} ldexp)
pico_wrap_function(${TARGET} copysign)
pico_wrap_function(${TARGET} trunc)
pico_wrap_function(${TARGET} floor)
pico_wrap_function(${TARGET} ceil)
pico_wrap_function(${TARGET} round)
pico_wrap_function(${TARGET} sincos) # gnu
pico_wrap_function(${TARGET} asin)
pico_wrap_function(${TARGET} acos)
pico_wrap_function(${TARGET} atan)
pico_wrap_function(${TARGET} sinh)
pico_wrap_function(${TARGET} cosh)
pico_wrap_function(${TARGET} tanh)
pico_wrap_function(${TARGET} asinh)
pico_wrap_function(${TARGET} acosh)
pico_wrap_function(${TARGET} atanh)
pico_wrap_function(${TARGET} exp2)
pico_wrap_function(${TARGET} log2)
pico_wrap_function(${TARGET} exp10)
pico_wrap_function(${TARGET} log10)
pico_wrap_function(${TARGET} pow)
pico_wrap_function(${TARGET} powint) #gnu
pico_wrap_function(${TARGET} hypot)
pico_wrap_function(${TARGET} cbrt)
pico_wrap_function(${TARGET} fmod)
pico_wrap_function(${TARGET} drem)
pico_wrap_function(${TARGET} remainder)
pico_wrap_function(${TARGET} remquo)
pico_wrap_function(${TARGET} expm1)
pico_wrap_function(${TARGET} log1p)
pico_wrap_function(${TARGET} fma)
endif()
endfunction()

pico_add_library(pico_double_pico)
Expand All @@ -96,8 +112,8 @@ if (NOT TARGET pico_double)
${CMAKE_CURRENT_LIST_DIR}/double_v1_rom_shim_rp2040.S
)
target_link_libraries(pico_double_pico INTERFACE pico_bootrom pico_double_headers hardware_divider)
wrap_double_functions(pico_double_pico)
elseif(NOT PICO_RISCV)
wrap_double_functions(pico_double_pico) # wrap everything
elseif(PICO_RP2350 AND NOT PICO_RISCV)
pico_add_library(pico_double_pico_dcp)
target_sources(pico_double_pico_dcp INTERFACE
${CMAKE_CURRENT_LIST_DIR}/double_math.c
Expand All @@ -107,11 +123,10 @@ if (NOT TARGET pico_double)
${CMAKE_CURRENT_LIST_DIR}/double_conv_m33.S
)
target_link_libraries(pico_double_pico_dcp INTERFACE pico_double_headers)
wrap_double_functions(pico_double_pico_dcp)
wrap_double_functions(pico_double_pico_dcp) #wrap everything
target_link_libraries(pico_double_pico INTERFACE pico_double_pico_dcp)
endif()


pico_add_library(pico_double_none)
target_sources(pico_double_none INTERFACE
${CMAKE_CURRENT_LIST_DIR}/double_none.S
Expand Down
1 change: 1 addition & 0 deletions src/rp2_common/pico_double/double_aeabi_dcp.S
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
*/

#include "pico/asm_helper.S"
#include "pico/double.h"

#if !HAS_DOUBLE_COPROCESSOR
#error attempt to compile double_aeabi_dcp when there is no DCP
Expand Down
1 change: 1 addition & 0 deletions src/rp2_common/pico_double/double_aeabi_rp2040.S
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#if PICO_RP2040
#include "pico/asm_helper.S"
#include "pico/runtime_init.h"
#include "pico/double.h"
#include "pico/bootrom/sf_table.h"
#include "hardware/divider_helper.S"

Expand Down
1 change: 1 addition & 0 deletions src/rp2_common/pico_double/double_conv_m33.S
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
*/

#include "pico/asm_helper.S"
#include "pico/double.h"

pico_default_asm_setup

Expand Down
1 change: 1 addition & 0 deletions src/rp2_common/pico_double/double_fma_dcp.S
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
*/

#include "pico/asm_helper.S"
#include "pico/double.h"

#if !HAS_DOUBLE_COPROCESSOR
#error attempt to compile double_fma_rp2350 when there is no DCP
Expand Down
1 change: 1 addition & 0 deletions src/rp2_common/pico_double/double_init_rom_rp2040.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

#include <string.h>
#include "pico/bootrom.h"
#include "pico/double.h"
#include "pico/bootrom/sf_table.h"

// NOTE THIS FUNCTION TABLE IS NOT PUBLIC OR NECESSARILY COMPLETE...
Expand Down
1 change: 1 addition & 0 deletions src/rp2_common/pico_double/double_none.S
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
*/

#include "pico/asm_helper.S"
#include "pico/double.h"
#include "pico/bootrom/sf_table.h"

pico_default_asm_setup
Expand Down
1 change: 1 addition & 0 deletions src/rp2_common/pico_double/double_sci_m33.S
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

#if !PICO_RP2040
#include "pico/asm_helper.S"
#include "pico/double.h"

pico_default_asm_setup

Expand Down
1 change: 1 addition & 0 deletions src/rp2_common/pico_double/double_v1_rom_shim_rp2040.S
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
*/

#include "pico/asm_helper.S"
#include "pico/double.h"

pico_default_asm_setup

Expand Down
Loading
Loading