1188 Commits

Author SHA1 Message Date
Tue Ly
1427550151 [libc] Add a testing macro for MPFR matchers skipping explainError calls.
Adding `EXPECT_MPFR_MATCH_ROUNDING_SILENTLY` macro that does not call
`explainError` when the tests fail.  This is useful to check the passing or
failing rates, such as hitting percentages of fast passes in math
implementations.

Reviewed By: michaelrj, sivachandra

Differential Revision: https://reviews.llvm.org/D136731
2022-10-26 18:11:45 -04:00
Siva Chandra
07b7023181 [libc] Enable more entrypoints on aarch64. 2022-10-26 14:03:15 -07:00
Michael Jones
2cd20ad90e [libc] tighten strtofloat cutoffs
When a number for strtofloat has an exponent that's too big or small, it
doesn't need to be calculated precisely since it is guaranteed to be
either INF or 0.0. This tightens those cutoffs to improve performance.

Reviewed By: sivachandra

Differential Revision: https://reviews.llvm.org/D136699
2022-10-26 11:17:15 -07:00
Siva Chandra
f8490601c2 [libc] Enable a few entrypoints on aarch64 already available on x86_64. 2022-10-25 15:41:41 -07:00
Siva Chandra Reddy
22ea0e5d9b [libc] Add Linux implementations of time and clock functions.
Reviewed By: michaelrj

Differential Revision: https://reviews.llvm.org/D136666
2022-10-25 18:06:05 +00:00
Guillaume Chatelet
0284148813 [libc] Switch to new implementation of mem* functions
The new framework makes it explicit which processor feature is being
used and allows for easier per platform customization:
 - ARM cpu now uses trivial implementations to reduce code size.
 - Memcmp, Bcmp and Memmove have been optimized for x86
 - Bcmp has been optimized for aarch64.

This is a reland of https://reviews.llvm.org/D135134 (b3f1d58)

Differential Revision: https://reviews.llvm.org/D136595
2022-10-25 10:49:34 +00:00
Siva Chandra Reddy
6faf40bb75 [libc] Add the header sys/types.h.
Reviewed By: michaelrj

Differential Revision: https://reviews.llvm.org/D136642
2022-10-25 00:24:49 +00:00
Raman Tenneti
cec276ac91 [libc] Build fix.
Build fix.

Reviewed By: rtenneti

Differential Revision: https://reviews.llvm.org/D136647
2022-10-24 16:18:52 -07:00
Raman Tenneti
12204429f2 [libc] Add implementation of difftime function.
The difftime function computes the difference between two calendar
times: time1 - time0 as per as per 7.27.2.2 section in
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2478.pdf.

  double difftime(time_t time1, time_t time0);

Tested:
Unit tests

Co-authored-by: Jeff Bailey <jeffbailey@google.com>

Reviewed By: jeffbailey

Differential Revision: https://reviews.llvm.org/D136631
2022-10-24 15:14:26 -07:00
Michael Jones
551c7aed70 [libc] add performance options for string to float
This allows the client to set compile flags to disable the passes that
the string to float function uses. A client may be willing to trade off
performance for a reduction in code size, and this allows for that
fine-tuning.

Reviewed By: sivachandra

Differential Revision: https://reviews.llvm.org/D136495
2022-10-24 11:36:16 -07:00
Guillaume Chatelet
d7917fdc0f [libc] Use cpp::byte instead of char in mem* functions
`cpp::byte` is better than `char` which -depending on platform- can be `signed char` or `unsigned char`.  This has introduced subtle arithmetic errors.
2022-10-24 10:30:32 +00:00
Guillaume Chatelet
282fe5084d [libc] Fix generic 32-bit implementation of Bcmp/Memcmp 2022-10-24 10:15:28 +00:00
Guillaume Chatelet
55509b1136 [libc] Fix broken tests on arm32 2022-10-24 09:54:19 +00:00
Guillaume Chatelet
69090143f5 [libc] mem* framework v3
This version is more composable and also simpler at the expense of being more explicit and more verbose.

This patch provides rationale for the framework, implementation and unit tests but the functions themselves are still using the previous version. The change in implementation will come in a follow up patch.

Differential Revision: https://reviews.llvm.org/D136292
2022-10-24 09:13:46 +00:00
Schrodinger ZHU Yifan
12c62a6718 clean up std::iterator in LibcBenchmark.h
Reviewed By: gchatelet

Differential Revision: https://reviews.llvm.org/D135540
2022-10-23 10:33:45 +00:00
Guillaume Chatelet
6abea7a17e
[libc] Add missing is_unsigned in type_traits.h 2022-10-23 12:08:44 +02:00
Guillaume Chatelet
d02525cab7 [libc] Add cpp::byte
This provides the equivalent of std::byte.
std::byte is a distinct type that implements the concept of byte as specified in the C++ language definition.
https://en.cppreference.com/w/cpp/types/byte

Differential Revision: https://reviews.llvm.org/D136294
2022-10-22 20:54:14 +00:00
Siva Chandra Reddy
0480b45e9e [libc] Add implementation of fgetc.
Reviewed By: michaelrj

Differential Revision: https://reviews.llvm.org/D136421
2022-10-22 03:34:44 +00:00
Siva Chandra Reddy
2a038f9138 [libc] Add stdin definition.
Reviewed By: michaelrj

Differential Revision: https://reviews.llvm.org/D136398
2022-10-22 03:27:31 +00:00
Siva Chandra Reddy
be4e425758 [libc] Add select.h and the implementation of the select function for Linux.
Reviewed By: michaelrj

Differential Revision: https://reviews.llvm.org/D136375
2022-10-22 03:17:48 +00:00
Siva Chandra Reddy
52d707d9fd [libc][Obvious] Add few missing license headers. 2022-10-21 00:01:36 +00:00
Michael Jones
f1190bc0db [libc][obvious] fix comparison test cmake
The name of the libc target changed, this patch updates the cmake for
the string to float comparison test to use the correct name.

Reviewed By: sivachandra

Differential Revision: https://reviews.llvm.org/D136388
2022-10-20 16:23:32 -07:00
Guillaume Chatelet
3c438f6119 Revert D136292 "[libc] mem* framework v3"
This breaks llvm-libc build bots:
 - libc-x86_64-debian-dbg-asan
 - libc-x86_64-debian-fullbuild-dbg-asan
Address sanitizers fail with "AddressSanitizer: invalid alignment requested in aligned_alloc: 64, alignment must be a power of two and the requested size 0x41 must be a multiple of alignment (thread T0)"
 - libc-aarch64-ubuntu-dbg
 - libc-aarch64-ubuntu-fullbuild-dbg
https://lab.llvm.org/buildbot/#/builders/223/builds/8877/steps/7/logs/stdio
 - libc-arm32-debian-dbg
https://lab.llvm.org/buildbot/#/builders/229/builds/5201/steps/7/logs/stdio

This reverts commit 903cc71a82431d79e5fb541946a9e7c93750e374.
2022-10-20 13:59:05 +00:00
Guillaume Chatelet
903cc71a82 [libc] mem* framework v3
This version is more composable and also simpler at the expense of being more explicit and more verbose.

This patch provides rationale for the framework, implementation and unit tests but the functions themselves are still using the previous version. The change in implementation will come in a follow up patch.

Differential Revision: https://reviews.llvm.org/D136292
2022-10-20 13:44:07 +00:00
Guillaume Chatelet
35fb67a995 [libc][automemcpy] fix build after change in Arg enum 2022-10-20 11:59:19 +00:00
Guillaume Chatelet
3f81126a33 [libc][NFC] add missing static qualifiers in tests 2022-10-20 08:52:56 +00:00
Guillaume Chatelet
e4b4d0f74f [libc][NFC] remove unneeded -lpthread for utils_test 2022-10-20 08:48:50 +00:00
Siva Chandra Reddy
9ec0ad75f5 [libc][Obvious] Fix incomplete spec definition of sys/random.h. 2022-10-20 06:57:00 +00:00
Siva Chandra Reddy
c03ea285bd [libc][Obvious] Add termios.h to the list of x86_64 linux headers. 2022-10-19 23:00:15 +00:00
Siva Chandra Reddy
67957368ae [libc] Add implementation of sigaltstack for linux.
Reviewed By: michaelrj

Differential Revision: https://reviews.llvm.org/D135949
2022-10-18 22:04:30 +00:00
Siva Chandra Reddy
18daa8255a [libc][Obvious] Skip some termios tests when there no is /dev/tty. 2022-10-18 20:58:50 +00:00
Siva Chandra Reddy
b2a294bcf8 [libc] Add termios.h and the implementation of functions declared in it.
Reviewed By: lntue, michaelrj

Differential Revision: https://reviews.llvm.org/D136143
2022-10-18 20:53:00 +00:00
Guillaume Chatelet
a786096f9d [libc][NFC] Cleanup and document utils.h 2022-10-18 14:32:39 +00:00
Guillaume Chatelet
2e3b8b31ce [libc][NFC] Use ASSERT instead of EXPECT in tests 2022-10-18 14:32:39 +00:00
Jeff Bailey
7caae24473 [libc]Identify which processors are completed for Math
Switch from green checkmarks to the following legend:

X = x86_64
A = aarch64
a = arm32

Reviewed By: lntue

Differential Revision: https://reviews.llvm.org/D136020
2022-10-18 03:12:44 +00:00
Michael Jones
40b494396b [libc] add putc, fputc, and putchar
These three functions are simple, but needed for libc build testing.

Reviewed By: lntue

Differential Revision: https://reviews.llvm.org/D135990
2022-10-17 16:29:04 -07:00
Jeff Bailey
998d1ebb27 [libc][cleanup] Docs clean up
* Make consistent heading names
 * Factor out |check| into an include for reuse
 * Use it everywhere (No more YES or UTF-8)
 * Remove unneeded summary from pages. People know why they're there.
 * Ensure source location headers everywhere.

Differential Revision: https://reviews.llvm.org/D136016
2022-10-15 15:29:48 +00:00
Sterling Augustine
d8415b02a5 Revert "[libc] New version of the mem* framework"
This reverts commit https://reviews.llvm.org/D135134 (b3f1d58a131eb546aaf1ac165c77ccb89c40d758)

That revision appears to have broken Arm memcpy in some subtle
ways. Am communicating with the original author to get a
good reproduction.
2022-10-14 12:32:20 -07:00
Siva Chandra Reddy
8b0e84a6f6 [libc] Add implementation of the POSIX getcwd function.
Reviewed By: michaelrj

Differential Revision: https://reviews.llvm.org/D135905
2022-10-14 16:20:59 +00:00
Guillaume Chatelet
b3f1d58a13 [libc] New version of the mem* framework
This version is more composable and also simpler at the expense of being more explicit and more verbose. It also provides minimal implementations for ARM platforms.

    Codegen can be checked here https://godbolt.org/z/chf1Y6eGM

    Differential Revision: https://reviews.llvm.org/D135134
2022-10-14 13:46:42 +00:00
Guillaume Chatelet
6d252a4888 Revert "[libc] New version of the mem* framework"
This reverts commit 9721687835a7df5da0c9482cf684c11b8ba97f75.
2022-10-14 13:21:52 +00:00
Guillaume Chatelet
84f887c82b Revert "[libc] Fix embedded version of bcmp / memcmp"
This reverts commit 7c9b8fa6d2d921569a1ebeb4816edb7b05a37cdd.
2022-10-14 13:21:19 +00:00
Guillaume Chatelet
7c9b8fa6d2 [libc] Fix embedded version of bcmp / memcmp 2022-10-14 13:09:53 +00:00
Guillaume Chatelet
9721687835 [libc] New version of the mem* framework
This version is more composable and also simpler at the expense of being more explicit and more verbose. It also provides minimal implementations for ARM platforms.

Codegen can be checked here https://godbolt.org/z/x19zvE59v

Differential Revision: https://reviews.llvm.org/D135134
2022-10-14 12:42:54 +00:00
Guillaume Chatelet
4fed4b0943 Revert "[libc] New version of the mem* framework"
This reverts commit 98bf836f3127a346a81da5ae3e27246935298de4.
2022-10-14 12:27:04 +00:00
Guillaume Chatelet
98bf836f31 [libc] New version of the mem* framework
This version is more composable and also simpler at the expense of being more explicit and more verbose. It also provides minimal implementations for ARM platforms.

Codegen can be checked here https://godbolt.org/z/x19zvE59v

Differential Revision: https://reviews.llvm.org/D135134
2022-10-14 12:25:03 +00:00
Siva Chandra Reddy
02a543db66 [libc] Add a simple implementation of the posix_spawn function.
The implementation currently ignores all spawn attributes. Support for
them will be added in future changes.

A simple allocator for integration tests has been added so that the
integration test for posix_spawn can use the
posix_spawn_file_actions_add* functions.

Reviewed By: michaelrj

Differential Revision: https://reviews.llvm.org/D135752
2022-10-13 18:47:47 +00:00
Guillaume Chatelet
9d1f6466e5 Revert "[libc] New version of the mem* framework"
This reverts commit d55f2d8ab076298cfd745c05c1b4dfd5583f8b9e.
2022-10-13 14:49:58 +00:00
Guillaume Chatelet
d55f2d8ab0 [libc] New version of the mem* framework
This version is more composable and also simpler at the expense of being more explicit and more verbose. It also provides minimal implementations for ARM platforms.

Codegen can be checked here https://godbolt.org/z/x19zvE59v

Differential Revision: https://reviews.llvm.org/D135134
2022-10-13 14:44:03 +00:00
Michael Jones
35a4fe4c0b [libc] add headers sys/auxv sys/prctl and sys/time
These headers are uncommonly used, and from extensions, but some basic
support is needed. Macros have been added where available.

Reviewed By: sivachandra

Differential Revision: https://reviews.llvm.org/D135731
2022-10-12 13:19:50 -07:00