Commit graph

84 commits

Author SHA1 Message Date
Lephenixnoir
73d6b2eb7c
setjmp: do not disable interrupts (#1) (DONE)
SR.BL=1 could cause problems if setjmp or longjmp is loader over a page
boundary and the second page is not loaded when interrupts are masked.

SR.IMASK=15 is another option, but it seems unnecessary per #1.

Blocking interrupts in longjmp did not make too much sense because the
blocked SR was immediately replaced by the restored one.
2021-05-29 11:18:02 +02:00
Lephenixnoir
13c3390b22
setjmp: expose setjmp and longjmp to sh-generic
... instead of vhex-generic, where it doesn't really belong because Vhex
might run on other architectures.
2021-05-29 09:56:47 +02:00
Lephenixnoir
e6d2aa0638
cmake: default to compiler install with gint, and GiteaPC support 2021-05-25 21:55:51 +02:00
Lephenixnoir
412d0f5623
cmake: set minimum version to 3.15 2021-05-25 21:31:50 +02:00
Lephenixnoir
1e7e2c656b
string: add and test strtok (DONE) 2021-05-24 10:25:32 +02:00
Lephenixnoir
3a9a60db78
stdlib: formatting on the strto* functions
* Name the private function __strto_{int,fp} (with leading double
  underscores) to avoid name conflicts
* Fix comments of the wrong style
* Fix missing leading double underscores in stdlib_p.h
2021-05-24 10:07:48 +02:00
Lephenixnoir
df9073e6ff
string: add and test str[n]casecmp and KMP str[case]str (DONE) 2021-05-24 10:04:54 +02:00
Lephenixnoir
8ffc104798
string: add and test strpbrk (DONE) 2021-05-23 18:11:12 +02:00
Lephenixnoir
d105b1d60a
string: add stubs for strcoll and strxfrm (TEST)
These extend the stub locale; strcoll is simply strcmp and strxfrm is
simply strncpy.
2021-05-23 18:07:36 +02:00
Lephenixnoir
cda27ac2db
string: add and test strspn and strcspn (DONE) 2021-05-23 18:02:38 +02:00
Lephenixnoir
8368ba70fd
string: split and fix strdup and strndup (DONE) 2021-05-23 17:58:04 +02:00
Lephenixnoir
b78cec4f6d
string: add and test strerror (DONE) 2021-05-23 17:44:37 +02:00
Lephenixnoir
2a78c17597
string: strchr*, strmp*, strcpy*, strcat* are now tested (DONE) 2021-05-23 17:44:03 +02:00
Lephenixnoir
3792bbd9d1
string: split strcat and strncat (DONE) 2021-05-23 17:28:48 +02:00
Lephenixnoir
5d345b8da2
string: split and fix strcpy and strncpy (DONE) 2021-05-23 17:28:20 +02:00
Lephenixnoir
d5ef8298ae
string: split strcmp and strncmp (DONE) 2021-05-23 17:27:58 +02:00
Lephenixnoir
ab8bcc6928
string: use gint's (not-so-optimized-yet) memmove (DONE) 2021-05-23 16:52:39 +02:00
Lephenixnoir
fd0d67191c
string: add memchr, memcmp, memmove for non-SuperH (TEST) 2021-05-23 16:52:39 +02:00
Lephenixnoir
5cfd2a7d85
string: use gint's optimized memcmp (DONE) 2021-05-23 16:52:35 +02:00
Lephenixnoir
a354e38ccf
string: use gint's optimized memcpy (DONE) 2021-05-23 16:52:33 +02:00
Lephenixnoir
b69e0fd299
string: use gint's optimized memset (DONE) 2021-05-23 16:52:29 +02:00
Lephenixnoir
bd344d5bb2
string: split strchr, strchrnul and strrchr (TEST) 2021-05-23 16:07:01 +02:00
Lephenixnoir
6021c536f7
string: split strnlen, optimize strlen in assembler (DONE)
This change provides an optimized hand-written strlen function for
SuperH targets. The original plan was to declare the C-based naive
version weak and just let the linker figure out the proper one to use,
but unfortunately static libraries don't work like that; ld
intentionally stops at the first version even if it's weak. Instead,
some #ifdef's are used in the C-based strlen to not compile it when
unneeded.

The optimized strlen uses 4-byte accesses and cmp/str.
2021-05-23 16:00:12 +02:00
Lephenixnoir
a48c163e55
string: add SH4AL-DSP optimizations for memchr (DONE) 2021-05-23 15:51:09 +02:00
Lephenixnoir
591e453717
sh-generic: add CPU capabilities for optimized SH4 code
On sh-generic targets, the headers <bits/cpucap.h> (in C) and
<bits/asm/cpucap.h> (in assembler) provide definitions to acces the
__cpucap symbol which provides information on the CPU.

Currently, a single capability __CPUCAP_SH4ALDSP is defined; it
represents the SH4 extended instructions together with the integrated
DSP instructions. The main uses of this capability are [movua.l]
(unaligned reads) and [ldrc] (built-in tight loops).

Capabilities are initialized to 0 (their safest default) and the runtime
can enable them based on what hardware is running.
2021-05-23 15:31:01 +02:00
Lephenixnoir
53751aa9a1
string: fill all prototypes in <string.h> 2021-05-23 15:29:37 +02:00
Lephenixnoir
24c6873429
cmake: fix include bits/ not being installed
The file(EXISTS) command needs absolute paths.
2021-05-23 15:27:10 +02:00
Lephenixnoir
d6f606fa5c
string: add and test an optimized memchr (DONE)
This version works on both SH3 and SH4.
2021-05-23 14:30:35 +02:00
Lephenixnoir
b96970e26d
string: memcmp is now tested (DONE) 2021-05-22 09:10:30 +02:00
Lephenixnoir
f5cca84ae8
stdlib: add and test strtod, strtof and atof (DONE)
This uses a generic function strto_fp similar to strto_int that is used
for strtol and its derivatives.
2021-05-21 23:56:35 +02:00
Lephenixnoir
efb37cf783
stdlib: add and test strtold (DONE)
The method is rather naive - digits read as an integer, then multipled
by a power of 10 or 2. This does not always give exact results, but it's
close enough for now. A stub support for long double larger than 64 bits
is provided.
2021-05-21 22:49:55 +02:00
Lephenixnoir
865b01c812
math, fenv, complex: use OpenLibm unconditionally
This won't build on vhex-x86 but that can be left for another time. The
previous approach did not work because the __SUPPORT flags are not
defined when interfacing the library.
2021-05-20 23:19:40 +02:00
Lephenixnoir
6847596bcd
clean up the STATUS file
Also add "!" in front of lines requiring more work to complete for
visual cues of progress.
2021-05-20 16:40:39 +02:00
Lephenixnoir
cc03641522
inttypes: add strtoimax and strtoumax 2021-05-20 16:05:20 +02:00
Lephenixnoir
bc53e756a8
stdlib: fix saturation in strtol, strtoul, strtoll, strtoull 2021-05-20 15:38:37 +02:00
Lephenixnoir
9de2f5c391
math, fenv, complex: add headers through OpenLibm 2021-05-20 11:35:14 +02:00
Lephenixnoir
99339ae9f4
cmake: add arch-specific support flags 2021-05-20 11:35:14 +02:00
Lephenixnoir
ade01b532e
stdlib: add atoi, atol and atoll 2021-05-20 11:35:14 +02:00
Lephenixnoir
06f975f75c
stdlib: add a test strtol, strtoul, strtoll (DONE)
The presumed bug where the value computed without the sign overflows
even though the negative result can be represented is not actually a
problem, because this only happens with signed results and the temporary
value is computed as unsigned (thus with extra range).
2021-05-20 11:03:19 +02:00
Lephenixnoir
5042236392
stdlib: reword strtoull into a generic strto_int
This new function will support strtol, strtoul, and strtoll as well.
2021-05-20 09:23:06 +02:00
Lephenixnoir
b1dc3e77de
stdlib: add and test strtoull (DONE) 2021-05-19 21:50:08 +02:00
Lephenixnoir
41ab197ba2
inttypes: imaxabs and imaxdiv are now tested (DONE) 2021-05-19 21:50:02 +02:00
Lephenixnoir
6e66c531ca
stdlib: abs, labs, llabs, div, ldiv and lldiv are now tested (DONE) 2021-05-19 21:50:00 +02:00
Lephenixnoir
e4c385d0df
stdlib: safeguard prototypes against user-defined macros 2021-05-19 10:12:41 +02:00
Lephenixnoir
36b4854137
inttypes: add imaxabs and imaxdiv (TEST) 2021-05-18 21:31:00 +02:00
Lephenixnoir
73b536bbb6
stdlib: add abs, labs, llabs, div, ldiv, lldiv (TEST) 2021-05-18 21:25:45 +02:00
Lephenixnoir
e8aaadf2e7
inttypes: add PRI* and SCN* macros (LDEPS)
These macros cannot be tested properly until support for *printf and
*scanf is added (support for *printf currently exists but with a
temporary implementation), so this is LDEPS.

The size of the types has been checked though, so the definitions here
should be correct, the rest is printf/scanf logic.
2021-05-18 18:56:06 +02:00
Lephenixnoir
b1fa650914
ctype: test and fix character conversion functions (DONE)
Some shenanigans with the scope of variables in block expressions.
2021-05-18 11:52:17 +02:00
Lephenixnoir
50629bf479
ctype: test and fix character class functions (DONE) 2021-05-18 11:37:37 +02:00
Lephenixnoir
d70a2c671c
add a STATUS file to keep track of implementation progress 2021-05-16 18:12:46 +02:00