forked from SerenityOS/serenity
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
8a007e7
commit 3f0be4e
Showing
3 changed files
with
91 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,7 @@ | ||
set(LIBC_SOURCES | ||
arpa/inet.cpp | ||
assert.cpp | ||
complex.cpp | ||
ctype.cpp | ||
cxxabi.cpp | ||
dirent.cpp | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
/* | ||
* Copyright (c) 2022, Peter Elliott <[email protected]> | ||
* | ||
* SPDX-License-Identifier: BSD-2-Clause | ||
*/ | ||
|
||
#include <complex.h> | ||
|
||
extern "C" { | ||
|
||
// Function definitions of this form "type (name)(args)" are intentional, to | ||
// prevent macro versions of "name" from being incorrectly expanded. These | ||
// functions are here to provide external linkage to their macro implementations. | ||
|
||
// https://pubs.opengroup.org/onlinepubs/9699919799/functions/creal.html | ||
float(crealf)(float complex z) | ||
{ | ||
return crealf(z); | ||
} | ||
|
||
double(creal)(double complex z) | ||
{ | ||
return creal(z); | ||
} | ||
|
||
long double(creall)(long double complex z) | ||
{ | ||
return creall(z); | ||
} | ||
|
||
// https://pubs.opengroup.org/onlinepubs/9699919799/functions/cimag.html | ||
double(cimag)(double complex z) | ||
{ | ||
return cimag(z); | ||
} | ||
|
||
float(cimagf)(float complex z) | ||
{ | ||
return cimagf(z); | ||
} | ||
|
||
long double(cimagl)(long double complex z) | ||
{ | ||
return cimagl(z); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
/* | ||
* Copyright (c) 2022, Peter Elliott <[email protected]> | ||
* | ||
* SPDX-License-Identifier: BSD-2-Clause | ||
*/ | ||
|
||
/* complex arithmetic | ||
* | ||
* https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/complex.h.html | ||
*/ | ||
|
||
#pragma once | ||
|
||
#include <stddef.h> | ||
|
||
__BEGIN_DECLS | ||
|
||
#define complex _Complex | ||
|
||
#define _Complex_I (0.0f + 1.0fi) | ||
#define I _Complex_I | ||
|
||
#define CMPLX(x, y) ((double complex)__builtin_complex((double)x, (double)y)) | ||
#define CMPLXF(x, y) ((float complex)__builtin_complex((float)x, (float)y)) | ||
#define CMPLXL(x, y) ((long double complex)__builtin_complex((long double)x, (long double)y)) | ||
|
||
float crealf(float complex z); | ||
double creal(double complex z); | ||
long double creall(long double complex z); | ||
|
||
double cimag(double complex z); | ||
float cimagf(float complex z); | ||
long double cimagl(long double complex z); | ||
|
||
// These are macro implementations of the above functions, so that they will always be inlined. | ||
#define creal(z) ((double)__real__((double complex)z)) | ||
#define crealf(z) ((float)__real__((float complex)z)) | ||
#define creall(z) ((long double)__real__((long double complex)z)) | ||
|
||
#define cimag(z) ((double)__imag__((double complex)z)) | ||
#define cimagf(z) ((float)__imag__((float complex)z)) | ||
#define cimagl(z) ((long double)__imag__((long double complex)z)) | ||
|
||
__END_DECLS |