Skip to content

Commit aeb5b4d

Browse files
committed
Add support for uabs(3) & friends
1 parent 011212c commit aeb5b4d

File tree

11 files changed

+367
-16
lines changed

11 files changed

+367
-16
lines changed

kos/include/bits/std_abs.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* HASH CRC-32:0xdcdff000 */
1+
/* HASH CRC-32:0xaf7f8f */
22
/* Copyright (c) 2019-2025 Griefer@Work *
33
* *
44
* This software is provided 'as-is', without any express or implied *
@@ -66,6 +66,12 @@ __CEIREDIRECT(__ATTR_CONST __ATTR_WUNUSED,long,__NOTHROW,abs,(long __x),qabs,{ r
6666
__CEIREDIRECT(__ATTR_CONST __ATTR_WUNUSED,long,__NOTHROW,abs,(long __x),imaxabs,{ return __x < 0 ? -__x : __x; })
6767
#elif defined(__CRT_HAVE__abs64) && __SIZEOF_LONG__ == 8
6868
__CEIREDIRECT(__ATTR_CONST __ATTR_WUNUSED,long,__NOTHROW,abs,(long __x),_abs64,{ return __x < 0 ? -__x : __x; })
69+
#elif defined(__CRT_HAVE_uabs) && __SIZEOF_LONG__ == __SIZEOF_INT__
70+
__CEIREDIRECT(__ATTR_CONST __ATTR_WUNUSED,long,__NOTHROW,abs,(long __x),uabs,{ return __x < 0 ? -__x : __x; })
71+
#elif defined(__CRT_HAVE_ullabs) && __SIZEOF_LONG__ == __SIZEOF_LONG_LONG__
72+
__CEIREDIRECT(__ATTR_CONST __ATTR_WUNUSED,long,__NOTHROW,abs,(long __x),ullabs,{ return __x < 0 ? -__x : __x; })
73+
#elif defined(__CRT_HAVE_uimaxabs) && __SIZEOF_LONG__ == __SIZEOF_INTMAX_T__
74+
__CEIREDIRECT(__ATTR_CONST __ATTR_WUNUSED,long,__NOTHROW,abs,(long __x),uimaxabs,{ return __x < 0 ? -__x : __x; })
6975
#else /* ... */
7076
__LOCAL __ATTR_CONST __ATTR_WUNUSED long __NOTHROW(__LIBCCALL abs)(long __x) { return __x < 0 ? -__x : __x; }
7177
#endif /* !... */
@@ -94,6 +100,12 @@ __CEIREDIRECT(__ATTR_CONST __ATTR_WUNUSED,__LONGLONG,__NOTHROW,abs,(__LONGLONG _
94100
__CEIREDIRECT(__ATTR_CONST __ATTR_WUNUSED,__LONGLONG,__NOTHROW,abs,(__LONGLONG __x),imaxabs,{ return __x < 0 ? -__x : __x; })
95101
#elif defined(__CRT_HAVE__abs64) && __SIZEOF_LONG_LONG__ == 8
96102
__CEIREDIRECT(__ATTR_CONST __ATTR_WUNUSED,__LONGLONG,__NOTHROW,abs,(__LONGLONG __x),_abs64,{ return __x < 0 ? -__x : __x; })
103+
#elif defined(__CRT_HAVE_uabs) && __SIZEOF_LONG_LONG__ == __SIZEOF_INT__
104+
__CEIREDIRECT(__ATTR_CONST __ATTR_WUNUSED,__LONGLONG,__NOTHROW,abs,(__LONGLONG __x),uabs,{ return __x < 0 ? -__x : __x; })
105+
#elif defined(__CRT_HAVE_ulabs) && __SIZEOF_LONG_LONG__ == __SIZEOF_LONG__
106+
__CEIREDIRECT(__ATTR_CONST __ATTR_WUNUSED,__LONGLONG,__NOTHROW,abs,(__LONGLONG __x),ulabs,{ return __x < 0 ? -__x : __x; })
107+
#elif defined(__CRT_HAVE_uimaxabs) && __SIZEOF_LONG_LONG__ == __SIZEOF_INTMAX_T__
108+
__CEIREDIRECT(__ATTR_CONST __ATTR_WUNUSED,__LONGLONG,__NOTHROW,abs,(__LONGLONG __x),uimaxabs,{ return __x < 0 ? -__x : __x; })
97109
#else /* ... */
98110
__LOCAL __ATTR_CONST __ATTR_WUNUSED __LONGLONG __NOTHROW(__LIBCCALL abs)(__LONGLONG __x) { return __x < 0 ? -__x : __x; }
99111
#endif /* !... */

kos/include/features.h

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -342,13 +342,24 @@
342342
#define _DEFAULT_SOURCE 1
343343
#endif /* (_BSD_SOURCE || _SVID_SOURCE) && !_DEFAULT_SOURCE */
344344

345+
/* Map "_ISOC2X_SOURCE" to "_ISOC23_SOURCE" */
346+
#ifdef _ISOC2X_SOURCE
347+
#undef _ISOC2X_SOURCE
348+
#undef _ISOC23_SOURCE
349+
#define _ISOC23_SOURCE 1
350+
#endif /* _ISOC2X_SOURCE */
351+
345352
#ifdef _GNU_SOURCE
346353
#undef _ISOC95_SOURCE
347354
#define _ISOC95_SOURCE 1
348355
#undef _ISOC99_SOURCE
349356
#define _ISOC99_SOURCE 1
350357
#undef _ISOC11_SOURCE
351358
#define _ISOC11_SOURCE 1
359+
#undef _ISOC23_SOURCE
360+
#define _ISOC23_SOURCE 1
361+
#undef _ISOC2Y_SOURCE
362+
#define _ISOC2Y_SOURCE 1
352363
#undef _POSIX_SOURCE
353364
#define _POSIX_SOURCE 1
354365
#if !defined(_POSIX_C_SOURCE) || (_POSIX_C_SOURCE + 0 < 200809L)
@@ -367,27 +378,39 @@
367378
#define _DEFAULT_SOURCE 1
368379
#undef _ATFILE_SOURCE
369380
#define _ATFILE_SOURCE 1
381+
#undef _DYNAMIC_STACK_SIZE_SOURCE
382+
#define _DYNAMIC_STACK_SIZE_SOURCE 1 /* XXX: What is this about? */
370383
#endif /* _GNU_SOURCE */
371384

372-
#if (!defined(_DEFAULT_SOURCE) && !defined(__USE_ISOC_PURE) && \
373-
(!defined(__STRICT_ANSI__) && !defined(_ISOC99_SOURCE) && \
374-
!defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)))
385+
#if (!defined(_DEFAULT_SOURCE) && !defined(__USE_ISOC_PURE) && \
386+
(!defined(__STRICT_ANSI__) && !defined(_ISOC99_SOURCE) && !defined(_ISOC11_SOURCE) && \
387+
!defined(_ISOC23_SOURCE) && !defined(_ISOC2Y_SOURCE) && !defined(_POSIX_SOURCE) && \
388+
!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)))
375389
#define _DEFAULT_SOURCE 1
376390
#endif /* ... */
377391

378-
#if (defined(_ISOC23_SOURCE) /* || \
392+
#if (defined(_ISOC2Y_SOURCE) /* || \
379393
(defined(__STDC_VERSION__) && __STDC_VERSION__ >= TBA)*/)
394+
#define __GLIBC_USE_ISOC2Y 1 /* API alias (don't use in headers!) */
395+
#define __USE_ISOC2Y 1
396+
#endif /* _ISOC2Y_SOURCE || __STDC_VERSION__ >= TBA */
397+
398+
#if (defined(_ISOC23_SOURCE) || defined(__USE_ISOC2Y) || \
399+
(defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L))
400+
#ifndef __ISO_C_VISIBLE
380401
#define __ISO_C_VISIBLE 2023 /* API alias (don't use in headers!) */
402+
#endif /* !__ISO_C_VISIBLE */
403+
#define __GLIBC_USE_ISOC23 1 /* API alias (don't use in headers!) */
381404
#define __USE_ISOC23 1
382-
#endif /* _ISOC23_SOURCE || __STDC_VERSION__ >= 201112L */
405+
#endif /* _ISOC23_SOURCE || __USE_ISOC2Y || __STDC_VERSION__ >= 201112L */
383406

384407
#if (defined(_ISOC17_SOURCE) || defined(__USE_ISOC23) || \
385408
(defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201710L))
386409
#ifndef __ISO_C_VISIBLE
387410
#define __ISO_C_VISIBLE 2017 /* API alias (don't use in headers!) */
388411
#endif /* !__ISO_C_VISIBLE */
389412
#define __USE_ISOC17 1
390-
#endif /* _ISOC17_SOURCE || __STDC_VERSION__ >= 201710L */
413+
#endif /* _ISOC17_SOURCE || __USE_ISOC23 || __STDC_VERSION__ >= 201710L */
391414

392415
#if (defined(_ISOC11_SOURCE) || defined(__USE_ISOC17) || \
393416
(defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L))
@@ -750,6 +773,8 @@
750773
#undef __USE_ISOC99
751774
#undef __USE_ISOC11
752775
#undef __USE_ISOC17
776+
#undef __USE_ISOC23
777+
#undef __USE_ISOC2Y
753778
#undef __USE_ISOCXX11
754779
#undef __USE_ISOCXX14
755780
#undef __USE_ISOCXX17
@@ -795,6 +820,8 @@
795820
#define __USE_ISOC99 1
796821
#define __USE_ISOC11 1
797822
#define __USE_ISOC17 1
823+
#define __USE_ISOC23 1
824+
#define __USE_ISOC2Y 1
798825
#define __USE_ISOCXX11 1
799826
#define __USE_ISOCXX14 1
800827
#define __USE_ISOCXX17 1

kos/include/i386-kos/crt-features/crt-kos32.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6740,6 +6740,7 @@
67406740
#define __CRT_HAVE_twalk_r
67416741
#define __CRT_HAVE_tzname
67426742
#define __CRT_HAVE_tzset
6743+
#define __CRT_HAVE_uabs
67436744
#define __CRT_HAVE_ualarm
67446745
#define __CRT_HAVE_ufromfp
67456746
#define __CRT_HAVE_ufromfpf
@@ -6748,8 +6749,11 @@
67486749
#define __CRT_HAVE_ufromfpxf
67496750
#define __CRT_HAVE_ufromfpxl
67506751
#define __CRT_HAVE_uid_from_user
6752+
#define __CRT_HAVE_uimaxabs
6753+
#define __CRT_HAVE_ulabs
67516754
#define __CRT_HAVE_ulckpwdf
67526755
#define __CRT_HAVE_ulimit
6756+
#define __CRT_HAVE_ullabs
67536757
#define __CRT_HAVE_ulltostr
67546758
#define __CRT_HAVE_ultoa
67556759
#define __CRT_HAVE_umask

kos/include/i386-kos/crt-features/crt-kos64.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6185,6 +6185,7 @@
61856185
#define __CRT_HAVE_twalk_r
61866186
#define __CRT_HAVE_tzname
61876187
#define __CRT_HAVE_tzset
6188+
#define __CRT_HAVE_uabs
61886189
#define __CRT_HAVE_ualarm
61896190
#define __CRT_HAVE_ufromfp
61906191
#define __CRT_HAVE_ufromfpf
@@ -6193,8 +6194,11 @@
61936194
#define __CRT_HAVE_ufromfpxf
61946195
#define __CRT_HAVE_ufromfpxl
61956196
#define __CRT_HAVE_uid_from_user
6197+
#define __CRT_HAVE_uimaxabs
6198+
#define __CRT_HAVE_ulabs
61966199
#define __CRT_HAVE_ulckpwdf
61976200
#define __CRT_HAVE_ulimit
6201+
#define __CRT_HAVE_ullabs
61986202
#define __CRT_HAVE_ulltostr
61996203
#define __CRT_HAVE_ultoa
62006204
#define __CRT_HAVE_umask
@@ -11221,6 +11225,7 @@
1122111225
#define __CRT_HAVE_KOS$ttyname_r
1122211226
#define __CRT_HAVE_KOS$twalk
1122311227
#define __CRT_HAVE_KOS$twalk_r
11228+
#define __CRT_HAVE_KOS$uabs
1122411229
#define __CRT_HAVE_KOS$ualarm
1122511230
#define __CRT_HAVE_KOS$ufromfp
1122611231
#define __CRT_HAVE_KOS$ufromfpf
@@ -11229,7 +11234,10 @@
1122911234
#define __CRT_HAVE_KOS$ufromfpxf
1123011235
#define __CRT_HAVE_KOS$ufromfpxl
1123111236
#define __CRT_HAVE_KOS$uid_from_user
11237+
#define __CRT_HAVE_KOS$uimaxabs
11238+
#define __CRT_HAVE_KOS$ulabs
1123211239
#define __CRT_HAVE_KOS$ulimit
11240+
#define __CRT_HAVE_KOS$ullabs
1123311241
#define __CRT_HAVE_KOS$ulltostr
1123411242
#define __CRT_HAVE_KOS$ultoa
1123511243
#define __CRT_HAVE_KOS$umask
@@ -16174,6 +16182,7 @@
1617416182
#define __CRT_HAVE_DOS$ttyname_r
1617516183
#define __CRT_HAVE_DOS$twalk
1617616184
#define __CRT_HAVE_DOS$twalk_r
16185+
#define __CRT_HAVE_DOS$uabs
1617716186
#define __CRT_HAVE_DOS$ualarm
1617816187
#define __CRT_HAVE_DOS$ufromfp
1617916188
#define __CRT_HAVE_DOS$ufromfpf
@@ -16182,7 +16191,10 @@
1618216191
#define __CRT_HAVE_DOS$ufromfpxf
1618316192
#define __CRT_HAVE_DOS$ufromfpxl
1618416193
#define __CRT_HAVE_DOS$uid_from_user
16194+
#define __CRT_HAVE_DOS$uimaxabs
16195+
#define __CRT_HAVE_DOS$ulabs
1618516196
#define __CRT_HAVE_DOS$ulimit
16197+
#define __CRT_HAVE_DOS$ullabs
1618616198
#define __CRT_HAVE_DOS$ulltostr
1618716199
#define __CRT_HAVE_DOS$ultoa
1618816200
#define __CRT_HAVE_DOS$umask

kos/include/inttypes.h

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* HASH CRC-32:0x6cd1da08 */
1+
/* HASH CRC-32:0x66f946a4 */
22
/* Copyright (c) 2019-2025 Griefer@Work *
33
* *
44
* This software is provided 'as-is', without any express or implied *
@@ -57,6 +57,9 @@ __NAMESPACE_STD_USING(imaxdiv_t)
5757
#endif /* !__imaxdiv_t_defined */
5858
__NAMESPACE_STD_USING(imaxabs)
5959
__NAMESPACE_STD_USING(imaxdiv)
60+
#ifdef __USE_ISOC2Y
61+
__NAMESPACE_STD_USING(uimaxabs)
62+
#endif /* __USE_ISOC2Y */
6063
__NAMESPACE_STD_USING(strtoimax)
6164
__NAMESPACE_STD_USING(strtoumax)
6265
__NAMESPACE_STD_USING(wcstoimax)
@@ -756,8 +759,16 @@ __CEIREDIRECT(__ATTR_CONST,__INTMAX_TYPE__,__NOTHROW,imaxabs,(__INTMAX_TYPE__ __
756759
__CEIREDIRECT(__ATTR_CONST,__INTMAX_TYPE__,__NOTHROW,imaxabs,(__INTMAX_TYPE__ __x),labs,{ return __x < 0 ? -__x : __x; })
757760
#elif defined(__CRT_HAVE_llabs) && __SIZEOF_INTMAX_T__ == __SIZEOF_LONG_LONG__
758761
__CEIREDIRECT(__ATTR_CONST,__INTMAX_TYPE__,__NOTHROW,imaxabs,(__INTMAX_TYPE__ __x),llabs,{ return __x < 0 ? -__x : __x; })
762+
#elif defined(__CRT_HAVE_qabs) && __SIZEOF_INTMAX_T__ == __SIZEOF_LONG_LONG__
763+
__CEIREDIRECT(__ATTR_CONST,__INTMAX_TYPE__,__NOTHROW,imaxabs,(__INTMAX_TYPE__ __x),qabs,{ return __x < 0 ? -__x : __x; })
759764
#elif defined(__CRT_HAVE__abs64) && __SIZEOF_INTMAX_T__ == 8
760765
__CEIREDIRECT(__ATTR_CONST,__INTMAX_TYPE__,__NOTHROW,imaxabs,(__INTMAX_TYPE__ __x),_abs64,{ return __x < 0 ? -__x : __x; })
766+
#elif defined(__CRT_HAVE_uabs) && __SIZEOF_INTMAX_T__ == __SIZEOF_INT__
767+
__CEIREDIRECT(__ATTR_CONST,__INTMAX_TYPE__,__NOTHROW,imaxabs,(__INTMAX_TYPE__ __x),uabs,{ return __x < 0 ? -__x : __x; })
768+
#elif defined(__CRT_HAVE_ulabs) && __SIZEOF_INTMAX_T__ == __SIZEOF_LONG__
769+
__CEIREDIRECT(__ATTR_CONST,__INTMAX_TYPE__,__NOTHROW,imaxabs,(__INTMAX_TYPE__ __x),ulabs,{ return __x < 0 ? -__x : __x; })
770+
#elif defined(__CRT_HAVE_ullabs) && __SIZEOF_INTMAX_T__ == __SIZEOF_LONG_LONG__
771+
__CEIREDIRECT(__ATTR_CONST,__INTMAX_TYPE__,__NOTHROW,imaxabs,(__INTMAX_TYPE__ __x),ullabs,{ return __x < 0 ? -__x : __x; })
761772
#else /* ... */
762773
__LOCAL __ATTR_CONST __INTMAX_TYPE__ __NOTHROW(__LIBCCALL imaxabs)(__INTMAX_TYPE__ __x) { return __x < 0 ? -__x : __x; }
763774
#endif /* !... */
@@ -775,6 +786,31 @@ __NAMESPACE_STD_END
775786
__NAMESPACE_STD_BEGIN
776787
__NAMESPACE_LOCAL_USING_OR_IMPL(imaxdiv, __FORCELOCAL __ATTR_ARTIFICIAL __ATTR_CONST struct __imaxdiv_struct __NOTHROW_NCX(__LIBCCALL imaxdiv)(__INTMAX_TYPE__ __numer, __INTMAX_TYPE__ __denom) { return (__NAMESPACE_LOCAL_SYM __LIBC_LOCAL_NAME(imaxdiv))(__numer, __denom); })
777788
#endif /* !... */
789+
#ifdef __USE_ISOC2Y
790+
#if __has_builtin(__builtin_imaxabs) && defined(__LIBC_BIND_CRTBUILTINS) && defined(__CRT_HAVE_imaxabs)
791+
__CEIREDIRECT(,__UINTMAX_TYPE__,__NOTHROW_NCX,uimaxabs,(__INTMAX_TYPE__ __x),imaxabs,{ return __builtin_imaxabs(__x); })
792+
#elif defined(__CRT_HAVE_imaxabs)
793+
__CEIREDIRECT(,__UINTMAX_TYPE__,__NOTHROW_NCX,uimaxabs,(__INTMAX_TYPE__ __x),imaxabs,{ return __x < 0 ? -__x : __x; })
794+
#elif defined(__CRT_HAVE_abs) && __SIZEOF_INTMAX_T__ == __SIZEOF_INT__
795+
__CEIREDIRECT(,__UINTMAX_TYPE__,__NOTHROW_NCX,uimaxabs,(__INTMAX_TYPE__ __x),abs,{ return __x < 0 ? -__x : __x; })
796+
#elif defined(__CRT_HAVE_labs) && __SIZEOF_INTMAX_T__ == __SIZEOF_LONG__
797+
__CEIREDIRECT(,__UINTMAX_TYPE__,__NOTHROW_NCX,uimaxabs,(__INTMAX_TYPE__ __x),labs,{ return __x < 0 ? -__x : __x; })
798+
#elif defined(__CRT_HAVE_llabs) && __SIZEOF_INTMAX_T__ == __SIZEOF_LONG_LONG__
799+
__CEIREDIRECT(,__UINTMAX_TYPE__,__NOTHROW_NCX,uimaxabs,(__INTMAX_TYPE__ __x),llabs,{ return __x < 0 ? -__x : __x; })
800+
#elif defined(__CRT_HAVE_qabs) && __SIZEOF_INTMAX_T__ == __SIZEOF_LONG_LONG__
801+
__CEIREDIRECT(,__UINTMAX_TYPE__,__NOTHROW_NCX,uimaxabs,(__INTMAX_TYPE__ __x),qabs,{ return __x < 0 ? -__x : __x; })
802+
#elif defined(__CRT_HAVE__abs64) && __SIZEOF_INTMAX_T__ == 8
803+
__CEIREDIRECT(,__UINTMAX_TYPE__,__NOTHROW_NCX,uimaxabs,(__INTMAX_TYPE__ __x),_abs64,{ return __x < 0 ? -__x : __x; })
804+
#elif defined(__CRT_HAVE_uabs) && __SIZEOF_INTMAX_T__ == __SIZEOF_INT__
805+
__CEIREDIRECT(,__UINTMAX_TYPE__,__NOTHROW_NCX,uimaxabs,(__INTMAX_TYPE__ __x),uabs,{ return __x < 0 ? -__x : __x; })
806+
#elif defined(__CRT_HAVE_ulabs) && __SIZEOF_INTMAX_T__ == __SIZEOF_LONG__
807+
__CEIREDIRECT(,__UINTMAX_TYPE__,__NOTHROW_NCX,uimaxabs,(__INTMAX_TYPE__ __x),ulabs,{ return __x < 0 ? -__x : __x; })
808+
#elif defined(__CRT_HAVE_ullabs) && __SIZEOF_INTMAX_T__ == __SIZEOF_LONG_LONG__
809+
__CEIREDIRECT(,__UINTMAX_TYPE__,__NOTHROW_NCX,uimaxabs,(__INTMAX_TYPE__ __x),ullabs,{ return __x < 0 ? -__x : __x; })
810+
#else /* ... */
811+
__LOCAL __UINTMAX_TYPE__ __NOTHROW_NCX(__LIBCCALL uimaxabs)(__INTMAX_TYPE__ __x) { return __x < 0 ? -__x : __x; }
812+
#endif /* !... */
813+
#endif /* __USE_ISOC2Y */
778814
#ifdef __CRT_HAVE_strtoimax
779815
__CDECLARE(__ATTR_LEAF __ATTR_IN(1) __ATTR_OUT_OPT(2),__INTMAX_TYPE__,__NOTHROW_NCX,strtoimax,(char const *__restrict __nptr, char **__endptr, __STDC_INT_AS_UINT_T __base),(__nptr,__endptr,__base))
780816
#elif defined(__CRT_HAVE_strtol) && __SIZEOF_INTMAX_T__ == __SIZEOF_LONG__
@@ -899,6 +935,13 @@ __NAMESPACE_STD_END
899935
#ifndef __CXX_SYSTEM_HEADER
900936
__NAMESPACE_STD_USING(imaxabs)
901937
__NAMESPACE_STD_USING(imaxdiv)
938+
#endif /* !__CXX_SYSTEM_HEADER */
939+
#ifdef __USE_ISOC2Y
940+
#ifndef __CXX_SYSTEM_HEADER
941+
__NAMESPACE_STD_USING(uimaxabs)
942+
#endif /* !__CXX_SYSTEM_HEADER */
943+
#endif /* __USE_ISOC2Y */
944+
#ifndef __CXX_SYSTEM_HEADER
902945
__NAMESPACE_STD_USING(strtoimax)
903946
__NAMESPACE_STD_USING(strtoumax)
904947
__NAMESPACE_STD_USING(wcstoimax)

0 commit comments

Comments
 (0)