| Timing of float functions in [ns] | |||||||||
| RP2040-B2 | RP2040-B2 | RP2350-A2 | RP2350-A2 | RP2350-A2 | RP2350-A2 | RP2350-A2 | |||
| function | @125MHz | @125MHz | @150MHz | @150MHz | @150MHz | @150MHz | @150MHz | RISC-V | |
| libc | fast | ARM libc | ARM DCP | ARM DCP+VFP | RISC-V libc | RISC-V fast | speed-up | ||
| sub-normals? | yes | no | yes | no | yes | yes | no | ||
| copysignf | 40 | 40 | 6 | 6 | 6 | 33 | 40 | 0,8 | |
| isintf | 84 | 84 | 41 | 41 | 41 | 50 | 50 | 1,0 | |
| isoddintf | 58 | 59 | 33 | 33 | 33 | 52 | 52 | 1,0 | |
| ispow2f | 87 | 88 | 53 | 53 | 53 | 33 | 33 | 1,0 | |
| ldexpf | 1710 | 125 | 1280 | 64 | 64 | 896 | 85 | 10,5 | |
| fadd | 896 | 577 | 262 | 53 | 33 | 532 | 180 | 3,0 | |
| fsub | 987 | 601 | 265 | 53 | 40 | 552 | 186 | 3,0 | |
| fmul | 1290 | 469 | 291 | 73 | 33 | 793 | 211 | 3,8 | |
| fsqr | 1290 | 479 | 312 | 27 | 27 | 800 | 267 | 3,0 | |
| fdiv | 3580 | 707 | 888 | 133 | 126 | 1270 | 464 | 2,7 | |
| frec | 3680 | 725 | 903 | 127 | 127 | 1320 | 544 | 2,4 | |
| fmodf | 1040 | 334 | 697 | 145 | 145 | 522 | 178 | 2,9 | |
| remquof | 3220 | 519 | 1730 | 249 | 249 | 1710 | 233 | 7,3 | |
| remainderf | 4120 | 612 | 2040 | 273 | 273 | 2410 | 264 | 9,1 | |
| fcmp | 1110 | 180 | 893 | 73 | 73 | 424 | 442 | 1,0 | |
| fcmpeq | 496 | 310 | 433 | 53 | 53 | 167 | 174 | 1,0 | |
| fcmplt | 571 | 310 | 440 | 60 | 60 | 197 | 208 | 0,9 | |
| fcmple | 571 | 314 | 433 | 60 | 60 | 197 | 208 | 0,9 | |
| fcmpge | 570 | 354 | 466 | 60 | 60 | 214 | 205 | 1,0 | |
| fcmpgt | 570 | 350 | 460 | 60 | 60 | 208 | 198 | 1,1 | |
| fcmpun | 128 | 64 | 60 | 53 | 53 | 40 | 40 | 1,0 | |
| int2float | 846 | 346 | 260 | 54 | 54 | 528 | 128 | 4,1 | |
| uint2float | 794 | 329 | 254 | 54 | 54 | 464 | 108 | 4,3 | |
| int642float | 6420 | 474 | 277 | 144 | 144 | 639 | 257 | 2,5 | |
| uint642float | 6200 | 438 | 267 | 114 | 114 | 559 | 250 | 2,2 | |
| fix2float | 2540 | 454 | 1550 | 121 | 121 | 1360 | 221 | 6,2 | |
| ufix2float | 2480 | 445 | 1550 | 94 | 94 | 1290 | 226 | 5,7 | |
| fix642float | 8110 | 445 | 1570 | 136 | 136 | 1470 | 250 | 5,9 | |
| ufix642float | 7890 | 417 | 1560 | 106 | 106 | 1390 | 250 | 5,6 | |
| float2int_z | 251 | 76 | 163 | 54 | 54 | 136 | 53 | 2,6 | |
| float2int | 1350 | 346 | 719 | 40 | 40 | 767 | 196 | 3,9 | |
| float2uint | 10900 | 310 | 2010 | 54 | 54 | 189 | 167 | 1,1 | |
| float2int64_z | 7040 | 419 | 1460 | 110 | 110 | 178 | 286 | 0,6 | |
| float2int64 | 7820 | 376 | 1950 | 176 | 176 | 791 | 254 | 3,1 | |
| float2uint64 | 5690 | 160 | 1180 | 87 | 87 | 304 | 112 | 2,7 | |
| float2fix | 3310 | 339 | 2120 | 189 | 189 | 1800 | 190 | 9,5 | |
| float2ufix | 12400 | 302 | 3400 | 236 | 236 | 1200 | 159 | 7,5 | |
| float2fix64 | 9400 | 368 | 3340 | 314 | 314 | 1860 | 247 | 7,5 | |
| float2ufix64 | 7890 | 154 | 2650 | 81 | 81 | 1300 | 115 | 11,3 | |
| truncf | 139 | 74 | 89 | 40 | 40 | 86 | 55 | 1,6 | |
| roundf | 148 | 85 | 109 | 52 | 52 | 91 | 69 | 1,3 | |
| floorf | 949 | 111 | 487 | 70 | 70 | 579 | 71 | 8,2 | |
| ceilf | 941 | 113 | 462 | 68 | 68 | 553 | 73 | 7,6 | |
| sqrtf | 5880 | 516 | 3470 | 214 | 214 | 3440 | 354 | 9,7 | |
| deg2radf | 1320 | 649 | 304 | 34 | 34 | 820 | 303 | 2,7 | |
| rad2degf | 1320 | 658 | 302 | 34 | 34 | 828 | 297 | 2,8 | |
| sinf | 20300 | 4690 | 6720 | 666 | 387 | 13200 | 736 | 17,9 | |
| sinf_deg | 21600 | 5300 | 7090 | 717 | 441 | 14000 | 680 | 20,6 | |
| cosf | 22100 | 4770 | 7060 | 646 | 365 | 14100 | 766 | 18,4 | |
| cosf_deg | 23800 | 5380 | 7570 | 685 | 425 | 15200 | 699 | 21,7 | |
| sincosf | 43200 | 4770 | 14000 | 940 | 574 | 27600 | 1120 | 24,6 | |
| sincosf_deg | 44000 | 5440 | 14400 | 983 | 622 | 28200 | 1060 | 26,6 | |
| tanf | 40000 | 5410 | 13000 | 1080 | 625 | 25500 | 1610 | 15,8 | |
| tanf_deg | 42200 | 6020 | 13400 | 1120 | 675 | 26300 | 1550 | 17,0 | |
| cotanf | 44400 | 6290 | 14500 | 1280 | 817 | 27500 | 1600 | 17,2 | |
| cotanf_deg | 46500 | 6900 | 14700 | 1320 | 858 | 28000 | 1540 | 18,2 | |
| asinf | 31000 | 7970 | 10200 | 1160 | 764 | 18600 | 542 | 34,3 | |
| asinf_deg | 32100 | 8580 | 10400 | 1260 | 866 | 19300 | 550 | 35,1 | |
| acosf | 31000 | 7820 | 10600 | 1160 | 738 | 19100 | 592 | 32,3 | |
| acosf_deg | 32400 | 8470 | 10800 | 1250 | 840 | 19600 | 578 | 33,9 | |
| atanf | 29400 | 5360 | 8910 | 917 | 525 | 18700 | 998 | 18,7 | |
| atanf_deg | 31000 | 6000 | 9120 | 1010 | 624 | 19500 | 1050 | 18,6 | |
| acotanf | 30700 | 6400 | 9460 | 1090 | 688 | 19400 | 1050 | 18,5 | |
| acotanf_deg | 32200 | 7070 | 9680 | 1180 | 786 | 19900 | 1050 | 19,0 | |
| atan2f | 34400 | 5180 | 10300 | 799 | 458 | 20600 | 1790 | 11,5 | |
| atanf2_deg | 35500 | 5790 | 10500 | 895 | 558 | 21300 | 2080 | 10,2 | |
| sinhf | 36000 | 4730 | 10900 | 496 | 373 | 21200 | 682 | 31,1 | |
| coshf | 33500 | 9460 | 11800 | 1090 | 786 | 19700 | 1410 | 14,0 | |
| tanhf | 35300 | 3170 | 10500 | 339 | 282 | 20500 | 819 | 25,0 | |
| asinhf | 38800 | 4320 | 12700 | 367 | 302 | 23000 | 1080 | 21,3 | |
| acoshf | 44900 | 10100 | 16200 | 711 | 590 | 26700 | 2630 | 10,2 | |
| atanhf | 37800 | 2720 | 11700 | 260 | 206 | 22600 | 677 | 33,4 | |
| expf | 23700 | 4240 | 8010 | 311 | 280 | 13700 | 467 | 29,3 | |
| exp2f | 78600 | 4860 | 23100 | 352 | 325 | 47100 | 433 | 108,8 | |
| exp10f | 97200 | 4860 | 34300 | 352 | 327 | 60500 | 530 | 114,2 | |
| logf | 23500 | 6220 | 7590 | 444 | 307 | 13800 | 617 | 22,4 | |
| log2f | 26700 | 6850 | 8940 | 544 | 407 | 15500 | 650 | 23,8 | |
| log10f | 26300 | 6860 | 8820 | 543 | 407 | 16400 | 676 | 24,3 | |
| expm1f | 28100 | 3510 | 8570 | 320 | 284 | 17400 | 595 | 29,2 | |
| log1pf | 14600 | 2910 | 4560 | 211 | 163 | 8930 | 392 | 22,8 | |
| fmaf | 5820 | 1190 | 1350 | 53 | 53 | 3040 | 476 | 6,4 | |
| powintf | 60400 | 7370 | 20300 | 862 | 792 | 37000 | 1560 | 23,7 | |
| powf | 51700 | 10500 | 16600 | 1020 | 967 | 31000 | 1720 | 18,0 | |
| hypotf | 17100 | 2780 | 6030 | 451 | 451 | 8460 | 1380 | 6,1 | |
| cbrtf | 17500 | 11700 | 5670 | 1190 | 998 | 8320 | 1640 | 5,1 | |
| absf | 15 | 16 | 7 | 7 | 7 | 7 | 13 | 0,5 | |
| float2double | 87 | 88 | 147 | 34 | 34 | 215 | 215 | 1,0 | |
| average: | 17282 | 2848 | 5560 | 397 | 291 | 9951 | 566 | 13,6 | |
| median: | 7890 | 612 | 2040 | 189 | 176 | 1710 | 303 | 7,5 | |
| Timing of double functions in [ns] | |||||||||
| RP2040-B2 | RP2040-B2 | RP2350-A2 | RP2350-A2 | RP2350-A2 | RP2350-A2 | RP2350-A2 | |||
| function | @125MHz | @125MHz | @150MHz | @150MHz | @150MHz | @150MHz | @150MHz | RISC-V | |
| libc | fast | ARM libc | ARM DCP | ARM DCP+VFP | RISC-V libc | RISC-V fast | speed-up | ||
| sub-normals? | yes | no | yes | no | no | yes | no | ||
| copysign | 136 | 136 | 30 | 30 | 30 | 27 | 53 | 0,5 | |
| isintd | 203 | 203 | 56 | 56 | 56 | 58 | 52 | 1,1 | |
| isoddintd | 154 | 155 | 40 | 40 | 40 | 53 | 46 | 1,2 | |
| ispow2d | 110 | 111 | 46 | 46 | 46 | 59 | 53 | 1,1 | |
| ldexp | 2490 | 263 | 1380 | 121 | 121 | 1040 | 85 | 12,2 | |
| dadd | 1350 | 659 | 308 | 60 | 60 | 674 | 489 | 1,4 | |
| dsub | 1460 | 698 | 315 | 60 | 60 | 695 | 496 | 1,4 | |
| dmul | 3070 | 1220 | 472 | 173 | 173 | 1390 | 529 | 2,6 | |
| dsqr | 3070 | 1230 | 513 | 274 | 274 | 1420 | 537 | 2,6 | |
| ddiv | 3950 | 1500 | 3290 | 233 | 233 | 2480 | 824 | 3,0 | |
| drec | 4080 | 1520 | 3410 | 354 | 354 | 2580 | 826 | 3,1 | |
| fmod | 2020 | 410 | 921 | 165 | 165 | 750 | 177 | 4,2 | |
| remquo | 6180 | 478 | 1940 | 232 | 232 | 2540 | 207 | 12,3 | |
| remainder | 7900 | 606 | 2590 | 328 | 328 | 3590 | 236 | 15,2 | |
| dcmp | 1700 | 272 | 923 | 399 | 399 | 515 | 510 | 1,0 | |
| dcmpeq | 710 | 390 | 432 | 60 | 60 | 180 | 173 | 1,0 | |
| dcmplt | 881 | 390 | 425 | 66 | 66 | 221 | 224 | 1,0 | |
| dcmple | 881 | 394 | 432 | 66 | 66 | 222 | 224 | 1,0 | |
| dcmpge | 869 | 458 | 472 | 66 | 66 | 235 | 224 | 1,0 | |
| dcmpgt | 868 | 455 | 478 | 66 | 66 | 228 | 217 | 1,1 | |
| dcmpun | 1580 | 64 | 577 | 60 | 60 | 810 | 806 | 1,0 | |
| int2double | 679 | 329 | 347 | 47 | 47 | 400 | 320 | 1,3 | |
| uint2double | 583 | 321 | 327 | 47 | 47 | 334 | 240 | 1,4 | |
| int642double | 5740 | 416 | 451 | 163 | 163 | 750 | 661 | 1,1 | |
| uint642double | 5620 | 368 | 453 | 133 | 133 | 672 | 592 | 1,1 | |
| fix2double | 2850 | 446 | 1730 | 110 | 110 | 1330 | 447 | 3,0 | |
| ufix2double | 2750 | 397 | 1710 | 87 | 87 | 1270 | 367 | 3,5 | |
| fix642double | 7910 | 408 | 1840 | 160 | 160 | 1690 | 788 | 2,1 | |
| ufix642double | 7790 | 358 | 1830 | 127 | 127 | 1610 | 719 | 2,2 | |
| double2int_z | 410 | 145 | 154 | 53 | 53 | 138 | 132 | 1,0 | |
| double2int | 1990 | 608 | 768 | 267 | 267 | 862 | 284 | 3,0 | |
| double2uint | 11800 | 308 | 1900 | 53 | 53 | 174 | 180 | 1,0 | |
| double2int64_z | 4810 | 539 | 975 | 134 | 134 | 127 | 130 | 1,0 | |
| double2int64 | 6280 | 513 | 1650 | 313 | 313 | 940 | 314 | 3,0 | |
| double2uint64 | 6070 | 207 | 1170 | 83 | 83 | 343 | 353 | 1,0 | |
| double2fix | 4230 | 601 | 2200 | 438 | 438 | 1860 | 398 | 4,7 | |
| double2ufix | 13700 | 306 | 3340 | 298 | 298 | 1140 | 313 | 3,6 | |
| double2fix64 | 8280 | 505 | 2960 | 498 | 498 | 1860 | 423 | 4,4 | |
| double2ufix64 | 8320 | 202 | 2630 | 85 | 85 | 1310 | 478 | 2,7 | |
| trunc | 245 | 191 | 111 | 52 | 52 | 95 | 65 | 1,5 | |
| round | 278 | 223 | 171 | 55 | 55 | 120 | 81 | 1,5 | |
| floor | 1400 | 251 | 585 | 68 | 68 | 718 | 94 | 7,6 | |
| ceil | 1480 | 253 | 570 | 71 | 71 | 704 | 97 | 7,3 | |
| sqrt | 14700 | 1310 | 7680 | 274 | 274 | 7800 | 710 | 11,0 | |
| deg2rad | 3160 | 1430 | 515 | 280 | 280 | 1460 | 623 | 2,3 | |
| rad2deg | 3170 | 1420 | 513 | 280 | 280 | 1470 | 613 | 2,4 | |
| sin | 40400 | 13100 | 9690 | 1310 | 1310 | 20000 | 2600 | 7,7 | |
| sin_deg | 44300 | 14500 | 10400 | 1560 | 1560 | 21400 | 2770 | 7,7 | |
| cos | 45200 | 13000 | 10600 | 1280 | 1280 | 22200 | 2990 | 7,4 | |
| cos_deg | 49000 | 14400 | 11200 | 1550 | 1550 | 23600 | 2790 | 8,5 | |
| sincos | 86500 | 13900 | 20100 | 1800 | 1800 | 41800 | 5030 | 8,3 | |
| sincos_deg | 90700 | 15300 | 21300 | 2110 | 2110 | 43800 | 5060 | 8,7 | |
| tan | 81800 | 15500 | 20200 | 2040 | 2040 | 40200 | 6080 | 6,6 | |
| tan_deg | 84600 | 16900 | 21100 | 2290 | 2290 | 41800 | 6070 | 6,9 | |
| cotan | 86900 | 17300 | 24500 | 2410 | 2410 | 43100 | 6110 | 7,1 | |
| cotan_deg | 91300 | 18600 | 25600 | 2670 | 2670 | 45000 | 6150 | 7,3 | |
| asin | 60400 | 21800 | 17900 | 2580 | 2580 | 29900 | 6370 | 4,7 | |
| asin_deg | 63800 | 23100 | 18600 | 2870 | 2870 | 31700 | 6620 | 4,8 | |
| acos | 62100 | 21900 | 18600 | 2600 | 2600 | 30800 | 6850 | 4,5 | |
| acos_deg | 65500 | 23300 | 19200 | 2890 | 2890 | 32400 | 6940 | 4,7 | |
| atan | 62700 | 17300 | 15700 | 1750 | 1750 | 30800 | 4340 | 7,1 | |
| atan_deg | 66800 | 18800 | 16100 | 2020 | 2020 | 32200 | 4430 | 7,3 | |
| acotan | 64700 | 18400 | 16600 | 1990 | 1990 | 31900 | 4480 | 7,1 | |
| acotan_deg | 67900 | 19800 | 17000 | 2270 | 2270 | 33300 | 4550 | 7,3 | |
| atan2 | 68300 | 17400 | 20000 | 1610 | 1610 | 34000 | 5560 | 6,1 | |
| atan2_deg | 71200 | 18800 | 20800 | 1890 | 1890 | 35800 | 6220 | 5,8 | |
| sinh | 42000 | 6190 | 12800 | 814 | 814 | 20100 | 2310 | 8,7 | |
| cosh | 62400 | 14200 | 20500 | 2100 | 2100 | 31300 | 5050 | 6,2 | |
| tanh | 65400 | 4020 | 20500 | 715 | 715 | 33000 | 1970 | 16,8 | |
| asinh | 48000 | 5610 | 17200 | 922 | 922 | 24000 | 2760 | 8,7 | |
| acosh | 86600 | 12800 | 32000 | 2010 | 2010 | 44800 | 7210 | 6,2 | |
| atanh | 38100 | 3610 | 12300 | 593 | 593 | 18900 | 1900 | 9,9 | |
| exp | 34300 | 6110 | 11400 | 602 | 602 | 17100 | 2080 | 8,2 | |
| exp2 | 139000 | 10600 | 38100 | 1690 | 1690 | 69100 | 1820 | 38,0 | |
| exp10 | 191000 | 7570 | 57700 | 865 | 865 | 95600 | 2190 | 43,7 | |
| log | 42900 | 7160 | 13200 | 861 | 861 | 22100 | 3530 | 6,3 | |
| log2 | 48100 | 8570 | 17000 | 1140 | 1140 | 24000 | 3440 | 7,0 | |
| log10 | 50700 | 8530 | 14900 | 1140 | 1140 | 26000 | 3550 | 7,3 | |
| expm1 | 57200 | 4290 | 15500 | 589 | 589 | 28100 | 2040 | 13,8 | |
| log1p | 19200 | 2830 | 5580 | 414 | 414 | 9470 | 1500 | 6,3 | |
| fma | 4200 | 2040 | 707 | 491 | 491 | 2050 | 1150 | 1,8 | |
| powint | 121000 | 29200 | 34300 | 5980 | 5980 | 58800 | 12400 | 4,7 | |
| pow | 90600 | 23400 | 24700 | 4710 | 4710 | 44800 | 9160 | 4,9 | |
| hypot | 3820 | 5420 | 1470 | 1370 | 1370 | 1830 | 2720 | 0,7 | |
| cbrt | 45900 | 15200 | 26200 | 2270 | 2270 | 25500 | 6300 | 4,0 | |
| absd | 952 | 24 | 496 | 14 | 14 | 306 | 34 | 9,0 | |
| double2float | 97 | 97 | 217 | 40 | 40 | 225 | 218 | 1,0 | |
| average: | 31189 | 6371 | 9053 | 896 | 896 | 15077 | 2204 | 5,7 | |
| median: | 7900 | 1310 | 2590 | 328 | 328 | 1860 | 719 | 4,5 | |
| Medium timing of functions in [ns] | |||||||||
| RP2040-B2 | RP2040-B2 | RP2350-A2 | RP2350-A2 | RP2350-A2 | RP2350-A2 | RP2350-A2 | |||
| @125MHz | @125MHz | @150MHz | @150MHz | @150MHz | @150MHz | @150MHz | |||
| libc | ARM libc | ARM DCP | ARM DCP+VFP | RISC-V libc | RISC-V fast | ||||
| float | 12586 | 1730 | 3800 | 293 | 234 | 5830 | 435 | ||
| double | 19545 | 3840 | 5821 | 612 | 612 | 8469 | 1462 | ||
| Comparison of effect of GCC optimization settings on C function compilation and comparison with ASM variant: | |||||||||
| RISC-V GCC compiler 13.2.0 | |||||||||
| [ns] | expf() Cheb | logf() Cheb | expf() Tayl | logf() Merc | |||||
| "C" -O0 | 4100 | 5380 | 5700 | 10300 | |||||
| "C" -O1 | 524 | 1150 | 579 | 1020 | |||||
| "C" -Og -g3 | 519 | 1120 | 604 | 1030 | |||||
| "C" -O2 | 520 | 727 | 567 | 1050 | |||||
| "C" -O3 | 520 | 727 | 567 | 1050 | |||||
| "C" -Ofast | 520 | 727 | 560 | 1060 | |||||
| "C" -Os | 513 | *749* | 564 | 1030 | |||||
| ASM | 475 | 633 | 532 | 822 | |||||
| * = compiler included another non-inline function with similar code instead of inline | |||||||||