The v14.0 toolchain adds many functions, fixes bugs, and applies optimizations here and there.
Merry Christmas! 🎄
This release is brought to you in particular thanks to @ZERICO2005 who did almost all of the work!
Highlights:
- Massive expansion of libc functionality:
strto*,atoi/atol/atoll,strlcat,memmem,memrmem,strrstr,stpncpy,strspn/strcspn/strpbrk, etc., many implemented/optimized in handwritten assembly. - Added
sscanfandvsscanf - Wide-character and C95 additions:
wint_t,<wctype.h>,<cfenv>, numerouswmem*andwcs*helpers. - C++ library updates: added
<complex>, improvements to<type_traits>, fixes to C++98 headers. - Math and floating-point: new/optimized
dtof,(u)lltod,logbf,ldexpfbehavior fixes, andscalbln(f/l). - IO and tooling fixes:
fclosecorrectness,stdio.hcleanup/rename helpers,fileiocperformance and docs,gfx_AllocSpritebug fix.
Getting Started
Check out the CE C/C++ Toolchain Documentation.
Downloads
Windows: CEdev-Windows.zip
Linux: CEdev-Linux.tar.gz
macOS (intel): CEdev-macOS-intel.dmg
macOS (arm): CEdev-macOS-arm.dmg
Changelog
Added
- String/number conversion:
- Assembly implementations:
strtol/strtoul,strtoll/strtoull,atoi/atol/atoll. - New helpers:
__strtoi,__strtoui.
- Assembly implementations:
- String utilities:
sscanf/vsscanf.strlcat,stpncpy,memmem,memrmem,strrstr,strspn,strcspn,strpbrk,strchrnul.
- Wide-character and locale:
wint_t,<wctype.h>, C95wmem*functions,wcslen/wcsnlen.
- C/C++ headers and types:
<cfenv>;PRI24andSCN24in<inttypes.h>.<cstdarg>added; fixes for(c)stddefunder C89/C++98.- Expanded
<type_traits>. - C++
<complex>added.
- Math/FP:
- Assembly
dtof,(u)lltod,logbf; optimizedilogbf,copysignl. - Implemented
scalbln(f/l). fminf/fmaxfin assembly.
- Assembly
- Testing/tooling/infra:
- lots of tests for the above!
git-blame-ignore-revsadded.- updated some CI things
Fixed
fclosecorrectness;stdio.hcleanup andrenamealias.- Fix and optimize clipping behavior for
gfx_HorizLineandgfx_VertLine(by @calc84maniac, fixes #673). - Fixed
fontlib_GetGlyphWidth. gfx_AllocSpritereturn value bug.ti_Alloc(String/Equ)now handlesNULLfrom allocator;nonnullattributes added.ti_SetArchiveStatusprototype/declaration corrected.errno/perrorstrings updated; additionalerrnodefines for compatibility (partially by @coco875, see #640).- Replaced broken OS
strspn/strcspn/strpbrkwith in-house implementations (by @calc84maniac, fixes #646). - some float handling edge cases, and
endptrforstrto(f/d/ld), fixed. <fenv.h>function-macros fixed; introduced<cfenv>.- convimg: fix transparent-index and palette-offset (by @mateoconlechuga)
- Misc. docs fixes
Performance and Optimizations
- Multiplication helpers: inlined/optimized
__llmul_b,__llmul_add_b_overflow;llmulu_bimprovements and cycle count fixes. memmoveoptimized; zero-filling incallocfaster under__TICE__.- File I/O:
fileiocoptimized. - i48/i64 routines: implemented
i48div, optimizedi48divand i64 bitwise ops; added cycle counts and formatting for i48 CRT routines. - ZX0 decompressor optimized using eZ80 instructions.
- Misc. size opts
The next release should also be major, as @mateoconlechuga is working on some standard-ification of the toolchain tools especially linking-wise, and @Sightem on fixing newer LLVM compiler rebase efforts (v15 -> v17). Stay tuned!