-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[libc][complex] Set up headers and add documentation for complex.h. #111659
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@llvm/pr-subscribers-libc Author: Shourya Goel (Sh0g0-1758) ChangesRefer: 7.3.1 from ISO SPEC Full diff: https://github.com/llvm/llvm-project/pull/111659.diff 8 Files Affected:
diff --git a/libc/docs/complex.rst b/libc/docs/complex.rst
new file mode 100644
index 00000000000000..09fbdd7c6179ef
--- /dev/null
+++ b/libc/docs/complex.rst
@@ -0,0 +1,65 @@
+.. include:: check.rst
+
+=========
+complex.h
+=========
+
+Macros
+======
+
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| <Func> | <Func_f> (float) | <Func> (double) | <Func_l> (long double) | <Func_f16> (float16) | <Func_f128> (float128) | C23 Definition Section | C23 Error Handling Section |
++===========+==================+=================+========================+======================+========================+========================+============================+
+| CMPLX | | | | | | 7.3.9.3 | N/A |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+
+Functions
+=========
+
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| <Func> | <Func_f> (float) | <Func> (double) | <Func_l> (long double) | <Func_f16> (float16) | <Func_f128> (float128) | C23 Definition Section | C23 Error Handling Section |
++===========+==================+=================+========================+======================+========================+========================+============================+
+| cacos | | | | | | 7.3.5.1 | G.6.2.1 |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| casin | | | | | | 7.3.5.2 | N/A |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| catan | | | | | | 7.3.5.3 | N/A |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| ccos | | | | | | 7.3.5.4 | N/A |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| csin | | | | | | 7.3.5.5 | N/A |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| ctan | | | | | | 7.3.5.6 | N/A |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| cacosh | | | | | | 7.3.6.1 | G.6.3.1 |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| casinh | | | | | | 7.3.6.2 | G.6.3.2 |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| catanh | | | | | | 7.3.6.3 | G.6.3.3 |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| ccosh | | | | | | 7.3.6.4 | G.6.3.4 |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| csinh | | | | | | 7.3.6.5 | G.6.3.5 |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| ctanh | | | | | | 7.3.6.6 | G.6.3.6 |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| cexp | | | | | | 7.3.7.1 | G.6.4.1 |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| clog | | | | | | 7.3.7.2 | G.6.4.2 |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| cabs | | | | | | 7.3.8.1 | N/A |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| cpow | | | | | | 7.3.8.2 | G.6.5.1 |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| csqrt | | | | | | 7.3.8.3 | G.6.5.2 |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| carg | | | | | | 7.3.9.1 | N/A |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| cimag | | | | | | 7.3.9.2 | N/A |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| conj | | | | | | 7.3.9.4 | N/A |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| cproj | | | | | | 7.3.9.5 | N/A |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
+| creal | | | | | | 7.3.9.6 | N/A |
++-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
diff --git a/libc/docs/index.rst b/libc/docs/index.rst
index d089a800ab90ab..6f759aa215b62c 100644
--- a/libc/docs/index.rst
+++ b/libc/docs/index.rst
@@ -73,6 +73,7 @@ stages there is no ABI stability in any form.
libc_search
c23
ctype
+ complex
signal
threads
setjmp
diff --git a/libc/include/CMakeLists.txt b/libc/include/CMakeLists.txt
index 1f3cb59f69e96e..9a07445ec8b5b6 100644
--- a/libc/include/CMakeLists.txt
+++ b/libc/include/CMakeLists.txt
@@ -202,6 +202,17 @@ add_header_macro(
.llvm-libc-macros.assert_macros
)
+add_header_macro(
+ complex
+ ../libc/newhdrgen/yaml/complex.yaml
+ complex.h.def
+ complex.h
+ DEPENDS
+ .llvm_libc_common_h
+ .llvm-libc-macros.complex_macros
+ .llvm-libc-types._Imaginary
+)
+
add_header_macro(
setjmp
../libc/newhdrgen/yaml/setjmp.yaml
diff --git a/libc/include/complex.h.def b/libc/include/complex.h.def
new file mode 100644
index 00000000000000..65f5765573e840
--- /dev/null
+++ b/libc/include/complex.h.def
@@ -0,0 +1,17 @@
+//===-- C standard library header complex.h -------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_COMPLEX_H
+#define LLVM_LIBC_COMPLEX_H
+
+#include "__llvm-libc-common.h"
+#include "llvm-libc-macros/complex-macros.h"
+
+%%public_api()
+
+#endif // LLVM_LIBC_COMPLEX_H
diff --git a/libc/include/llvm-libc-macros/CMakeLists.txt b/libc/include/llvm-libc-macros/CMakeLists.txt
index 2ba437c8437f28..75194923a452fb 100644
--- a/libc/include/llvm-libc-macros/CMakeLists.txt
+++ b/libc/include/llvm-libc-macros/CMakeLists.txt
@@ -61,6 +61,12 @@ add_macro_header(
fcntl-macros.h
)
+add_macro_header(
+ complex_macros
+ HDR
+ complex-macros.h
+)
+
add_macro_header(
features_macros
HDR
diff --git a/libc/include/llvm-libc-macros/complex-macros.h b/libc/include/llvm-libc-macros/complex-macros.h
new file mode 100644
index 00000000000000..3c239a04f8a6ad
--- /dev/null
+++ b/libc/include/llvm-libc-macros/complex-macros.h
@@ -0,0 +1,30 @@
+//===-- Definition of macros to be used with complex functions ------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef __LLVM_LIBC_MACROS_COMPLEX_MACROS_H
+#define __LLVM_LIBC_MACROS_COMPLEX_MACROS_H
+
+#ifndef __STDC_NO_COMPLEX__
+
+#define __STDC_VERSION_COMPLEX_H__ 202311L
+
+#define complex _Complex
+#define _Complex_I (float _Complex)1.0fi
+
+#ifdef _Imaginary
+#define imaginary _Imaginary
+#define _Imaginary_I (float _Imaginary)1.0i
+
+#define I _Imaginary_I
+#else
+#define I _Complex_I
+#endif
+
+#endif
+
+#endif // __LLVM_LIBC_MACROS_COMPLEX_MACROS_H
diff --git a/libc/include/llvm-libc-types/CMakeLists.txt b/libc/include/llvm-libc-types/CMakeLists.txt
index a4cf4631c8470e..f0dadc99099c7d 100644
--- a/libc/include/llvm-libc-types/CMakeLists.txt
+++ b/libc/include/llvm-libc-types/CMakeLists.txt
@@ -17,6 +17,7 @@ add_header(__qsortrcompare_t HDR __qsortrcompare_t.h)
add_header(__sighandler_t HDR __sighandler_t.h)
add_header(__thread_type HDR __thread_type.h)
add_header(blkcnt_t HDR blkcnt_t.h)
+add_header(_Imaginary HDR _Imaginary.h)
add_header(blksize_t HDR blksize_t.h)
add_header(cc_t HDR cc_t.h)
add_header(clock_t HDR clock_t.h)
diff --git a/libc/include/llvm-libc-types/_Imaginary.h b/libc/include/llvm-libc-types/_Imaginary.h
new file mode 100644
index 00000000000000..ad51bc1d37b569
--- /dev/null
+++ b/libc/include/llvm-libc-types/_Imaginary.h
@@ -0,0 +1,14 @@
+//===-- Definition of _Imaginary type -------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_TYPES__Imaginary_H
+#define LLVM_LIBC_TYPES__Imaginary_H
+
+typedef /* TODO */ _Imaginary;
+
+#endif // LLVM_LIBC_TYPES__Imaginary_H
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Very cool, I was looking forward to having complex numbers in libc.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you also add proxy header and include C and C++ tests to make sure they can be built?
✅ With the latest revision this PR passed the C/C++ code formatter. |
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/71/builds/8445 Here is the relevant piece of the build log for the reference
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/179/builds/8218 Here is the relevant piece of the build log for the reference
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/131/builds/8368 Here is the relevant piece of the build log for the reference
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/171/builds/8267 Here is the relevant piece of the build log for the reference
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/183/builds/4984 Here is the relevant piece of the build log for the reference
|
The RISC-V bot is still catching up. You can probably ignore this failure for now, but if it's still failing tomorrow please check it out. |
…lvm#111659) Refer: 7.3.1 from [ISO SPEC](https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf) I have added complex variants of F16 and F128 in libc doc but have omitted support for them since we will have to first investigate how their support matrix for clang and gcc looks like, and then add header guards for them accordingly. Planning to add them in follow up PRs once this gets landed.
Fix buildbot errors due to llvm#111659
Refer: 7.3.1 from ISO SPEC
I have added complex variants of F16 and F128 in libc doc but have omitted support for them since we will have to first investigate how their support matrix for clang and gcc looks like, and then add header guards for them accordingly. Planning to add them in follow up PRs once this gets landed.