mirror of
https://git.planet-casio.com/Vhex-Kernel-Core/fxlibc.git
synced 2024-12-29 13:03:38 +01:00
stdlib: add abs, labs, llabs, div, ldiv, lldiv (TEST)
This commit is contained in:
parent
e8aaadf2e7
commit
73b536bbb6
9 changed files with 109 additions and 4 deletions
|
@ -58,7 +58,9 @@ endif()
|
||||||
# Building
|
# Building
|
||||||
|
|
||||||
set(SOURCES
|
set(SOURCES
|
||||||
|
# assert
|
||||||
src/libc/assert/assert.c
|
src/libc/assert/assert.c
|
||||||
|
# ctype
|
||||||
src/libc/ctype/isalnum.c
|
src/libc/ctype/isalnum.c
|
||||||
src/libc/ctype/isalpha.c
|
src/libc/ctype/isalpha.c
|
||||||
src/libc/ctype/isblank.c
|
src/libc/ctype/isblank.c
|
||||||
|
@ -73,9 +75,12 @@ set(SOURCES
|
||||||
src/libc/ctype/isxdigit.c
|
src/libc/ctype/isxdigit.c
|
||||||
src/libc/ctype/tolower.c
|
src/libc/ctype/tolower.c
|
||||||
src/libc/ctype/toupper.c
|
src/libc/ctype/toupper.c
|
||||||
|
# errno
|
||||||
src/libc/errno/errno.c
|
src/libc/errno/errno.c
|
||||||
|
# locale
|
||||||
src/libc/locale/setlocale.c
|
src/libc/locale/setlocale.c
|
||||||
src/libc/locale/localeconv.c
|
src/libc/locale/localeconv.c
|
||||||
|
# stdio
|
||||||
src/libc/stdio/vsnprintf.c
|
src/libc/stdio/vsnprintf.c
|
||||||
src/libc/stdio/sprintf.c
|
src/libc/stdio/sprintf.c
|
||||||
src/libc/stdio/dprintf.c
|
src/libc/stdio/dprintf.c
|
||||||
|
@ -89,8 +94,16 @@ set(SOURCES
|
||||||
src/libc/stdio/internal/printf.h
|
src/libc/stdio/internal/printf.h
|
||||||
src/libc/stdio/vdprintf.c
|
src/libc/stdio/vdprintf.c
|
||||||
src/libc/stdio/printf.c
|
src/libc/stdio/printf.c
|
||||||
|
# stdlib
|
||||||
|
src/libc/stdlib/abs.c
|
||||||
src/libc/stdlib/calloc.c
|
src/libc/stdlib/calloc.c
|
||||||
|
src/libc/stdlib/div.c
|
||||||
|
src/libc/stdlib/labs.c
|
||||||
|
src/libc/stdlib/ldiv.c
|
||||||
|
src/libc/stdlib/llabs.c
|
||||||
|
src/libc/stdlib/lldiv.c
|
||||||
src/libc/stdlib/reallocarray.c
|
src/libc/stdlib/reallocarray.c
|
||||||
|
# string
|
||||||
src/libc/string/strchr.c
|
src/libc/string/strchr.c
|
||||||
src/libc/string/strcpy.c
|
src/libc/string/strcpy.c
|
||||||
src/libc/string/memcpy.c
|
src/libc/string/memcpy.c
|
||||||
|
|
10
STATUS
10
STATUS
|
@ -95,7 +95,15 @@ DONE: Function/symbol/macro is defined, builds, links, and is tested
|
||||||
TODO (will give the full list later on)
|
TODO (will give the full list later on)
|
||||||
|
|
||||||
7.20 <stdlib.h>
|
7.20 <stdlib.h>
|
||||||
TODO (will give the full list later on)
|
7.20.1 Numeric conversion functions: TODO
|
||||||
|
7.20.2 Pseudo-random sequence generation functions: TODO
|
||||||
|
7.20.3 Memory management functions: TODO (check existing code first)
|
||||||
|
7.20.4 Communication with the environment: TODO
|
||||||
|
7.20.5 Searching and sorting utilities: TODO
|
||||||
|
7.20.6.1 abs, labs, llabs: TEST
|
||||||
|
7.20.6.2 div, ldiv, lldiv: TEST
|
||||||
|
7.20.7 Multibyte/wide character conversion functions: TODO
|
||||||
|
7.20.8 Multibyte/wide string conversion functions: TODO
|
||||||
|
|
||||||
7.21 <string.h>
|
7.21 <string.h>
|
||||||
TODO (will give the full list later on)
|
TODO (will give the full list later on)
|
||||||
|
|
|
@ -4,9 +4,8 @@
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
//---
|
/* Dynamic memory management. */
|
||||||
// Dynamic memory management
|
|
||||||
//---
|
|
||||||
/* Allocate SIZE bytes of memory. */
|
/* Allocate SIZE bytes of memory. */
|
||||||
extern void *malloc(size_t size);
|
extern void *malloc(size_t size);
|
||||||
|
|
||||||
|
@ -28,4 +27,40 @@ extern void *reallocarray(void *ptr, size_t nmemb, size_t size);
|
||||||
/* Free a block allocated by `malloc', `realloc' or `calloc'. */
|
/* Free a block allocated by `malloc', `realloc' or `calloc'. */
|
||||||
extern void free(void *ptr);
|
extern void free(void *ptr);
|
||||||
|
|
||||||
|
/* Integer arithmetic functions. */
|
||||||
|
|
||||||
|
extern int abs(int __j);
|
||||||
|
#define abs(j) ({ \
|
||||||
|
int __j = (j); \
|
||||||
|
(__j >= 0) ? __j : -(__j); \
|
||||||
|
})
|
||||||
|
|
||||||
|
extern long int labs(long int __j);
|
||||||
|
#define labs(j) ({ \
|
||||||
|
long int __j = (j); \
|
||||||
|
(__j >= 0) ? __j : -(__j); \
|
||||||
|
})
|
||||||
|
|
||||||
|
extern long long int llabs(long long int __j);
|
||||||
|
#define llabs(j) ({ \
|
||||||
|
long long int __j = (j); \
|
||||||
|
(__j >= 0) ? __j : -(__j); \
|
||||||
|
})
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int quot, rem;
|
||||||
|
} div_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
long int quot, rem;
|
||||||
|
} ldiv_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
long long int quot, rem;
|
||||||
|
} lldiv_t;
|
||||||
|
|
||||||
|
div_t div(int __num, int __denom);
|
||||||
|
ldiv_t ldiv(long int __num, long int __denom);
|
||||||
|
lldiv_t lldiv(long long int __num, long long int __denom);
|
||||||
|
|
||||||
#endif /*__STDLIB_H__*/
|
#endif /*__STDLIB_H__*/
|
||||||
|
|
7
src/libc/stdlib/abs.c
Normal file
7
src/libc/stdlib/abs.c
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
#include <stdlib.h>
|
||||||
|
#undef abs
|
||||||
|
|
||||||
|
int abs(int j)
|
||||||
|
{
|
||||||
|
return (j >= 0) ? j : -j;
|
||||||
|
}
|
12
src/libc/stdlib/div.c
Normal file
12
src/libc/stdlib/div.c
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
div_t div(int num, int denom)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
** On SuperH, division and modulus are both very slow, so it's more
|
||||||
|
** efficient to perform only one division.
|
||||||
|
*/
|
||||||
|
int q = num / denom;
|
||||||
|
int r = num - q * denom;
|
||||||
|
return (div_t){ q, r };
|
||||||
|
}
|
7
src/libc/stdlib/labs.c
Normal file
7
src/libc/stdlib/labs.c
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
#include <stdlib.h>
|
||||||
|
#undef labs
|
||||||
|
|
||||||
|
long int labs(long int j)
|
||||||
|
{
|
||||||
|
return (j >= 0) ? j : -j;
|
||||||
|
}
|
8
src/libc/stdlib/ldiv.c
Normal file
8
src/libc/stdlib/ldiv.c
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
ldiv_t ldiv(long int num, long int denom)
|
||||||
|
{
|
||||||
|
long int q = num / denom;
|
||||||
|
long int r = num - q * denom;
|
||||||
|
return (ldiv_t){ q, r };
|
||||||
|
}
|
7
src/libc/stdlib/llabs.c
Normal file
7
src/libc/stdlib/llabs.c
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
#include <stdlib.h>
|
||||||
|
#undef llabs
|
||||||
|
|
||||||
|
long long int llabs(long long int j)
|
||||||
|
{
|
||||||
|
return (j >= 0) ? j : -j;
|
||||||
|
}
|
8
src/libc/stdlib/lldiv.c
Normal file
8
src/libc/stdlib/lldiv.c
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
lldiv_t lldiv(long long int num, long long int denom)
|
||||||
|
{
|
||||||
|
long long int q = num / denom;
|
||||||
|
long long int r = num - q * denom;
|
||||||
|
return (lldiv_t){ q, r };
|
||||||
|
}
|
Loading…
Reference in a new issue