mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-23 13:52:28 +00:00
Perform some code cleanup
This commit is contained in:
parent
cc1732bc42
commit
210187cf77
205 changed files with 1748 additions and 2595 deletions
|
@ -23,7 +23,6 @@
|
||||||
#include "libc/mem/alloca.h"
|
#include "libc/mem/alloca.h"
|
||||||
#include "libc/mem/arraylist2.internal.h"
|
#include "libc/mem/arraylist2.internal.h"
|
||||||
#include "libc/mem/mem.h"
|
#include "libc/mem/mem.h"
|
||||||
#include "libc/str/oldutf16.internal.h"
|
|
||||||
#include "libc/str/str.h"
|
#include "libc/str/str.h"
|
||||||
#include "libc/str/thompike.h"
|
#include "libc/str/thompike.h"
|
||||||
#include "libc/str/utf16.h"
|
#include "libc/str/utf16.h"
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
#include "libc/intrin/weaken.h"
|
#include "libc/intrin/weaken.h"
|
||||||
#include "libc/mem/mem.h"
|
#include "libc/mem/mem.h"
|
||||||
#include "libc/runtime/runtime.h"
|
#include "libc/runtime/runtime.h"
|
||||||
#include "libc/str/oldutf16.internal.h"
|
|
||||||
#include "libc/str/str.h"
|
#include "libc/str/str.h"
|
||||||
#include "libc/str/tab.internal.h"
|
#include "libc/str/tab.internal.h"
|
||||||
#include "libc/str/tpdecodecb.internal.h"
|
#include "libc/str/tpdecodecb.internal.h"
|
||||||
|
|
|
@ -848,5 +848,11 @@ typedef struct {
|
||||||
#define STATIC_YOINK_SOURCE(PATH)
|
#define STATIC_YOINK_SOURCE(PATH)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define __strong_reference(sym, aliassym) \
|
||||||
|
extern typeof(sym) aliassym __attribute__((__alias__(#sym)))
|
||||||
|
#define __weak_reference(sym, alias) \
|
||||||
|
asm(".weak\t" #alias "\n\t" \
|
||||||
|
".equ\t" #alias ", " #sym)
|
||||||
|
|
||||||
#define MACHINE_CODE_ANALYSIS_BEGIN_
|
#define MACHINE_CODE_ANALYSIS_BEGIN_
|
||||||
#define MACHINE_CODE_ANALYSIS_END_
|
#define MACHINE_CODE_ANALYSIS_END_
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
#include "libc/intrin/intrin.h"
|
|
||||||
#include "libc/intrin/kprintf.h"
|
#include "libc/intrin/kprintf.h"
|
||||||
|
|
||||||
void __cxa_pure_virtual(void) {
|
void __cxa_pure_virtual(void) {
|
||||||
|
|
|
@ -38,3 +38,45 @@
|
||||||
int(_bsf)(int x) {
|
int(_bsf)(int x) {
|
||||||
return _bsf(x);
|
return _bsf(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns position of first bit set.
|
||||||
|
*
|
||||||
|
* ctz(𝑥) 31^clz(𝑥) clz(𝑥)
|
||||||
|
* uint32 𝑥 _bsf(𝑥) tzcnt(𝑥) ffs(𝑥) _bsr(𝑥) lzcnt(𝑥)
|
||||||
|
* 0x00000000 wut 32 0 wut 32
|
||||||
|
* 0x00000001 0 0 1 0 31
|
||||||
|
* 0x80000001 0 0 1 31 0
|
||||||
|
* 0x80000000 31 31 32 31 0
|
||||||
|
* 0x00000010 4 4 5 4 27
|
||||||
|
* 0x08000010 4 4 5 27 4
|
||||||
|
* 0x08000000 27 27 28 27 4
|
||||||
|
* 0xffffffff 0 0 1 31 0
|
||||||
|
*
|
||||||
|
* @param 𝑥 is a 64-bit integer
|
||||||
|
* @return number in range 0..63 or undefined if 𝑥 is 0
|
||||||
|
*/
|
||||||
|
int(_bsfl)(long x) {
|
||||||
|
return _bsfl(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns position of first bit set.
|
||||||
|
*
|
||||||
|
* ctz(𝑥) 31^clz(𝑥) clz(𝑥)
|
||||||
|
* uint32 𝑥 _bsf(𝑥) tzcnt(𝑥) ffs(𝑥) _bsr(𝑥) lzcnt(𝑥)
|
||||||
|
* 0x00000000 wut 32 0 wut 32
|
||||||
|
* 0x00000001 0 0 1 0 31
|
||||||
|
* 0x80000001 0 0 1 31 0
|
||||||
|
* 0x80000000 31 31 32 31 0
|
||||||
|
* 0x00000010 4 4 5 4 27
|
||||||
|
* 0x08000010 4 4 5 27 4
|
||||||
|
* 0x08000000 27 27 28 27 4
|
||||||
|
* 0xffffffff 0 0 1 31 0
|
||||||
|
*
|
||||||
|
* @param 𝑥 is a 64-bit integer
|
||||||
|
* @return number in range 0..63 or undefined if 𝑥 is 0
|
||||||
|
*/
|
||||||
|
int(_bsfll)(long long x) {
|
||||||
|
return _bsfll(x);
|
||||||
|
}
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
|
||||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
|
||||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
|
||||||
│ Copyright 2020 Justine Alexandra Roberts Tunney │
|
|
||||||
│ │
|
|
||||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
|
||||||
│ any purpose with or without fee is hereby granted, provided that the │
|
|
||||||
│ above copyright notice and this permission notice appear in all copies. │
|
|
||||||
│ │
|
|
||||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
|
||||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
|
||||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
|
||||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
|
||||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
|
||||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
|
||||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
|
||||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
|
||||||
#include "libc/intrin/bsf.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns position of first bit set.
|
|
||||||
*
|
|
||||||
* ctz(𝑥) 31^clz(𝑥) clz(𝑥)
|
|
||||||
* uint32 𝑥 _bsf(𝑥) tzcnt(𝑥) ffs(𝑥) _bsr(𝑥) lzcnt(𝑥)
|
|
||||||
* 0x00000000 wut 32 0 wut 32
|
|
||||||
* 0x00000001 0 0 1 0 31
|
|
||||||
* 0x80000001 0 0 1 31 0
|
|
||||||
* 0x80000000 31 31 32 31 0
|
|
||||||
* 0x00000010 4 4 5 4 27
|
|
||||||
* 0x08000010 4 4 5 27 4
|
|
||||||
* 0x08000000 27 27 28 27 4
|
|
||||||
* 0xffffffff 0 0 1 31 0
|
|
||||||
*
|
|
||||||
* @param 𝑥 is a 64-bit integer
|
|
||||||
* @return number in range 0..63 or undefined if 𝑥 is 0
|
|
||||||
*/
|
|
||||||
int(_bsfl)(long x) {
|
|
||||||
return _bsfl(x);
|
|
||||||
}
|
|
|
@ -1,40 +0,0 @@
|
||||||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
|
||||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
|
||||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
|
||||||
│ Copyright 2020 Justine Alexandra Roberts Tunney │
|
|
||||||
│ │
|
|
||||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
|
||||||
│ any purpose with or without fee is hereby granted, provided that the │
|
|
||||||
│ above copyright notice and this permission notice appear in all copies. │
|
|
||||||
│ │
|
|
||||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
|
||||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
|
||||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
|
||||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
|
||||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
|
||||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
|
||||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
|
||||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
|
||||||
#include "libc/intrin/bsf.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns position of first bit set.
|
|
||||||
*
|
|
||||||
* ctz(𝑥) 31^clz(𝑥) clz(𝑥)
|
|
||||||
* uint32 𝑥 _bsf(𝑥) tzcnt(𝑥) ffs(𝑥) _bsr(𝑥) lzcnt(𝑥)
|
|
||||||
* 0x00000000 wut 32 0 wut 32
|
|
||||||
* 0x00000001 0 0 1 0 31
|
|
||||||
* 0x80000001 0 0 1 31 0
|
|
||||||
* 0x80000000 31 31 32 31 0
|
|
||||||
* 0x00000010 4 4 5 4 27
|
|
||||||
* 0x08000010 4 4 5 27 4
|
|
||||||
* 0x08000000 27 27 28 27 4
|
|
||||||
* 0xffffffff 0 0 1 31 0
|
|
||||||
*
|
|
||||||
* @param 𝑥 is a 64-bit integer
|
|
||||||
* @return number in range 0..63 or undefined if 𝑥 is 0
|
|
||||||
*/
|
|
||||||
int(_bsfll)(long long x) {
|
|
||||||
return _bsfll(x);
|
|
||||||
}
|
|
|
@ -38,3 +38,45 @@
|
||||||
int(_bsr)(int x) {
|
int(_bsr)(int x) {
|
||||||
return _bsr(x);
|
return _bsr(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns binary logarithm of 𝑥.
|
||||||
|
*
|
||||||
|
* ctz(𝑥) 31^clz(𝑥) clz(𝑥)
|
||||||
|
* uint32 𝑥 _bsf(𝑥) tzcnt(𝑥) ffs(𝑥) _bsr(𝑥) lzcnt(𝑥)
|
||||||
|
* 0x00000000 wut 32 0 wut 32
|
||||||
|
* 0x00000001 0 0 1 0 31
|
||||||
|
* 0x80000001 0 0 1 31 0
|
||||||
|
* 0x80000000 31 31 32 31 0
|
||||||
|
* 0x00000010 4 4 5 4 27
|
||||||
|
* 0x08000010 4 4 5 27 4
|
||||||
|
* 0x08000000 27 27 28 27 4
|
||||||
|
* 0xffffffff 0 0 1 31 0
|
||||||
|
*
|
||||||
|
* @param x is a 64-bit integer
|
||||||
|
* @return number in range 0..63 or undefined if 𝑥 is 0
|
||||||
|
*/
|
||||||
|
int(_bsrl)(long x) {
|
||||||
|
return _bsrl(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns binary logarithm of 𝑥.
|
||||||
|
*
|
||||||
|
* ctz(𝑥) 31^clz(𝑥) clz(𝑥)
|
||||||
|
* uint32 𝑥 _bsf(𝑥) tzcnt(𝑥) ffs(𝑥) _bsr(𝑥) lzcnt(𝑥)
|
||||||
|
* 0x00000000 wut 32 0 wut 32
|
||||||
|
* 0x00000001 0 0 1 0 31
|
||||||
|
* 0x80000001 0 0 1 31 0
|
||||||
|
* 0x80000000 31 31 32 31 0
|
||||||
|
* 0x00000010 4 4 5 4 27
|
||||||
|
* 0x08000010 4 4 5 27 4
|
||||||
|
* 0x08000000 27 27 28 27 4
|
||||||
|
* 0xffffffff 0 0 1 31 0
|
||||||
|
*
|
||||||
|
* @param x is a 64-bit integer
|
||||||
|
* @return number in range 0..63 or undefined if 𝑥 is 0
|
||||||
|
*/
|
||||||
|
int(_bsrll)(long long x) {
|
||||||
|
return _bsrll(x);
|
||||||
|
}
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
|
||||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
|
||||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
|
||||||
│ Copyright 2020 Justine Alexandra Roberts Tunney │
|
|
||||||
│ │
|
|
||||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
|
||||||
│ any purpose with or without fee is hereby granted, provided that the │
|
|
||||||
│ above copyright notice and this permission notice appear in all copies. │
|
|
||||||
│ │
|
|
||||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
|
||||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
|
||||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
|
||||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
|
||||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
|
||||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
|
||||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
|
||||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
|
||||||
#include "libc/intrin/bsr.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns binary logarithm of 𝑥.
|
|
||||||
*
|
|
||||||
* ctz(𝑥) 31^clz(𝑥) clz(𝑥)
|
|
||||||
* uint32 𝑥 _bsf(𝑥) tzcnt(𝑥) ffs(𝑥) _bsr(𝑥) lzcnt(𝑥)
|
|
||||||
* 0x00000000 wut 32 0 wut 32
|
|
||||||
* 0x00000001 0 0 1 0 31
|
|
||||||
* 0x80000001 0 0 1 31 0
|
|
||||||
* 0x80000000 31 31 32 31 0
|
|
||||||
* 0x00000010 4 4 5 4 27
|
|
||||||
* 0x08000010 4 4 5 27 4
|
|
||||||
* 0x08000000 27 27 28 27 4
|
|
||||||
* 0xffffffff 0 0 1 31 0
|
|
||||||
*
|
|
||||||
* @param x is a 64-bit integer
|
|
||||||
* @return number in range 0..63 or undefined if 𝑥 is 0
|
|
||||||
*/
|
|
||||||
int(_bsrl)(long x) {
|
|
||||||
return _bsrl(x);
|
|
||||||
}
|
|
|
@ -1,40 +0,0 @@
|
||||||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
|
||||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
|
||||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
|
||||||
│ Copyright 2020 Justine Alexandra Roberts Tunney │
|
|
||||||
│ │
|
|
||||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
|
||||||
│ any purpose with or without fee is hereby granted, provided that the │
|
|
||||||
│ above copyright notice and this permission notice appear in all copies. │
|
|
||||||
│ │
|
|
||||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
|
||||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
|
||||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
|
||||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
|
||||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
|
||||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
|
||||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
|
||||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
|
||||||
#include "libc/intrin/bsr.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns binary logarithm of 𝑥.
|
|
||||||
*
|
|
||||||
* ctz(𝑥) 31^clz(𝑥) clz(𝑥)
|
|
||||||
* uint32 𝑥 _bsf(𝑥) tzcnt(𝑥) ffs(𝑥) _bsr(𝑥) lzcnt(𝑥)
|
|
||||||
* 0x00000000 wut 32 0 wut 32
|
|
||||||
* 0x00000001 0 0 1 0 31
|
|
||||||
* 0x80000001 0 0 1 31 0
|
|
||||||
* 0x80000000 31 31 32 31 0
|
|
||||||
* 0x00000010 4 4 5 4 27
|
|
||||||
* 0x08000010 4 4 5 27 4
|
|
||||||
* 0x08000000 27 27 28 27 4
|
|
||||||
* 0xffffffff 0 0 1 31 0
|
|
||||||
*
|
|
||||||
* @param x is a 64-bit integer
|
|
||||||
* @return number in range 0..63 or undefined if 𝑥 is 0
|
|
||||||
*/
|
|
||||||
int(_bsrll)(long long x) {
|
|
||||||
return _bsrll(x);
|
|
||||||
}
|
|
|
@ -20,11 +20,7 @@
|
||||||
#include "libc/fmt/itoa.h"
|
#include "libc/fmt/itoa.h"
|
||||||
#include "libc/intrin/describeflags.internal.h"
|
#include "libc/intrin/describeflags.internal.h"
|
||||||
|
|
||||||
#ifdef DescribeArchPrctlCode
|
const char *(DescribeArchPrctlCode)(char buf[12], int x) {
|
||||||
#undef DescribeArchPrctlCode
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const char *DescribeArchPrctlCode(char buf[12], int x) {
|
|
||||||
if (x == ARCH_SET_FS) return "ARCH_SET_FS";
|
if (x == ARCH_SET_FS) return "ARCH_SET_FS";
|
||||||
if (x == ARCH_GET_FS) return "ARCH_GET_FS";
|
if (x == ARCH_GET_FS) return "ARCH_GET_FS";
|
||||||
if (x == ARCH_SET_GS) return "ARCH_SET_GS";
|
if (x == ARCH_SET_GS) return "ARCH_SET_GS";
|
||||||
|
|
|
@ -20,15 +20,11 @@
|
||||||
#include "libc/intrin/kprintf.h"
|
#include "libc/intrin/kprintf.h"
|
||||||
#include "libc/nexgen32e/stackframe.h"
|
#include "libc/nexgen32e/stackframe.h"
|
||||||
|
|
||||||
#ifdef DescribeBacktrace
|
|
||||||
#undef DescribeBacktrace
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define N 64
|
#define N 64
|
||||||
|
|
||||||
#define append(...) o += ksnprintf(buf + o, N - o, __VA_ARGS__)
|
#define append(...) o += ksnprintf(buf + o, N - o, __VA_ARGS__)
|
||||||
|
|
||||||
const char *DescribeBacktrace(char buf[N], struct StackFrame *fr) {
|
const char *(DescribeBacktrace)(char buf[N], struct StackFrame *fr) {
|
||||||
int o = 0;
|
int o = 0;
|
||||||
bool gotsome = false;
|
bool gotsome = false;
|
||||||
while (fr) {
|
while (fr) {
|
||||||
|
|
|
@ -22,10 +22,6 @@
|
||||||
#include "libc/str/str.h"
|
#include "libc/str/str.h"
|
||||||
#include "libc/sysv/consts/cap.h"
|
#include "libc/sysv/consts/cap.h"
|
||||||
|
|
||||||
#ifdef DescribeCapability
|
|
||||||
#undef DescribeCapability
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const struct thatispacked {
|
static const struct thatispacked {
|
||||||
unsigned char x;
|
unsigned char x;
|
||||||
const char *s;
|
const char *s;
|
||||||
|
@ -73,7 +69,7 @@ static const struct thatispacked {
|
||||||
{CAP_CHECKPOINT_RESTORE, "CHECKPOINT_RESTORE"}, //
|
{CAP_CHECKPOINT_RESTORE, "CHECKPOINT_RESTORE"}, //
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *DescribeCapability(char buf[32], int x) {
|
const char *(DescribeCapability)(char buf[32], int x) {
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < ARRAYLEN(kCapabilityName); ++i) {
|
for (i = 0; i < ARRAYLEN(kCapabilityName); ++i) {
|
||||||
if (kCapabilityName[i].x == x) {
|
if (kCapabilityName[i].x == x) {
|
||||||
|
|
|
@ -20,11 +20,7 @@
|
||||||
#include "libc/intrin/describeflags.internal.h"
|
#include "libc/intrin/describeflags.internal.h"
|
||||||
#include "libc/sysv/consts/at.h"
|
#include "libc/sysv/consts/at.h"
|
||||||
|
|
||||||
#ifdef DescribeDirfd
|
const char *(DescribeDirfd)(char buf[12], int dirfd) {
|
||||||
#undef DescribeDirfd
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const char *DescribeDirfd(char buf[12], int dirfd) {
|
|
||||||
if (dirfd == AT_FDCWD) return "AT_FDCWD";
|
if (dirfd == AT_FDCWD) return "AT_FDCWD";
|
||||||
FormatInt32(buf, dirfd);
|
FormatInt32(buf, dirfd);
|
||||||
return buf;
|
return buf;
|
||||||
|
|
|
@ -21,11 +21,7 @@
|
||||||
#include "libc/intrin/describeflags.internal.h"
|
#include "libc/intrin/describeflags.internal.h"
|
||||||
#include "libc/str/str.h"
|
#include "libc/str/str.h"
|
||||||
|
|
||||||
#ifdef DescribeFcntlCmd
|
const char *(DescribeFcntlCmd)(char buf[20], int x) {
|
||||||
#undef DescribeFcntlCmd
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const char *DescribeFcntlCmd(char buf[20], int x) {
|
|
||||||
const char *s;
|
const char *s;
|
||||||
if (x >= 0 && (s = GetMagnumStr(kFcntlCmds, x))) {
|
if (x >= 0 && (s = GetMagnumStr(kFcntlCmds, x))) {
|
||||||
buf[0] = 'F';
|
buf[0] = 'F';
|
||||||
|
|
|
@ -24,15 +24,11 @@
|
||||||
#include "libc/intrin/kprintf.h"
|
#include "libc/intrin/kprintf.h"
|
||||||
#include "libc/sysv/consts/f.h"
|
#include "libc/sysv/consts/f.h"
|
||||||
|
|
||||||
#ifdef DescribeFlock
|
|
||||||
#undef DescribeFlock
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define N 300
|
#define N 300
|
||||||
|
|
||||||
#define append(...) o += ksnprintf(buf + o, N - o, __VA_ARGS__)
|
#define append(...) o += ksnprintf(buf + o, N - o, __VA_ARGS__)
|
||||||
|
|
||||||
const char *DescribeFlock(char buf[N], int cmd, const struct flock *l) {
|
const char *(DescribeFlock)(char buf[N], int cmd, const struct flock *l) {
|
||||||
int o = 0;
|
int o = 0;
|
||||||
|
|
||||||
if (!l) return "NULL";
|
if (!l) return "NULL";
|
||||||
|
|
|
@ -26,10 +26,6 @@
|
||||||
#include "libc/runtime/runtime.h"
|
#include "libc/runtime/runtime.h"
|
||||||
#include "libc/runtime/winargs.internal.h"
|
#include "libc/runtime/winargs.internal.h"
|
||||||
|
|
||||||
#ifdef DescribeFrame
|
|
||||||
#undef DescribeFrame
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define ADDR(x) ((int64_t)((uint64_t)(x) << 32) >> 16)
|
#define ADDR(x) ((int64_t)((uint64_t)(x) << 32) >> 16)
|
||||||
#define UNSHADOW(x) ((int64_t)(MAX(0, (x)-0x7fff8000)) << 3)
|
#define UNSHADOW(x) ((int64_t)(MAX(0, (x)-0x7fff8000)) << 3)
|
||||||
#define FRAME(x) ((int)((x) >> 16))
|
#define FRAME(x) ((int)((x) >> 16))
|
||||||
|
@ -78,7 +74,7 @@ static const char *GetFrameName(int x) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *DescribeFrame(char buf[32], int x) {
|
const char *(DescribeFrame)(char buf[32], int x) {
|
||||||
char *p;
|
char *p;
|
||||||
if (IsShadowFrame(x)) {
|
if (IsShadowFrame(x)) {
|
||||||
ksnprintf(buf, 32, "%s %s %.8x", GetFrameName(x),
|
ksnprintf(buf, 32, "%s %s %.8x", GetFrameName(x),
|
||||||
|
|
|
@ -24,13 +24,9 @@
|
||||||
#include "libc/macros.internal.h"
|
#include "libc/macros.internal.h"
|
||||||
#include "libc/str/str.h"
|
#include "libc/str/str.h"
|
||||||
|
|
||||||
#ifdef DescribeGidList
|
|
||||||
#undef DescribeGidList
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define N 128
|
#define N 128
|
||||||
|
|
||||||
const char *DescribeGidList(char buf[N], int rc, int size,
|
const char *(DescribeGidList)(char buf[N], int rc, int size,
|
||||||
const uint32_t list[]) {
|
const uint32_t list[]) {
|
||||||
if ((rc == -1) || (size < 0)) return "n/a";
|
if ((rc == -1) || (size < 0)) return "n/a";
|
||||||
if (!size) return "{}";
|
if (!size) return "{}";
|
||||||
|
|
|
@ -20,11 +20,7 @@
|
||||||
#include "libc/intrin/describeflags.internal.h"
|
#include "libc/intrin/describeflags.internal.h"
|
||||||
#include "libc/sysv/consts/sig.h"
|
#include "libc/sysv/consts/sig.h"
|
||||||
|
|
||||||
#ifdef DescribeHow
|
const char *(DescribeHow)(char buf[12], int how) {
|
||||||
#undef DescribeHow
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const char *DescribeHow(char buf[12], int how) {
|
|
||||||
if (how == SIG_BLOCK) return "SIG_BLOCK";
|
if (how == SIG_BLOCK) return "SIG_BLOCK";
|
||||||
if (how == SIG_UNBLOCK) return "SIG_UNBLOCK";
|
if (how == SIG_UNBLOCK) return "SIG_UNBLOCK";
|
||||||
if (how == SIG_SETMASK) return "SIG_SETMASK";
|
if (how == SIG_SETMASK) return "SIG_SETMASK";
|
||||||
|
|
|
@ -21,10 +21,6 @@
|
||||||
#include "libc/sysv/consts/map.h"
|
#include "libc/sysv/consts/map.h"
|
||||||
#include "libc/sysv/consts/prot.h"
|
#include "libc/sysv/consts/prot.h"
|
||||||
|
|
||||||
#ifdef DescribeMapping
|
|
||||||
#undef DescribeMapping
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static char DescribeMapType(int flags) {
|
static char DescribeMapType(int flags) {
|
||||||
switch (flags & MAP_TYPE) {
|
switch (flags & MAP_TYPE) {
|
||||||
case MAP_FILE:
|
case MAP_FILE:
|
||||||
|
@ -48,7 +44,7 @@ char *DescribeProt(char p[4], int prot) {
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *DescribeMapping(char p[8], int prot, int flags) {
|
const char *(DescribeMapping)(char p[8], int prot, int flags) {
|
||||||
/* asan runtime depends on this function */
|
/* asan runtime depends on this function */
|
||||||
DescribeProt(p, prot);
|
DescribeProt(p, prot);
|
||||||
p[3] = DescribeMapType(flags);
|
p[3] = DescribeMapType(flags);
|
||||||
|
|
|
@ -20,10 +20,6 @@
|
||||||
#include "libc/macros.internal.h"
|
#include "libc/macros.internal.h"
|
||||||
#include "libc/nt/enum/consolemodeflags.h"
|
#include "libc/nt/enum/consolemodeflags.h"
|
||||||
|
|
||||||
#ifdef DescribeNtConsoleInFlags
|
|
||||||
#undef DescribeNtConsoleInFlags
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const struct DescribeFlags kConsoleModeInputFlags[] = {
|
static const struct DescribeFlags kConsoleModeInputFlags[] = {
|
||||||
{kNtEnableProcessedInput, "ProcessedInput"}, //
|
{kNtEnableProcessedInput, "ProcessedInput"}, //
|
||||||
{kNtEnableLineInput, "LineInput"}, //
|
{kNtEnableLineInput, "LineInput"}, //
|
||||||
|
@ -37,7 +33,7 @@ static const struct DescribeFlags kConsoleModeInputFlags[] = {
|
||||||
{kNtEnableVirtualTerminalInput, "VirtualTerminalInput"}, //
|
{kNtEnableVirtualTerminalInput, "VirtualTerminalInput"}, //
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *DescribeNtConsoleInFlags(char buf[256], uint32_t x) {
|
const char *(DescribeNtConsoleInFlags)(char buf[256], uint32_t x) {
|
||||||
return DescribeFlags(buf, 256, kConsoleModeInputFlags,
|
return DescribeFlags(buf, 256, kConsoleModeInputFlags,
|
||||||
ARRAYLEN(kConsoleModeInputFlags), "kNtEnable", x);
|
ARRAYLEN(kConsoleModeInputFlags), "kNtEnable", x);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,10 +20,6 @@
|
||||||
#include "libc/macros.internal.h"
|
#include "libc/macros.internal.h"
|
||||||
#include "libc/nt/enum/consolemodeflags.h"
|
#include "libc/nt/enum/consolemodeflags.h"
|
||||||
|
|
||||||
#ifdef DescribeNtConsoleOutFlags
|
|
||||||
#undef DescribeNtConsoleOutFlags
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const struct DescribeFlags kConsoleModeOutputFlags[] = {
|
static const struct DescribeFlags kConsoleModeOutputFlags[] = {
|
||||||
{kNtEnableProcessedOutput, "EnableProcessedOutput"}, //
|
{kNtEnableProcessedOutput, "EnableProcessedOutput"}, //
|
||||||
{kNtEnableWrapAtEolOutput, "EnableWrapAtEolOutput"}, //
|
{kNtEnableWrapAtEolOutput, "EnableWrapAtEolOutput"}, //
|
||||||
|
@ -32,7 +28,7 @@ static const struct DescribeFlags kConsoleModeOutputFlags[] = {
|
||||||
{kNtEnableLvbGridWorldwide, "EnableLvbGridWorldwide"}, //
|
{kNtEnableLvbGridWorldwide, "EnableLvbGridWorldwide"}, //
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *DescribeNtConsoleOutFlags(char buf[128], uint32_t x) {
|
const char *(DescribeNtConsoleOutFlags)(char buf[128], uint32_t x) {
|
||||||
return DescribeFlags(buf, 128, kConsoleModeOutputFlags,
|
return DescribeFlags(buf, 128, kConsoleModeOutputFlags,
|
||||||
ARRAYLEN(kConsoleModeOutputFlags), "kNt", x);
|
ARRAYLEN(kConsoleModeOutputFlags), "kNt", x);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,10 +21,6 @@
|
||||||
#include "libc/nt/enum/fileflagandattributes.h"
|
#include "libc/nt/enum/fileflagandattributes.h"
|
||||||
#include "libc/runtime/runtime.h"
|
#include "libc/runtime/runtime.h"
|
||||||
|
|
||||||
#ifdef DescribeNtFileFlagAttr
|
|
||||||
#undef DescribeNtFileFlagAttr
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const struct DescribeFlags kFileFlags[] = {
|
static const struct DescribeFlags kFileFlags[] = {
|
||||||
{kNtFileAttributeReadonly, "AttributeReadonly"}, //
|
{kNtFileAttributeReadonly, "AttributeReadonly"}, //
|
||||||
{kNtFileAttributeHidden, "AttributeHidden"}, //
|
{kNtFileAttributeHidden, "AttributeHidden"}, //
|
||||||
|
@ -54,7 +50,7 @@ static const struct DescribeFlags kFileFlags[] = {
|
||||||
{kNtFileFlagFirstPipeInstance, "FlagFirstPipeInstance"}, //
|
{kNtFileFlagFirstPipeInstance, "FlagFirstPipeInstance"}, //
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *DescribeNtFileFlagAttr(char buf[256], uint32_t x) {
|
const char *(DescribeNtFileFlagAttr)(char buf[256], uint32_t x) {
|
||||||
if (x == -1u) return "-1u";
|
if (x == -1u) return "-1u";
|
||||||
return DescribeFlags(buf, 256, kFileFlags, ARRAYLEN(kFileFlags), "kNtFile",
|
return DescribeFlags(buf, 256, kFileFlags, ARRAYLEN(kFileFlags), "kNtFile",
|
||||||
x);
|
x);
|
||||||
|
|
|
@ -20,10 +20,6 @@
|
||||||
#include "libc/macros.internal.h"
|
#include "libc/macros.internal.h"
|
||||||
#include "libc/nt/enum/filemapflags.h"
|
#include "libc/nt/enum/filemapflags.h"
|
||||||
|
|
||||||
#ifdef DescribeNtFileMapFlags
|
|
||||||
#undef DescribeNtFileMapFlags
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const struct DescribeFlags kFileMapFlags[] = {
|
static const struct DescribeFlags kFileMapFlags[] = {
|
||||||
{kNtFileMapCopy, "Copy"}, //
|
{kNtFileMapCopy, "Copy"}, //
|
||||||
{kNtFileMapWrite, "Write"}, //
|
{kNtFileMapWrite, "Write"}, //
|
||||||
|
@ -34,7 +30,7 @@ static const struct DescribeFlags kFileMapFlags[] = {
|
||||||
{kNtFileMapLargePages, "LargePages"}, //
|
{kNtFileMapLargePages, "LargePages"}, //
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *DescribeNtFileMapFlags(char buf[64], uint32_t x) {
|
const char *(DescribeNtFileMapFlags)(char buf[64], uint32_t x) {
|
||||||
return DescribeFlags(buf, 64, kFileMapFlags, ARRAYLEN(kFileMapFlags),
|
return DescribeFlags(buf, 64, kFileMapFlags, ARRAYLEN(kFileMapFlags),
|
||||||
"kNtFileMap", x);
|
"kNtFileMap", x);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,17 +20,13 @@
|
||||||
#include "libc/macros.internal.h"
|
#include "libc/macros.internal.h"
|
||||||
#include "libc/nt/enum/filesharemode.h"
|
#include "libc/nt/enum/filesharemode.h"
|
||||||
|
|
||||||
#ifdef DescribeNtFileShareFlags
|
|
||||||
#undef DescribeNtFileShareFlags
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const struct DescribeFlags kFileShareflags[] = {
|
static const struct DescribeFlags kFileShareflags[] = {
|
||||||
{kNtFileShareRead, "Read"}, //
|
{kNtFileShareRead, "Read"}, //
|
||||||
{kNtFileShareWrite, "Write"}, //
|
{kNtFileShareWrite, "Write"}, //
|
||||||
{kNtFileShareDelete, "Delete"}, //
|
{kNtFileShareDelete, "Delete"}, //
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *DescribeNtFileShareFlags(char buf[64], uint32_t x) {
|
const char *(DescribeNtFileShareFlags)(char buf[64], uint32_t x) {
|
||||||
return DescribeFlags(buf, 64, kFileShareflags, ARRAYLEN(kFileShareflags),
|
return DescribeFlags(buf, 64, kFileShareflags, ARRAYLEN(kFileShareflags),
|
||||||
"kNtFileShare", x);
|
"kNtFileShare", x);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,10 +21,6 @@
|
||||||
#include "libc/nt/enum/filetype.h"
|
#include "libc/nt/enum/filetype.h"
|
||||||
#include "libc/sysv/consts/mremap.h"
|
#include "libc/sysv/consts/mremap.h"
|
||||||
|
|
||||||
#ifdef DescribeNtFiletypeFlags
|
|
||||||
#undef DescribeNtFiletypeFlags
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const struct DescribeFlags kFiletypeFlags[] = {
|
static const struct DescribeFlags kFiletypeFlags[] = {
|
||||||
{kNtFileTypeRemote, "Remote"}, //
|
{kNtFileTypeRemote, "Remote"}, //
|
||||||
{kNtFileTypePipe, "Pipe"}, // order matters
|
{kNtFileTypePipe, "Pipe"}, // order matters
|
||||||
|
@ -32,7 +28,7 @@ static const struct DescribeFlags kFiletypeFlags[] = {
|
||||||
{kNtFileTypeChar, "Char"}, //
|
{kNtFileTypeChar, "Char"}, //
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *DescribeNtFiletypeFlags(char buf[64], uint32_t x) {
|
const char *(DescribeNtFiletypeFlags)(char buf[64], uint32_t x) {
|
||||||
return DescribeFlags(buf, 64, kFiletypeFlags, ARRAYLEN(kFiletypeFlags),
|
return DescribeFlags(buf, 64, kFiletypeFlags, ARRAYLEN(kFiletypeFlags),
|
||||||
"kNtFileType", x);
|
"kNtFileType", x);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,16 +20,12 @@
|
||||||
#include "libc/macros.internal.h"
|
#include "libc/macros.internal.h"
|
||||||
#include "libc/nt/enum/filelockflags.h"
|
#include "libc/nt/enum/filelockflags.h"
|
||||||
|
|
||||||
#ifdef DescribeNtLockFileFlags
|
|
||||||
#undef DescribeNtLockFileFlags
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const struct DescribeFlags kNtLockFileFlags[] = {
|
static const struct DescribeFlags kNtLockFileFlags[] = {
|
||||||
{kNtLockfileFailImmediately, "FailImmediately"}, //
|
{kNtLockfileFailImmediately, "FailImmediately"}, //
|
||||||
{kNtLockfileExclusiveLock, "ExclusiveLock"}, //
|
{kNtLockfileExclusiveLock, "ExclusiveLock"}, //
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *DescribeNtLockFileFlags(char buf[64], uint32_t x) {
|
const char *(DescribeNtLockFileFlags)(char buf[64], uint32_t x) {
|
||||||
return DescribeFlags(buf, 64, kNtLockFileFlags, ARRAYLEN(kNtLockFileFlags),
|
return DescribeFlags(buf, 64, kNtLockFileFlags, ARRAYLEN(kNtLockFileFlags),
|
||||||
"kNtLockfile", x);
|
"kNtLockfile", x);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,10 +20,6 @@
|
||||||
#include "libc/macros.internal.h"
|
#include "libc/macros.internal.h"
|
||||||
#include "libc/nt/enum/movefileexflags.h"
|
#include "libc/nt/enum/movefileexflags.h"
|
||||||
|
|
||||||
#ifdef DescribeNtMovFileInpFlags
|
|
||||||
#undef DescribeNtMovFileInpFlags
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const struct DescribeFlags kMoveFileInputFlags[] = {
|
static const struct DescribeFlags kMoveFileInputFlags[] = {
|
||||||
{kNtMovefileReplaceExisting, "ReplaceExisting"}, //
|
{kNtMovefileReplaceExisting, "ReplaceExisting"}, //
|
||||||
{kNtMovefileCopyAllowed, "CopyAllowed"}, //
|
{kNtMovefileCopyAllowed, "CopyAllowed"}, //
|
||||||
|
@ -33,7 +29,7 @@ static const struct DescribeFlags kMoveFileInputFlags[] = {
|
||||||
{kNtMovefileFailIfNotTrackable, "FailIfNotTrackable"}, //
|
{kNtMovefileFailIfNotTrackable, "FailIfNotTrackable"}, //
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *DescribeNtMovFileInpFlags(char buf[256], uint32_t x) {
|
const char *(DescribeNtMovFileInpFlags)(char buf[256], uint32_t x) {
|
||||||
return DescribeFlags(buf, 256, kMoveFileInputFlags,
|
return DescribeFlags(buf, 256, kMoveFileInputFlags,
|
||||||
ARRAYLEN(kMoveFileInputFlags), "kNtMovefile", x);
|
ARRAYLEN(kMoveFileInputFlags), "kNtMovefile", x);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,10 +20,6 @@
|
||||||
#include "libc/macros.internal.h"
|
#include "libc/macros.internal.h"
|
||||||
#include "libc/nt/enum/pageflags.h"
|
#include "libc/nt/enum/pageflags.h"
|
||||||
|
|
||||||
#ifdef DescribeNtPageFlags
|
|
||||||
#undef DescribeNtPageFlags
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const struct DescribeFlags kPageFlags[] = {
|
static const struct DescribeFlags kPageFlags[] = {
|
||||||
{kNtPageNoaccess, "PageNoaccess"}, //
|
{kNtPageNoaccess, "PageNoaccess"}, //
|
||||||
{kNtPageReadonly, "PageReadonly"}, //
|
{kNtPageReadonly, "PageReadonly"}, //
|
||||||
|
@ -45,6 +41,6 @@ static const struct DescribeFlags kPageFlags[] = {
|
||||||
{kNtSecWritecombine, "SecWritecombine"}, //
|
{kNtSecWritecombine, "SecWritecombine"}, //
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *DescribeNtPageFlags(char buf[64], uint32_t x) {
|
const char *(DescribeNtPageFlags)(char buf[64], uint32_t x) {
|
||||||
return DescribeFlags(buf, 64, kPageFlags, ARRAYLEN(kPageFlags), "kNt", x);
|
return DescribeFlags(buf, 64, kPageFlags, ARRAYLEN(kPageFlags), "kNt", x);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,17 +21,13 @@
|
||||||
#include "libc/nt/enum/filemapflags.h"
|
#include "libc/nt/enum/filemapflags.h"
|
||||||
#include "libc/nt/ipc.h"
|
#include "libc/nt/ipc.h"
|
||||||
|
|
||||||
#ifdef DescribeNtPipeOpenFlags
|
|
||||||
#undef DescribeNtPipeOpenFlags
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const struct DescribeFlags kPipeOpenFlags[] = {
|
static const struct DescribeFlags kPipeOpenFlags[] = {
|
||||||
{kNtPipeAccessDuplex, "Duplex"}, // 0x00000003
|
{kNtPipeAccessDuplex, "Duplex"}, // 0x00000003
|
||||||
{kNtPipeAccessOutbound, "Outbound"}, // 0x00000002
|
{kNtPipeAccessOutbound, "Outbound"}, // 0x00000002
|
||||||
{kNtPipeAccessInbound, "Inbound"}, // 0x00000001
|
{kNtPipeAccessInbound, "Inbound"}, // 0x00000001
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *DescribeNtPipeOpenFlags(char buf[64], uint32_t x) {
|
const char *(DescribeNtPipeOpenFlags)(char buf[64], uint32_t x) {
|
||||||
return DescribeFlags(buf, 64, kPipeOpenFlags, ARRAYLEN(kPipeOpenFlags),
|
return DescribeFlags(buf, 64, kPipeOpenFlags, ARRAYLEN(kPipeOpenFlags),
|
||||||
"kNtPipeAccess", x);
|
"kNtPipeAccess", x);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,10 +20,6 @@
|
||||||
#include "libc/macros.internal.h"
|
#include "libc/macros.internal.h"
|
||||||
#include "libc/nt/enum/processaccess.h"
|
#include "libc/nt/enum/processaccess.h"
|
||||||
|
|
||||||
#ifdef DescribeNtProcAccessFlags
|
|
||||||
#undef DescribeNtProcAccessFlags
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const struct DescribeFlags kProcessAccessflags[] = {
|
static const struct DescribeFlags kProcessAccessflags[] = {
|
||||||
{kNtProcessAllAccess, "AllAccess"}, //
|
{kNtProcessAllAccess, "AllAccess"}, //
|
||||||
{kNtProcessCreateProcess, "CreateProcess"}, //
|
{kNtProcessCreateProcess, "CreateProcess"}, //
|
||||||
|
@ -41,7 +37,7 @@ static const struct DescribeFlags kProcessAccessflags[] = {
|
||||||
{kNtProcessSynchronize, "Synchronize"}, //
|
{kNtProcessSynchronize, "Synchronize"}, //
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *DescribeNtProcAccessFlags(char buf[256], uint32_t x) {
|
const char *(DescribeNtProcAccessFlags)(char buf[256], uint32_t x) {
|
||||||
return DescribeFlags(buf, 256, kProcessAccessflags,
|
return DescribeFlags(buf, 256, kProcessAccessflags,
|
||||||
ARRAYLEN(kProcessAccessflags), "kNtProcess", x);
|
ARRAYLEN(kProcessAccessflags), "kNtProcess", x);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,10 +21,6 @@
|
||||||
#include "libc/nt/enum/startf.h"
|
#include "libc/nt/enum/startf.h"
|
||||||
#include "libc/sysv/consts/prot.h"
|
#include "libc/sysv/consts/prot.h"
|
||||||
|
|
||||||
#ifdef DescribeNtStartFlags
|
|
||||||
#undef DescribeNtStartFlags
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const struct DescribeFlags kNtStartFlags[] = {
|
static const struct DescribeFlags kNtStartFlags[] = {
|
||||||
{kNtStartfUseshowwindow, "Useshowwindow"}, //
|
{kNtStartfUseshowwindow, "Useshowwindow"}, //
|
||||||
{kNtStartfUsesize, "Usesize"}, //
|
{kNtStartfUsesize, "Usesize"}, //
|
||||||
|
@ -42,7 +38,7 @@ static const struct DescribeFlags kNtStartFlags[] = {
|
||||||
{kNtStartfUntrustedsource, "Untrustedsource"}, //
|
{kNtStartfUntrustedsource, "Untrustedsource"}, //
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *DescribeNtStartFlags(char buf[128], uint32_t x) {
|
const char *(DescribeNtStartFlags)(char buf[128], uint32_t x) {
|
||||||
return DescribeFlags(buf, 128, kNtStartFlags, ARRAYLEN(kNtStartFlags),
|
return DescribeFlags(buf, 128, kNtStartFlags, ARRAYLEN(kNtStartFlags),
|
||||||
"kNtStartf", x);
|
"kNtStartf", x);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,16 +20,12 @@
|
||||||
#include "libc/macros.internal.h"
|
#include "libc/macros.internal.h"
|
||||||
#include "libc/nt/enum/symboliclink.h"
|
#include "libc/nt/enum/symboliclink.h"
|
||||||
|
|
||||||
#ifdef DescribeNtSymlinkFlags
|
|
||||||
#undef DescribeNtSymlinkFlags
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const struct DescribeFlags kSymbolicLinkflags[] = {
|
static const struct DescribeFlags kSymbolicLinkflags[] = {
|
||||||
{kNtSymbolicLinkFlagDirectory, "Directory"}, //
|
{kNtSymbolicLinkFlagDirectory, "Directory"}, //
|
||||||
{kNtSymbolicLinkFlagAllowUnprivilegedCreate, "AllowUnprivilegedCreate"}, //
|
{kNtSymbolicLinkFlagAllowUnprivilegedCreate, "AllowUnprivilegedCreate"}, //
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *DescribeNtSymlinkFlags(char buf[64], uint32_t x) {
|
const char *(DescribeNtSymlinkFlags)(char buf[64], uint32_t x) {
|
||||||
return DescribeFlags(buf, 64, kSymbolicLinkflags,
|
return DescribeFlags(buf, 64, kSymbolicLinkflags,
|
||||||
ARRAYLEN(kSymbolicLinkflags), "kNtSymbolicLinkFlag", x);
|
ARRAYLEN(kSymbolicLinkflags), "kNtSymbolicLinkFlag", x);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,10 +22,6 @@
|
||||||
#include "libc/nt/enum/filesharemode.h"
|
#include "libc/nt/enum/filesharemode.h"
|
||||||
#include "libc/sysv/consts/personality.h"
|
#include "libc/sysv/consts/personality.h"
|
||||||
|
|
||||||
#ifdef DescribePersonalityFlags
|
|
||||||
#undef DescribePersonalityFlags
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const struct DescribeFlags kPersonalityFlags[] = {
|
static const struct DescribeFlags kPersonalityFlags[] = {
|
||||||
{ADDR_COMPAT_LAYOUT, "ADDR_COMPAT_LAYOUT"}, //
|
{ADDR_COMPAT_LAYOUT, "ADDR_COMPAT_LAYOUT"}, //
|
||||||
{READ_IMPLIES_EXEC, "READ_IMPLIES_EXEC"}, //
|
{READ_IMPLIES_EXEC, "READ_IMPLIES_EXEC"}, //
|
||||||
|
@ -40,7 +36,7 @@ static const struct DescribeFlags kPersonalityFlags[] = {
|
||||||
{UNAME26, "UNAME26"}, //
|
{UNAME26, "UNAME26"}, //
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *DescribePersonalityFlags(char buf[128], int x) {
|
const char *(DescribePersonalityFlags)(char buf[128], int x) {
|
||||||
return DescribeFlags(buf, 128, kPersonalityFlags, ARRAYLEN(kPersonalityFlags),
|
return DescribeFlags(buf, 128, kPersonalityFlags, ARRAYLEN(kPersonalityFlags),
|
||||||
"", x);
|
"", x);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,11 +21,7 @@
|
||||||
#include "libc/nt/enum/filemapflags.h"
|
#include "libc/nt/enum/filemapflags.h"
|
||||||
#include "libc/sysv/consts/poll.h"
|
#include "libc/sysv/consts/poll.h"
|
||||||
|
|
||||||
#ifdef DescribePollFlags
|
const char *(DescribePollFlags)(char buf[64], int x) {
|
||||||
#undef DescribePollFlags
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const char *DescribePollFlags(char buf[64], int x) {
|
|
||||||
const struct DescribeFlags kPollFlags[] = {
|
const struct DescribeFlags kPollFlags[] = {
|
||||||
{POLLIN, "IN"}, // order matters
|
{POLLIN, "IN"}, // order matters
|
||||||
{POLLOUT, "OUT"}, // order matters
|
{POLLOUT, "OUT"}, // order matters
|
||||||
|
|
|
@ -20,16 +20,12 @@
|
||||||
#include "libc/macros.internal.h"
|
#include "libc/macros.internal.h"
|
||||||
#include "libc/sysv/consts/prot.h"
|
#include "libc/sysv/consts/prot.h"
|
||||||
|
|
||||||
#ifdef DescribeProtFlags
|
|
||||||
#undef DescribeProtFlags
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const struct DescribeFlags kProtFlags[] = {
|
static const struct DescribeFlags kProtFlags[] = {
|
||||||
{PROT_READ, "READ"}, //
|
{PROT_READ, "READ"}, //
|
||||||
{PROT_WRITE, "WRITE"}, //
|
{PROT_WRITE, "WRITE"}, //
|
||||||
{PROT_EXEC, "EXEC"}, //
|
{PROT_EXEC, "EXEC"}, //
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *DescribeProtFlags(char buf[48], int x) {
|
const char *(DescribeProtFlags)(char buf[48], int x) {
|
||||||
return DescribeFlags(buf, 48, kProtFlags, ARRAYLEN(kProtFlags), "PROT_", x);
|
return DescribeFlags(buf, 48, kProtFlags, ARRAYLEN(kProtFlags), "PROT_", x);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,11 +20,7 @@
|
||||||
#include "libc/intrin/describeflags.internal.h"
|
#include "libc/intrin/describeflags.internal.h"
|
||||||
#include "libc/sysv/consts/ptrace.h"
|
#include "libc/sysv/consts/ptrace.h"
|
||||||
|
|
||||||
#ifdef DescribePtrace
|
const char *(DescribePtrace)(char buf[12], int x) {
|
||||||
#undef DescribePtrace
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const char *DescribePtrace(char buf[12], int x) {
|
|
||||||
if (x == -1) return "-1";
|
if (x == -1) return "-1";
|
||||||
if (x == PTRACE_TRACEME) return "PTRACE_TRACEME";
|
if (x == PTRACE_TRACEME) return "PTRACE_TRACEME";
|
||||||
if (x == PTRACE_PEEKDATA) return "PTRACE_PEEKDATA";
|
if (x == PTRACE_PEEKDATA) return "PTRACE_PEEKDATA";
|
||||||
|
|
|
@ -20,11 +20,7 @@
|
||||||
#include "libc/intrin/describeflags.internal.h"
|
#include "libc/intrin/describeflags.internal.h"
|
||||||
#include "libc/sysv/consts/ptrace.h"
|
#include "libc/sysv/consts/ptrace.h"
|
||||||
|
|
||||||
#ifdef DescribePtraceEvent
|
const char *(DescribePtraceEvent)(char buf[32], int x) {
|
||||||
#undef DescribePtraceEvent
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const char *DescribePtraceEvent(char buf[32], int x) {
|
|
||||||
if (x == PTRACE_EVENT_FORK) return "PTRACE_EVENT_FORK";
|
if (x == PTRACE_EVENT_FORK) return "PTRACE_EVENT_FORK";
|
||||||
if (x == PTRACE_EVENT_VFORK) return "PTRACE_EVENT_VFORK";
|
if (x == PTRACE_EVENT_VFORK) return "PTRACE_EVENT_VFORK";
|
||||||
if (x == PTRACE_EVENT_CLONE) return "PTRACE_EVENT_CLONE";
|
if (x == PTRACE_EVENT_CLONE) return "PTRACE_EVENT_CLONE";
|
||||||
|
|
|
@ -20,16 +20,12 @@
|
||||||
#include "libc/macros.internal.h"
|
#include "libc/macros.internal.h"
|
||||||
#include "libc/sysv/consts/mremap.h"
|
#include "libc/sysv/consts/mremap.h"
|
||||||
|
|
||||||
#ifdef DescribeRemapFlags
|
|
||||||
#undef DescribeRemapFlags
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const struct DescribeFlags kRemapFlags[] = {
|
static const struct DescribeFlags kRemapFlags[] = {
|
||||||
{MREMAP_MAYMOVE, "MAYMOVE"}, //
|
{MREMAP_MAYMOVE, "MAYMOVE"}, //
|
||||||
{MREMAP_FIXED, "FIXED"}, //
|
{MREMAP_FIXED, "FIXED"}, //
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *DescribeRemapFlags(char buf[48], int x) {
|
const char *(DescribeRemapFlags)(char buf[48], int x) {
|
||||||
return DescribeFlags(buf, 48, kRemapFlags, ARRAYLEN(kRemapFlags), "MREMAP_",
|
return DescribeFlags(buf, 48, kRemapFlags, ARRAYLEN(kRemapFlags), "MREMAP_",
|
||||||
x);
|
x);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,14 +19,10 @@
|
||||||
#include "libc/fmt/magnumstrs.internal.h"
|
#include "libc/fmt/magnumstrs.internal.h"
|
||||||
#include "libc/intrin/describeflags.internal.h"
|
#include "libc/intrin/describeflags.internal.h"
|
||||||
|
|
||||||
#ifdef DescribeRlimitName
|
|
||||||
#undef DescribeRlimitName
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Describes setrlimit() / getrlimit() argument.
|
* Describes setrlimit() / getrlimit() argument.
|
||||||
*/
|
*/
|
||||||
const char *DescribeRlimitName(char buf[20], int x) {
|
const char *(DescribeRlimitName)(char buf[20], int x) {
|
||||||
if (x == 127) return "n/a";
|
if (x == 127) return "n/a";
|
||||||
return DescribeMagnum(buf, kRlimitNames, "RLIMIT_", x);
|
return DescribeMagnum(buf, kRlimitNames, "RLIMIT_", x);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,14 +23,10 @@
|
||||||
#include "libc/str/str.h"
|
#include "libc/str/str.h"
|
||||||
#include "libc/sysv/consts/sched.h"
|
#include "libc/sysv/consts/sched.h"
|
||||||
|
|
||||||
#ifdef DescribeSchedPolicy
|
|
||||||
#undef DescribeSchedPolicy
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Describes clock_gettime() clock argument.
|
* Describes clock_gettime() clock argument.
|
||||||
*/
|
*/
|
||||||
const char *DescribeSchedPolicy(char buf[48], int x) {
|
const char *(DescribeSchedPolicy)(char buf[48], int x) {
|
||||||
char *p = buf;
|
char *p = buf;
|
||||||
if (x == -1) {
|
if (x == -1) {
|
||||||
goto DoNumber;
|
goto DoNumber;
|
||||||
|
|
|
@ -22,10 +22,6 @@
|
||||||
#include "libc/sysv/consts/sicode.h"
|
#include "libc/sysv/consts/sicode.h"
|
||||||
#include "libc/sysv/consts/sig.h"
|
#include "libc/sysv/consts/sig.h"
|
||||||
|
|
||||||
#ifdef DescribeSiCode
|
|
||||||
#undef DescribeSiCode
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static bool IsSiUser(int si_code) {
|
static bool IsSiUser(int si_code) {
|
||||||
if (!IsOpenbsd()) {
|
if (!IsOpenbsd()) {
|
||||||
return si_code == SI_USER;
|
return si_code == SI_USER;
|
||||||
|
@ -42,7 +38,7 @@ static void NameIt(char p[17], const char *s, int si_code) {
|
||||||
/**
|
/**
|
||||||
* Returns symbolic name for siginfo::si_code value.
|
* Returns symbolic name for siginfo::si_code value.
|
||||||
*/
|
*/
|
||||||
const char *DescribeSiCode(char b[17], int sig, int si_code) {
|
const char *(DescribeSiCode)(char b[17], int sig, int si_code) {
|
||||||
NameIt(b, "SI_", si_code);
|
NameIt(b, "SI_", si_code);
|
||||||
if (si_code == SI_QUEUE) {
|
if (si_code == SI_QUEUE) {
|
||||||
strcpy(b + 3, "QUEUE"); /* sent by sigqueue(2) */
|
strcpy(b + 3, "QUEUE"); /* sent by sigqueue(2) */
|
||||||
|
|
|
@ -27,10 +27,6 @@
|
||||||
#include "libc/mem/alloca.h"
|
#include "libc/mem/alloca.h"
|
||||||
#include "libc/sysv/consts/sa.h"
|
#include "libc/sysv/consts/sa.h"
|
||||||
|
|
||||||
#ifdef DescribeSigaction
|
|
||||||
#undef DescribeSigaction
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const char *DescribeSigHandler(char buf[64], void f(int)) {
|
static const char *DescribeSigHandler(char buf[64], void f(int)) {
|
||||||
if (f == SIG_ERR) return "SIG_ERR";
|
if (f == SIG_ERR) return "SIG_ERR";
|
||||||
if (f == SIG_DFL) return "SIG_DFL";
|
if (f == SIG_DFL) return "SIG_DFL";
|
||||||
|
@ -58,7 +54,8 @@ static const char *DescribeSigFlags(char buf[64], int x) {
|
||||||
|
|
||||||
#define append(...) o += ksnprintf(buf + o, N - o, __VA_ARGS__)
|
#define append(...) o += ksnprintf(buf + o, N - o, __VA_ARGS__)
|
||||||
|
|
||||||
const char *DescribeSigaction(char buf[N], int rc, const struct sigaction *sa) {
|
const char *(DescribeSigaction)(char buf[N], int rc,
|
||||||
|
const struct sigaction *sa) {
|
||||||
int o = 0;
|
int o = 0;
|
||||||
char b64[64];
|
char b64[64];
|
||||||
|
|
||||||
|
|
|
@ -22,11 +22,7 @@
|
||||||
#include "libc/intrin/describeflags.internal.h"
|
#include "libc/intrin/describeflags.internal.h"
|
||||||
#include "libc/intrin/kprintf.h"
|
#include "libc/intrin/kprintf.h"
|
||||||
|
|
||||||
#ifdef DescribeSigaltstk
|
const char *(DescribeSigaltstk)(char buf[128], int rc,
|
||||||
#undef DescribeSigaltstk
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const char *DescribeSigaltstk(char buf[128], int rc,
|
|
||||||
const struct sigaltstack *ss) {
|
const struct sigaltstack *ss) {
|
||||||
if (rc == -1) return "n/a";
|
if (rc == -1) return "n/a";
|
||||||
if (!ss) return "NULL";
|
if (!ss) return "NULL";
|
||||||
|
|
|
@ -20,11 +20,7 @@
|
||||||
#include "libc/intrin/describeflags.internal.h"
|
#include "libc/intrin/describeflags.internal.h"
|
||||||
#include "libc/sysv/consts/af.h"
|
#include "libc/sysv/consts/af.h"
|
||||||
|
|
||||||
#ifdef DescribeSocketFamily
|
const char *(DescribeSocketFamily)(char buf[12], int family) {
|
||||||
#undef DescribeSocketFamily
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const char *DescribeSocketFamily(char buf[12], int family) {
|
|
||||||
if (family == AF_UNIX) return "AF_UNIX";
|
if (family == AF_UNIX) return "AF_UNIX";
|
||||||
if (family == AF_INET) return "AF_INET";
|
if (family == AF_INET) return "AF_INET";
|
||||||
if (family == AF_INET6) return "AF_INET6";
|
if (family == AF_INET6) return "AF_INET6";
|
||||||
|
|
|
@ -20,11 +20,7 @@
|
||||||
#include "libc/intrin/describeflags.internal.h"
|
#include "libc/intrin/describeflags.internal.h"
|
||||||
#include "libc/sysv/consts/ipproto.h"
|
#include "libc/sysv/consts/ipproto.h"
|
||||||
|
|
||||||
#ifdef DescribeSocketProtocol
|
const char *(DescribeSocketProtocol)(char buf[12], int family) {
|
||||||
#undef DescribeSocketProtocol
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const char *DescribeSocketProtocol(char buf[12], int family) {
|
|
||||||
if (family == IPPROTO_IP) return "IPPROTO_IP";
|
if (family == IPPROTO_IP) return "IPPROTO_IP";
|
||||||
if (family == IPPROTO_ICMP) return "IPPROTO_ICMP";
|
if (family == IPPROTO_ICMP) return "IPPROTO_ICMP";
|
||||||
if (family == IPPROTO_TCP) return "IPPROTO_TCP";
|
if (family == IPPROTO_TCP) return "IPPROTO_TCP";
|
||||||
|
|
|
@ -21,11 +21,7 @@
|
||||||
#include "libc/str/str.h"
|
#include "libc/str/str.h"
|
||||||
#include "libc/sysv/consts/sock.h"
|
#include "libc/sysv/consts/sock.h"
|
||||||
|
|
||||||
#ifdef DescribeSocketType
|
const char *(DescribeSocketType)(char buf[64], int type) {
|
||||||
#undef DescribeSocketType
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const char *DescribeSocketType(char buf[64], int type) {
|
|
||||||
int x;
|
int x;
|
||||||
char *p;
|
char *p;
|
||||||
p = buf;
|
p = buf;
|
||||||
|
|
|
@ -20,14 +20,10 @@
|
||||||
#include "libc/intrin/describeflags.internal.h"
|
#include "libc/intrin/describeflags.internal.h"
|
||||||
#include "libc/sysv/consts/sol.h"
|
#include "libc/sysv/consts/sol.h"
|
||||||
|
|
||||||
#ifdef DescribeSockLevel
|
|
||||||
#undef DescribeSockLevel
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Describes setsockopt() level arguments.
|
* Describes setsockopt() level arguments.
|
||||||
*/
|
*/
|
||||||
const char *DescribeSockLevel(char buf[12], int x) {
|
const char *(DescribeSockLevel)(char buf[12], int x) {
|
||||||
if (x == SOL_IP) return "SOL_IP";
|
if (x == SOL_IP) return "SOL_IP";
|
||||||
if (x == SOL_TCP) return "SOL_TCP";
|
if (x == SOL_TCP) return "SOL_TCP";
|
||||||
if (x == SOL_UDP) return "SOL_UDP";
|
if (x == SOL_UDP) return "SOL_UDP";
|
||||||
|
|
|
@ -22,14 +22,10 @@
|
||||||
#include "libc/str/str.h"
|
#include "libc/str/str.h"
|
||||||
#include "libc/sysv/consts/sol.h"
|
#include "libc/sysv/consts/sol.h"
|
||||||
|
|
||||||
#ifdef DescribeSockOptname
|
|
||||||
#undef DescribeSockOptname
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Describes setsockopt() optname arguments.
|
* Describes setsockopt() optname arguments.
|
||||||
*/
|
*/
|
||||||
const char *DescribeSockOptname(char buf[32], int l, int x) {
|
const char *(DescribeSockOptname)(char buf[32], int l, int x) {
|
||||||
int i;
|
int i;
|
||||||
char *s, *p;
|
char *s, *p;
|
||||||
const struct MagnumStr *ms;
|
const struct MagnumStr *ms;
|
||||||
|
|
|
@ -24,15 +24,11 @@
|
||||||
#include "libc/intrin/kprintf.h"
|
#include "libc/intrin/kprintf.h"
|
||||||
#include "libc/sysv/consts/st.h"
|
#include "libc/sysv/consts/st.h"
|
||||||
|
|
||||||
#ifdef DescribeStatfs
|
|
||||||
#undef DescribeStatfs
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define N 300
|
#define N 300
|
||||||
|
|
||||||
#define append(...) i += ksnprintf(buf + i, N - i, __VA_ARGS__)
|
#define append(...) i += ksnprintf(buf + i, N - i, __VA_ARGS__)
|
||||||
|
|
||||||
const char *DescribeStatfs(char buf[N], int rc, const struct statfs *f) {
|
const char *(DescribeStatfs)(char buf[N], int rc, const struct statfs *f) {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
char ibuf[21];
|
char ibuf[21];
|
||||||
int64_t flags;
|
int64_t flags;
|
||||||
|
|
|
@ -20,11 +20,7 @@
|
||||||
#include "libc/intrin/describeflags.internal.h"
|
#include "libc/intrin/describeflags.internal.h"
|
||||||
#include "libc/str/str.h"
|
#include "libc/str/str.h"
|
||||||
|
|
||||||
#ifdef DescribeStdioState
|
const char *(DescribeStdioState)(char buf[12], int x) {
|
||||||
#undef DescribeStdioState
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const char *DescribeStdioState(char buf[12], int x) {
|
|
||||||
if (!x) return "";
|
if (!x) return "";
|
||||||
if (x == -1) return "EOF";
|
if (x == -1) return "EOF";
|
||||||
if (x > 0) return _strerrno(x);
|
if (x > 0) return _strerrno(x);
|
||||||
|
|
|
@ -21,15 +21,11 @@
|
||||||
#include "libc/intrin/describeflags.internal.h"
|
#include "libc/intrin/describeflags.internal.h"
|
||||||
#include "libc/intrin/kprintf.h"
|
#include "libc/intrin/kprintf.h"
|
||||||
|
|
||||||
#ifdef DescribeStringList
|
|
||||||
#undef DescribeStringList
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define N 300
|
#define N 300
|
||||||
|
|
||||||
#define append(...) o += ksnprintf(buf + o, N - o, __VA_ARGS__)
|
#define append(...) o += ksnprintf(buf + o, N - o, __VA_ARGS__)
|
||||||
|
|
||||||
const char *DescribeStringList(char buf[N], char *const list[]) {
|
const char *(DescribeStringList)(char buf[N], char *const list[]) {
|
||||||
int i, o = 0;
|
int i, o = 0;
|
||||||
|
|
||||||
if (!list) return "NULL";
|
if (!list) return "NULL";
|
||||||
|
|
|
@ -23,11 +23,8 @@
|
||||||
#include "libc/intrin/kprintf.h"
|
#include "libc/intrin/kprintf.h"
|
||||||
#include "libc/str/str.h"
|
#include "libc/str/str.h"
|
||||||
|
|
||||||
#ifdef DescribeTimespec
|
const char *(DescribeTimespec)(char buf[45], int rc,
|
||||||
#undef DescribeTimespec
|
const struct timespec *ts) {
|
||||||
#endif
|
|
||||||
|
|
||||||
const char *DescribeTimespec(char buf[45], int rc, const struct timespec *ts) {
|
|
||||||
if (rc == -1) return "n/a";
|
if (rc == -1) return "n/a";
|
||||||
if (!ts) return "NULL";
|
if (!ts) return "NULL";
|
||||||
if ((!IsAsan() && kisdangerous(ts)) ||
|
if ((!IsAsan() && kisdangerous(ts)) ||
|
||||||
|
|
|
@ -20,19 +20,11 @@
|
||||||
#include "libc/str/str.h"
|
#include "libc/str/str.h"
|
||||||
#include "libc/thread/thread.h"
|
#include "libc/thread/thread.h"
|
||||||
|
|
||||||
#ifdef __fds_lock
|
void(__fds_lock)(void) {
|
||||||
#undef __fds_lock
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __fds_unlock
|
|
||||||
#undef __fds_unlock
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void __fds_lock(void) {
|
|
||||||
pthread_mutex_lock(&__fds_lock_obj);
|
pthread_mutex_lock(&__fds_lock_obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __fds_unlock(void) {
|
void(__fds_unlock)(void) {
|
||||||
pthread_mutex_unlock(&__fds_lock_obj);
|
pthread_mutex_unlock(&__fds_lock_obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
#include "libc/intrin/intrin.h"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finds lowest set bit in word.
|
* Finds lowest set bit in word.
|
||||||
|
|
|
@ -33,3 +33,7 @@ double fmax(double x, double y) {
|
||||||
}
|
}
|
||||||
return x < y ? y : x;
|
return x < y ? y : x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||||
|
__strong_reference(fmax, fmaxl);
|
||||||
|
#endif
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
#include "libc/math.h"
|
#include "libc/math.h"
|
||||||
|
#if !(LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns maximum of two long doubles.
|
* Returns maximum of two long doubles.
|
||||||
|
@ -33,3 +34,5 @@ long double fmaxl(long double x, long double y) {
|
||||||
}
|
}
|
||||||
return x < y ? y : x;
|
return x < y ? y : x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* long double is long */
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
#include "libc/intrin/intrin.h"
|
|
||||||
#include "libc/limits.h"
|
#include "libc/limits.h"
|
||||||
#include "libc/runtime/internal.h"
|
#include "libc/runtime/internal.h"
|
||||||
|
|
||||||
|
|
|
@ -1,68 +0,0 @@
|
||||||
/*-*- mode:c;indent-tabs-mode:t;c-basic-offset:8;tab-width:8;coding:utf-8 -*-│
|
|
||||||
│vi: set et ft=c ts=8 tw=8 fenc=utf-8 :vi│
|
|
||||||
╚──────────────────────────────────────────────────────────────────────────────╝
|
|
||||||
│ │
|
|
||||||
│ Musl Libc │
|
|
||||||
│ Copyright © 2005-2014 Rich Felker, et al. │
|
|
||||||
│ │
|
|
||||||
│ Permission is hereby granted, free of charge, to any person obtaining │
|
|
||||||
│ a copy of this software and associated documentation files (the │
|
|
||||||
│ "Software"), to deal in the Software without restriction, including │
|
|
||||||
│ without limitation the rights to use, copy, modify, merge, publish, │
|
|
||||||
│ distribute, sublicense, and/or sell copies of the Software, and to │
|
|
||||||
│ permit persons to whom the Software is furnished to do so, subject to │
|
|
||||||
│ the following conditions: │
|
|
||||||
│ │
|
|
||||||
│ The above copyright notice and this permission notice shall be │
|
|
||||||
│ included in all copies or substantial portions of the Software. │
|
|
||||||
│ │
|
|
||||||
│ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, │
|
|
||||||
│ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF │
|
|
||||||
│ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. │
|
|
||||||
│ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY │
|
|
||||||
│ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, │
|
|
||||||
│ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE │
|
|
||||||
│ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │
|
|
||||||
│ │
|
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
|
||||||
#include "libc/math.h"
|
|
||||||
|
|
||||||
asm(".ident\t\"\\n\\n\
|
|
||||||
Musl libc (MIT License)\\n\
|
|
||||||
Copyright 2005-2014 Rich Felker, et. al.\"");
|
|
||||||
asm(".include \"libc/disclaimer.inc\"");
|
|
||||||
// clang-format off
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns 𝑥 × 2ʸ.
|
|
||||||
*/
|
|
||||||
double ldexp(double x, int n)
|
|
||||||
{
|
|
||||||
union {double f; uint64_t i;} u;
|
|
||||||
double_t y = x;
|
|
||||||
|
|
||||||
if (n > 1023) {
|
|
||||||
y *= 0x1p1023;
|
|
||||||
n -= 1023;
|
|
||||||
if (n > 1023) {
|
|
||||||
y *= 0x1p1023;
|
|
||||||
n -= 1023;
|
|
||||||
if (n > 1023)
|
|
||||||
n = 1023;
|
|
||||||
}
|
|
||||||
} else if (n < -1022) {
|
|
||||||
/* make sure final n < -53 to avoid double
|
|
||||||
rounding in the subnormal range */
|
|
||||||
y *= 0x1p-1022 * 0x1p53;
|
|
||||||
n += 1022 - 53;
|
|
||||||
if (n < -1022) {
|
|
||||||
y *= 0x1p-1022 * 0x1p53;
|
|
||||||
n += 1022 - 53;
|
|
||||||
if (n < -1022)
|
|
||||||
n = -1022;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
u.i = (uint64_t)(0x3ff+n)<<52;
|
|
||||||
x = y * u.f;
|
|
||||||
return x;
|
|
||||||
}
|
|
|
@ -1,66 +0,0 @@
|
||||||
/*-*- mode:c;indent-tabs-mode:t;c-basic-offset:8;tab-width:8;coding:utf-8 -*-│
|
|
||||||
│vi: set et ft=c ts=8 tw=8 fenc=utf-8 :vi│
|
|
||||||
╚──────────────────────────────────────────────────────────────────────────────╝
|
|
||||||
│ │
|
|
||||||
│ Musl Libc │
|
|
||||||
│ Copyright © 2005-2014 Rich Felker, et al. │
|
|
||||||
│ │
|
|
||||||
│ Permission is hereby granted, free of charge, to any person obtaining │
|
|
||||||
│ a copy of this software and associated documentation files (the │
|
|
||||||
│ "Software"), to deal in the Software without restriction, including │
|
|
||||||
│ without limitation the rights to use, copy, modify, merge, publish, │
|
|
||||||
│ distribute, sublicense, and/or sell copies of the Software, and to │
|
|
||||||
│ permit persons to whom the Software is furnished to do so, subject to │
|
|
||||||
│ the following conditions: │
|
|
||||||
│ │
|
|
||||||
│ The above copyright notice and this permission notice shall be │
|
|
||||||
│ included in all copies or substantial portions of the Software. │
|
|
||||||
│ │
|
|
||||||
│ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, │
|
|
||||||
│ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF │
|
|
||||||
│ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. │
|
|
||||||
│ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY │
|
|
||||||
│ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, │
|
|
||||||
│ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE │
|
|
||||||
│ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │
|
|
||||||
│ │
|
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
|
||||||
#include "libc/math.h"
|
|
||||||
|
|
||||||
asm(".ident\t\"\\n\\n\
|
|
||||||
Musl libc (MIT License)\\n\
|
|
||||||
Copyright 2005-2014 Rich Felker, et. al.\"");
|
|
||||||
asm(".include \"libc/disclaimer.inc\"");
|
|
||||||
/* clang-format off */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns 𝑥 × 2ʸ.
|
|
||||||
*/
|
|
||||||
float ldexpf(float x, int n)
|
|
||||||
{
|
|
||||||
union {float f; uint32_t i;} u;
|
|
||||||
float_t y = x;
|
|
||||||
|
|
||||||
if (n > 127) {
|
|
||||||
y *= 0x1p127f;
|
|
||||||
n -= 127;
|
|
||||||
if (n > 127) {
|
|
||||||
y *= 0x1p127f;
|
|
||||||
n -= 127;
|
|
||||||
if (n > 127)
|
|
||||||
n = 127;
|
|
||||||
}
|
|
||||||
} else if (n < -126) {
|
|
||||||
y *= 0x1p-126f * 0x1p24f;
|
|
||||||
n += 126 - 24;
|
|
||||||
if (n < -126) {
|
|
||||||
y *= 0x1p-126f * 0x1p24f;
|
|
||||||
n += 126 - 24;
|
|
||||||
if (n < -126)
|
|
||||||
n = -126;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
u.i = (uint32_t)(0x7f+n)<<23;
|
|
||||||
x = y * u.f;
|
|
||||||
return x;
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
|
||||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
|
||||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
|
||||||
│ Copyright 2023 Justine Alexandra Roberts Tunney │
|
|
||||||
│ │
|
|
||||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
|
||||||
│ any purpose with or without fee is hereby granted, provided that the │
|
|
||||||
│ above copyright notice and this permission notice appear in all copies. │
|
|
||||||
│ │
|
|
||||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
|
||||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
|
||||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
|
||||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
|
||||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
|
||||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
|
||||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
|
||||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
|
||||||
#include "libc/math.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns 𝑥 × 2ʸ.
|
|
||||||
*/
|
|
||||||
long double ldexpl(long double x, int n) {
|
|
||||||
return scalbnl(x, n);
|
|
||||||
}
|
|
|
@ -342,7 +342,6 @@ void *memmove(void *dst, const void *src, size_t n) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
asm("memcpy = memmove\n\t"
|
__strong_reference(memmove, memcpy);
|
||||||
".globl\tmemcpy");
|
|
||||||
|
|
||||||
#endif /* __aarch64__ */
|
#endif /* __aarch64__ */
|
||||||
|
|
|
@ -20,22 +20,14 @@
|
||||||
#include "libc/str/str.h"
|
#include "libc/str/str.h"
|
||||||
#include "libc/thread/thread.h"
|
#include "libc/thread/thread.h"
|
||||||
|
|
||||||
#ifdef __mmi_lock
|
|
||||||
#undef __mmi_lock
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __mmi_unlock
|
|
||||||
#undef __mmi_unlock
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// this lock currently needs to be (1) recursive and (2) not nsync
|
// this lock currently needs to be (1) recursive and (2) not nsync
|
||||||
|
|
||||||
extern pthread_mutex_t __mmi_lock_obj;
|
extern pthread_mutex_t __mmi_lock_obj;
|
||||||
|
|
||||||
void __mmi_lock(void) {
|
void(__mmi_lock)(void) {
|
||||||
pthread_mutex_lock(&__mmi_lock_obj);
|
pthread_mutex_lock(&__mmi_lock_obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __mmi_unlock(void) {
|
void(__mmi_unlock)(void) {
|
||||||
pthread_mutex_unlock(&__mmi_lock_obj);
|
pthread_mutex_unlock(&__mmi_lock_obj);
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
#include "libc/intrin/intrin.h"
|
|
||||||
#include "libc/intrin/kprintf.h"
|
#include "libc/intrin/kprintf.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -19,16 +19,12 @@
|
||||||
#include "libc/intrin/atomic.h"
|
#include "libc/intrin/atomic.h"
|
||||||
#include "libc/thread/thread.h"
|
#include "libc/thread/thread.h"
|
||||||
|
|
||||||
#ifdef pthread_spin_destroy
|
|
||||||
#undef pthread_spin_destroy
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Destroys spin lock.
|
* Destroys spin lock.
|
||||||
*
|
*
|
||||||
* @return 0 on success, or errno on error
|
* @return 0 on success, or errno on error
|
||||||
*/
|
*/
|
||||||
errno_t pthread_spin_destroy(pthread_spinlock_t *spin) {
|
errno_t(pthread_spin_destroy)(pthread_spinlock_t *spin) {
|
||||||
atomic_store_explicit(&spin->_lock, -1, memory_order_relaxed);
|
atomic_store_explicit(&spin->_lock, -1, memory_order_relaxed);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,10 +21,6 @@
|
||||||
#include "libc/intrin/atomic.h"
|
#include "libc/intrin/atomic.h"
|
||||||
#include "libc/thread/thread.h"
|
#include "libc/thread/thread.h"
|
||||||
|
|
||||||
#ifdef pthread_spin_trylock
|
|
||||||
#undef pthread_spin_trylock
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Acquires spin lock if available.
|
* Acquires spin lock if available.
|
||||||
*
|
*
|
||||||
|
@ -34,7 +30,7 @@
|
||||||
* @return 0 on success, or errno on error
|
* @return 0 on success, or errno on error
|
||||||
* @raise EBUSY if lock is already held
|
* @raise EBUSY if lock is already held
|
||||||
*/
|
*/
|
||||||
errno_t pthread_spin_trylock(pthread_spinlock_t *spin) {
|
errno_t(pthread_spin_trylock)(pthread_spinlock_t *spin) {
|
||||||
int x;
|
int x;
|
||||||
x = atomic_exchange_explicit(&spin->_lock, 1, memory_order_acquire);
|
x = atomic_exchange_explicit(&spin->_lock, 1, memory_order_acquire);
|
||||||
if (!x) return 0;
|
if (!x) return 0;
|
||||||
|
|
|
@ -20,10 +20,6 @@
|
||||||
#include "libc/intrin/strace.internal.h"
|
#include "libc/intrin/strace.internal.h"
|
||||||
#include "libc/thread/thread.h"
|
#include "libc/thread/thread.h"
|
||||||
|
|
||||||
#ifdef pthread_spin_unlock
|
|
||||||
#undef pthread_spin_unlock
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Releases spin lock.
|
* Releases spin lock.
|
||||||
*
|
*
|
||||||
|
@ -33,7 +29,7 @@
|
||||||
* @return 0 on success, or errno on error
|
* @return 0 on success, or errno on error
|
||||||
* @see pthread_spin_lock
|
* @see pthread_spin_lock
|
||||||
*/
|
*/
|
||||||
errno_t pthread_spin_unlock(pthread_spinlock_t *spin) {
|
errno_t(pthread_spin_unlock)(pthread_spinlock_t *spin) {
|
||||||
LOCKTRACE("pthread_spin_unlock(%t)", spin);
|
LOCKTRACE("pthread_spin_unlock(%t)", spin);
|
||||||
atomic_store_explicit(&spin->_lock, 0, memory_order_release);
|
atomic_store_explicit(&spin->_lock, 0, memory_order_release);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
#include "libc/limits.h"
|
#include "libc/limits.h"
|
||||||
#include "libc/math.h"
|
#include "libc/math.h"
|
||||||
|
#if !(LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024)
|
||||||
|
|
||||||
asm(".ident\t\"\\n\\n\
|
asm(".ident\t\"\\n\\n\
|
||||||
Musl libc (MIT License)\\n\
|
Musl libc (MIT License)\\n\
|
||||||
|
@ -35,13 +36,11 @@ asm(".include \"libc/disclaimer.inc\"");
|
||||||
// clang-format off
|
// clang-format off
|
||||||
|
|
||||||
long double scalblnl(long double x, long n) {
|
long double scalblnl(long double x, long n) {
|
||||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
|
||||||
return scalbln(x, n);
|
|
||||||
#else
|
|
||||||
if (n > INT_MAX)
|
if (n > INT_MAX)
|
||||||
n = INT_MAX;
|
n = INT_MAX;
|
||||||
else if (n < INT_MIN)
|
else if (n < INT_MIN)
|
||||||
n = INT_MIN;
|
n = INT_MIN;
|
||||||
return scalbnl(x, n);
|
return scalbnl(x, n);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* long double is long */
|
||||||
|
|
|
@ -1,26 +1,74 @@
|
||||||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
/*-*- mode:c;indent-tabs-mode:t;c-basic-offset:8;tab-width:8;coding:utf-8 -*-│
|
||||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
│vi: set et ft=c ts=8 tw=8 fenc=utf-8 :vi│
|
||||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
╚──────────────────────────────────────────────────────────────────────────────╝
|
||||||
│ Copyright 2022 Justine Alexandra Roberts Tunney │
|
|
||||||
│ │
|
│ │
|
||||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
│ Musl Libc │
|
||||||
│ any purpose with or without fee is hereby granted, provided that the │
|
│ Copyright © 2005-2014 Rich Felker, et al. │
|
||||||
│ above copyright notice and this permission notice appear in all copies. │
|
│ │
|
||||||
|
│ Permission is hereby granted, free of charge, to any person obtaining │
|
||||||
|
│ a copy of this software and associated documentation files (the │
|
||||||
|
│ "Software"), to deal in the Software without restriction, including │
|
||||||
|
│ without limitation the rights to use, copy, modify, merge, publish, │
|
||||||
|
│ distribute, sublicense, and/or sell copies of the Software, and to │
|
||||||
|
│ permit persons to whom the Software is furnished to do so, subject to │
|
||||||
|
│ the following conditions: │
|
||||||
|
│ │
|
||||||
|
│ The above copyright notice and this permission notice shall be │
|
||||||
|
│ included in all copies or substantial portions of the Software. │
|
||||||
|
│ │
|
||||||
|
│ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, │
|
||||||
|
│ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF │
|
||||||
|
│ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. │
|
||||||
|
│ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY │
|
||||||
|
│ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, │
|
||||||
|
│ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE │
|
||||||
|
│ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │
|
||||||
│ │
|
│ │
|
||||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
|
||||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
|
||||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
|
||||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
|
||||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
|
||||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
|
||||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
|
||||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
#include "libc/math.h"
|
#include "libc/math.h"
|
||||||
|
|
||||||
|
asm(".ident\t\"\\n\\n\
|
||||||
|
Musl libc (MIT License)\\n\
|
||||||
|
Copyright 2005-2014 Rich Felker, et. al.\"");
|
||||||
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
|
// clang-format off
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns 𝑥 × 2ʸ.
|
* Returns 𝑥 × 2ʸ.
|
||||||
*/
|
*/
|
||||||
double scalbn(double x, int n) {
|
double scalbn(double x, int n)
|
||||||
return ldexp(x, n);
|
{
|
||||||
|
union {double f; uint64_t i;} u;
|
||||||
|
double_t y = x;
|
||||||
|
|
||||||
|
if (n > 1023) {
|
||||||
|
y *= 0x1p1023;
|
||||||
|
n -= 1023;
|
||||||
|
if (n > 1023) {
|
||||||
|
y *= 0x1p1023;
|
||||||
|
n -= 1023;
|
||||||
|
if (n > 1023)
|
||||||
|
n = 1023;
|
||||||
|
}
|
||||||
|
} else if (n < -1022) {
|
||||||
|
/* make sure final n < -53 to avoid double
|
||||||
|
rounding in the subnormal range */
|
||||||
|
y *= 0x1p-1022 * 0x1p53;
|
||||||
|
n += 1022 - 53;
|
||||||
|
if (n < -1022) {
|
||||||
|
y *= 0x1p-1022 * 0x1p53;
|
||||||
|
n += 1022 - 53;
|
||||||
|
if (n < -1022)
|
||||||
|
n = -1022;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
u.i = (uint64_t)(0x3ff+n)<<52;
|
||||||
|
x = y * u.f;
|
||||||
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__strong_reference(scalbn, ldexp);
|
||||||
|
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||||
|
__strong_reference(scalbn, ldexpl);
|
||||||
|
__strong_reference(scalbn, scalbnl);
|
||||||
|
#endif
|
||||||
|
|
|
@ -1,26 +1,68 @@
|
||||||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
/*-*- mode:c;indent-tabs-mode:t;c-basic-offset:8;tab-width:8;coding:utf-8 -*-│
|
||||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
│vi: set et ft=c ts=8 tw=8 fenc=utf-8 :vi│
|
||||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
╚──────────────────────────────────────────────────────────────────────────────╝
|
||||||
│ Copyright 2022 Justine Alexandra Roberts Tunney │
|
|
||||||
│ │
|
│ │
|
||||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
│ Musl Libc │
|
||||||
│ any purpose with or without fee is hereby granted, provided that the │
|
│ Copyright © 2005-2014 Rich Felker, et al. │
|
||||||
│ above copyright notice and this permission notice appear in all copies. │
|
│ │
|
||||||
|
│ Permission is hereby granted, free of charge, to any person obtaining │
|
||||||
|
│ a copy of this software and associated documentation files (the │
|
||||||
|
│ "Software"), to deal in the Software without restriction, including │
|
||||||
|
│ without limitation the rights to use, copy, modify, merge, publish, │
|
||||||
|
│ distribute, sublicense, and/or sell copies of the Software, and to │
|
||||||
|
│ permit persons to whom the Software is furnished to do so, subject to │
|
||||||
|
│ the following conditions: │
|
||||||
|
│ │
|
||||||
|
│ The above copyright notice and this permission notice shall be │
|
||||||
|
│ included in all copies or substantial portions of the Software. │
|
||||||
|
│ │
|
||||||
|
│ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, │
|
||||||
|
│ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF │
|
||||||
|
│ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. │
|
||||||
|
│ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY │
|
||||||
|
│ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, │
|
||||||
|
│ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE │
|
||||||
|
│ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │
|
||||||
│ │
|
│ │
|
||||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
|
||||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
|
||||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
|
||||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
|
||||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
|
||||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
|
||||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
|
||||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
#include "libc/math.h"
|
#include "libc/math.h"
|
||||||
|
|
||||||
|
asm(".ident\t\"\\n\\n\
|
||||||
|
Musl libc (MIT License)\\n\
|
||||||
|
Copyright 2005-2014 Rich Felker, et. al.\"");
|
||||||
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
|
// clang-format off
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns 𝑥 × 2ʸ.
|
* Returns 𝑥 × 2ʸ.
|
||||||
*/
|
*/
|
||||||
float scalbnf(float x, int n) {
|
float scalbnf(float x, int n)
|
||||||
return ldexpf(x, n);
|
{
|
||||||
|
union {float f; uint32_t i;} u;
|
||||||
|
float_t y = x;
|
||||||
|
|
||||||
|
if (n > 127) {
|
||||||
|
y *= 0x1p127f;
|
||||||
|
n -= 127;
|
||||||
|
if (n > 127) {
|
||||||
|
y *= 0x1p127f;
|
||||||
|
n -= 127;
|
||||||
|
if (n > 127)
|
||||||
|
n = 127;
|
||||||
|
}
|
||||||
|
} else if (n < -126) {
|
||||||
|
y *= 0x1p-126f * 0x1p24f;
|
||||||
|
n += 126 - 24;
|
||||||
|
if (n < -126) {
|
||||||
|
y *= 0x1p-126f * 0x1p24f;
|
||||||
|
n += 126 - 24;
|
||||||
|
if (n < -126)
|
||||||
|
n = -126;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
u.i = (uint32_t)(0x7f+n)<<23;
|
||||||
|
x = y * u.f;
|
||||||
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__strong_reference(scalbnf, ldexpf);
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
#include "libc/math.h"
|
#include "libc/math.h"
|
||||||
#include "libc/tinymath/ldshape.internal.h"
|
#include "libc/tinymath/ldshape.internal.h"
|
||||||
|
#if !(LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024)
|
||||||
|
|
||||||
asm(".ident\t\"\\n\\n\
|
asm(".ident\t\"\\n\\n\
|
||||||
Musl libc (MIT License)\\n\
|
Musl libc (MIT License)\\n\
|
||||||
|
@ -38,9 +39,6 @@ asm(".include \"libc/disclaimer.inc\"");
|
||||||
* Returns 𝑥 × 2ʸ.
|
* Returns 𝑥 × 2ʸ.
|
||||||
*/
|
*/
|
||||||
long double scalbnl(long double x, int n) {
|
long double scalbnl(long double x, int n) {
|
||||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
|
||||||
return scalbn(x, n);
|
|
||||||
#elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384
|
|
||||||
union ldshape u;
|
union ldshape u;
|
||||||
if (n > 16383) {
|
if (n > 16383) {
|
||||||
x *= 0x1p16383L;
|
x *= 0x1p16383L;
|
||||||
|
@ -64,7 +62,8 @@ long double scalbnl(long double x, int n) {
|
||||||
u.f = 1.0;
|
u.f = 1.0;
|
||||||
u.i.se = 0x3fff + n;
|
u.i.se = 0x3fff + n;
|
||||||
return x * u.f;
|
return x * u.f;
|
||||||
#else
|
|
||||||
#error "architecture unsupported"
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__strong_reference(scalbnl, ldexpl);
|
||||||
|
|
||||||
|
#endif /* long double is long */
|
||||||
|
|
|
@ -70,15 +70,15 @@ sched_yield:
|
||||||
// a signal." ──Quoth IEEE 1003.1-2017 §functions/select
|
// a signal." ──Quoth IEEE 1003.1-2017 §functions/select
|
||||||
//
|
//
|
||||||
// On other platforms, sched_yield() takes no arguments.
|
// On other platforms, sched_yield() takes no arguments.
|
||||||
push $0 # timeout.tv_usec
|
push $0 // timeout.tv_usec
|
||||||
push $0 # timeout.tv_sec
|
push $0 // timeout.tv_sec
|
||||||
xor %edi,%edi # nfds
|
xor %edi,%edi // nfds
|
||||||
xor %esi,%esi # readfds
|
xor %esi,%esi // readfds
|
||||||
xor %edx,%edx # writefds
|
xor %edx,%edx // writefds
|
||||||
xor %r10d,%r10d # exceptfds
|
xor %r10d,%r10d // exceptfds
|
||||||
mov %rsp,%r8 # timeout
|
mov %rsp,%r8 // timeout
|
||||||
mov __NR_sched_yield,%eax # ordinal
|
mov __NR_sched_yield,%eax // ordinal
|
||||||
clc # linux
|
clc // linux
|
||||||
syscall
|
syscall
|
||||||
// It should not be possible for this to fail so we don't
|
// It should not be possible for this to fail so we don't
|
||||||
// bother going through the errno ritual. If this somehow
|
// bother going through the errno ritual. If this somehow
|
||||||
|
|
|
@ -38,7 +38,7 @@ noasan size_t strlen(const char *s) {
|
||||||
m = __builtin_ia32_pmovmskb128(*p == z) >> k << k;
|
m = __builtin_ia32_pmovmskb128(*p == z) >> k << k;
|
||||||
while (!m) m = __builtin_ia32_pmovmskb128(*++p == z);
|
while (!m) m = __builtin_ia32_pmovmskb128(*++p == z);
|
||||||
return (const char *)p + __builtin_ctzl(m) - s;
|
return (const char *)p + __builtin_ctzl(m) - s;
|
||||||
#elif defined(__GNUC__) || defined(__llvm__)
|
#else
|
||||||
#define ONES ((word)-1 / 255)
|
#define ONES ((word)-1 / 255)
|
||||||
#define BANE (ONES * (255 / 2 + 1))
|
#define BANE (ONES * (255 / 2 + 1))
|
||||||
typedef unsigned long mayalias word;
|
typedef unsigned long mayalias word;
|
||||||
|
@ -56,10 +56,6 @@ noasan size_t strlen(const char *s) {
|
||||||
w = ~w & (w - ONES) & BANE;
|
w = ~w & (w - ONES) & BANE;
|
||||||
}
|
}
|
||||||
return (const char *)p + (__builtin_ctzl(w) >> 3) - s;
|
return (const char *)p + (__builtin_ctzl(w) >> 3) - s;
|
||||||
#else
|
|
||||||
size_t n = 0;
|
|
||||||
while (*s++) ++n;
|
|
||||||
return n;
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,10 +56,10 @@ __syscall__:
|
||||||
|
|
||||||
.bss
|
.bss
|
||||||
.balign 8
|
.balign 8
|
||||||
.Lrcx: .quad 0 # clobbered by syscall
|
.Lrcx: .quad 0 // clobbered by syscall
|
||||||
.Lrdi: .quad 0 # just in case
|
.Lrdi: .quad 0 // just in case
|
||||||
.Lrsi: .quad 0 # just in case
|
.Lrsi: .quad 0 // just in case
|
||||||
.Lr8: .quad 0 # freebsd bug?
|
.Lr8: .quad 0 // freebsd bug?
|
||||||
.Lr9: .quad 0 # just in case
|
.Lr9: .quad 0 // just in case
|
||||||
.Lr10: .quad 0 # just in case
|
.Lr10: .quad 0 // just in case
|
||||||
.Lr11: .quad 0 # clobbered by syscall
|
.Lr11: .quad 0 // clobbered by syscall
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
#include "libc/intrin/bsr.h"
|
#include "libc/intrin/bsr.h"
|
||||||
#include "libc/intrin/intrin.h"
|
|
||||||
#ifndef __x86_64__
|
#ifndef __x86_64__
|
||||||
|
|
||||||
static const uint16_t kTpEnc[32 - 7] = {
|
static const uint16_t kTpEnc[32 - 7] = {
|
||||||
|
|
|
@ -33,7 +33,11 @@
|
||||||
// @param rax,rdx,xmm0,xmm1,st0,st1 is return value
|
// @param rax,rdx,xmm0,xmm1,st0,st1 is return value
|
||||||
// @see test/libc/runtime/gc_test.c
|
// @see test/libc/runtime/gc_test.c
|
||||||
// @threadsafe
|
// @threadsafe
|
||||||
__gc: mov %fs:0,%rcx // __get_tls()
|
__gc:
|
||||||
|
|
||||||
|
#ifdef __x86_64__
|
||||||
|
|
||||||
|
mov %fs:0,%rcx // __get_tls()
|
||||||
mov 0x18(%rcx),%rcx // tls::garbages
|
mov 0x18(%rcx),%rcx // tls::garbages
|
||||||
decl (%rcx) // ++g->i
|
decl (%rcx) // ++g->i
|
||||||
mov (%rcx),%r8d // r8 = g->i
|
mov (%rcx),%r8d // r8 = g->i
|
||||||
|
@ -58,4 +62,22 @@ __gc: mov %fs:0,%rcx // __get_tls()
|
||||||
ret
|
ret
|
||||||
9: ud2
|
9: ud2
|
||||||
nop
|
nop
|
||||||
|
|
||||||
|
#elif defined(__aarch64__)
|
||||||
|
|
||||||
|
stp x29,x30,[sp,-80]!
|
||||||
|
mov x29,sp
|
||||||
|
stp x0,x1,[sp,16]
|
||||||
|
stp x2,x3,[sp,32]
|
||||||
|
stp x4,x5,[sp,48]
|
||||||
|
stp x6,x7,[sp,64]
|
||||||
|
// todo jart
|
||||||
|
ldp x0,x1,[sp,16]
|
||||||
|
ldp x2,x3,[sp,32]
|
||||||
|
ldp x4,x5,[sp,48]
|
||||||
|
ldp x6,x7,[sp,64]
|
||||||
|
ldp x29,x30,[sp],80
|
||||||
|
|
||||||
|
#endif /* __x86_64__ */
|
||||||
|
|
||||||
.endfn __gc,globl,hidden
|
.endfn __gc,globl,hidden
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
#include "ape/sections.internal.h"
|
#include "ape/sections.internal.h"
|
||||||
#include "libc/calls/calls.h"
|
#include "libc/calls/calls.h"
|
||||||
#include "libc/calls/kntprioritycombos.internal.h"
|
|
||||||
#include "libc/errno.h"
|
#include "libc/errno.h"
|
||||||
#include "libc/log/log.h"
|
#include "libc/log/log.h"
|
||||||
#include "libc/nexgen32e/x86feature.h"
|
#include "libc/nexgen32e/x86feature.h"
|
||||||
|
|
|
@ -34,5 +34,5 @@ dontdiscard char *testlib_formatint(intptr_t x) {
|
||||||
}
|
}
|
||||||
*p++ = ')';
|
*p++ = ')';
|
||||||
*p++ = '\0';
|
*p++ = '\0';
|
||||||
return str;
|
return strdup(str);
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ asm(".ident\t\"\\n\\n\
|
||||||
Musl libc (MIT License)\\n\
|
Musl libc (MIT License)\\n\
|
||||||
Copyright 2005-2014 Rich Felker, et. al.\"");
|
Copyright 2005-2014 Rich Felker, et. al.\"");
|
||||||
asm(".include \"libc/disclaimer.inc\"");
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
/* clang-format off */
|
// clang-format off
|
||||||
|
|
||||||
/* origin: FreeBSD /usr/src/lib/msun/src/e_asin.c */
|
/* origin: FreeBSD /usr/src/lib/msun/src/e_asin.c */
|
||||||
/*
|
/*
|
||||||
|
@ -147,3 +147,7 @@ double asin(double x)
|
||||||
}
|
}
|
||||||
return ng ? -x : x;
|
return ng ? -x : x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||||
|
__strong_reference(asin, asinl);
|
||||||
|
#endif
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include "libc/tinymath/internal.h"
|
#include "libc/tinymath/internal.h"
|
||||||
#include "libc/tinymath/invtrigl.internal.h"
|
#include "libc/tinymath/invtrigl.internal.h"
|
||||||
#include "libc/tinymath/ldshape.internal.h"
|
#include "libc/tinymath/ldshape.internal.h"
|
||||||
|
#if !(LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024)
|
||||||
|
|
||||||
asm(".ident\t\"\\n\\n\
|
asm(".ident\t\"\\n\\n\
|
||||||
fdlibm (fdlibm license)\\n\
|
fdlibm (fdlibm license)\\n\
|
||||||
|
@ -55,16 +56,6 @@ asm(".include \"libc/disclaimer.inc\"");
|
||||||
* Converted to long double by David Schultz <das@FreeBSD.ORG>.
|
* Converted to long double by David Schultz <das@FreeBSD.ORG>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns arc sine of 𝑥.
|
|
||||||
*
|
|
||||||
* @define atan2(𝑥,sqrt((1-𝑥)*(1+𝑥)))
|
|
||||||
* @domain -1 ≤ 𝑥 ≤ 1
|
|
||||||
*/
|
|
||||||
long double asinl(long double x) {
|
|
||||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
|
||||||
return asin(x);
|
|
||||||
#elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384
|
|
||||||
#if LDBL_MANT_DIG == 64
|
#if LDBL_MANT_DIG == 64
|
||||||
#define CLOSETO1(u) (u.i.m>>56 >= 0xf7)
|
#define CLOSETO1(u) (u.i.m>>56 >= 0xf7)
|
||||||
#define CLEARBOTTOM(u) (u.i.m &= -1ULL << 32)
|
#define CLEARBOTTOM(u) (u.i.m &= -1ULL << 32)
|
||||||
|
@ -73,6 +64,14 @@ long double asinl(long double x) {
|
||||||
#define CLEARBOTTOM(u) (u.i.lo = 0)
|
#define CLEARBOTTOM(u) (u.i.lo = 0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns arc sine of 𝑥.
|
||||||
|
*
|
||||||
|
* @define atan2(𝑥,sqrt((1-𝑥)*(1+𝑥)))
|
||||||
|
* @domain -1 ≤ 𝑥 ≤ 1
|
||||||
|
*/
|
||||||
|
long double asinl(long double x)
|
||||||
|
{
|
||||||
union ldshape u = {x};
|
union ldshape u = {x};
|
||||||
long double z, r, s;
|
long double z, r, s;
|
||||||
uint16_t e = u.i.se & 0x7fff;
|
uint16_t e = u.i.se & 0x7fff;
|
||||||
|
@ -108,7 +107,6 @@ long double asinl(long double x) {
|
||||||
}
|
}
|
||||||
return sign ? -x : x;
|
return sign ? -x : x;
|
||||||
|
|
||||||
#else
|
|
||||||
#error "architecture unsupported"
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* long double is long */
|
||||||
|
|
|
@ -154,3 +154,7 @@ double atan(double x)
|
||||||
z = atanhi[id] - (x*(s1+s2) - atanlo[id] - x);
|
z = atanhi[id] - (x*(s1+s2) - atanlo[id] - x);
|
||||||
return sign ? -z : z;
|
return sign ? -z : z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||||
|
__strong_reference(atan, atanl);
|
||||||
|
#endif
|
||||||
|
|
|
@ -153,3 +153,7 @@ atan2(double y, double x)
|
||||||
return (z-pi_lo)-pi;/* atan(-,-) */
|
return (z-pi_lo)-pi;/* atan(-,-) */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||||
|
__strong_reference(atan2, atan2l);
|
||||||
|
#endif
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include "libc/tinymath/internal.h"
|
#include "libc/tinymath/internal.h"
|
||||||
#include "libc/tinymath/invtrigl.internal.h"
|
#include "libc/tinymath/invtrigl.internal.h"
|
||||||
#include "libc/tinymath/ldshape.internal.h"
|
#include "libc/tinymath/ldshape.internal.h"
|
||||||
|
#if !(LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024)
|
||||||
|
|
||||||
asm(".ident\t\"\\n\\n\
|
asm(".ident\t\"\\n\\n\
|
||||||
fdlibm (fdlibm license)\\n\
|
fdlibm (fdlibm license)\\n\
|
||||||
|
@ -69,11 +70,7 @@ long double atan2l(long double y, long double x)
|
||||||
: "st(1)");
|
: "st(1)");
|
||||||
return x;
|
return x;
|
||||||
|
|
||||||
#elif LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
#else
|
||||||
|
|
||||||
return atan2(y, x);
|
|
||||||
|
|
||||||
#elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384
|
|
||||||
|
|
||||||
union ldshape ux, uy;
|
union ldshape ux, uy;
|
||||||
long double z;
|
long double z;
|
||||||
|
@ -130,7 +127,7 @@ long double atan2l(long double y, long double x)
|
||||||
return (z-2*pio2_lo)-2*pio2_hi; /* atan(-,-) */
|
return (z-2*pio2_lo)-2*pio2_hi; /* atan(-,-) */
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
#error "architecture unsupported"
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* long double is long */
|
||||||
|
|
|
@ -32,7 +32,7 @@ asm(".ident\t\"\\n\\n\
|
||||||
Musl libc (MIT License)\\n\
|
Musl libc (MIT License)\\n\
|
||||||
Copyright 2005-2014 Rich Felker, et. al.\"");
|
Copyright 2005-2014 Rich Felker, et. al.\"");
|
||||||
asm(".include \"libc/disclaimer.inc\"");
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
/* clang-format off */
|
// clang-format off
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns inverse hyperbolic tangent of 𝑥.
|
* Returns inverse hyperbolic tangent of 𝑥.
|
||||||
|
@ -64,3 +64,7 @@ double atanh(double x)
|
||||||
}
|
}
|
||||||
return s ? -y : y;
|
return s ? -y : y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||||
|
__strong_reference(atanh, atanhl);
|
||||||
|
#endif
|
||||||
|
|
|
@ -28,19 +28,13 @@
|
||||||
#include "libc/math.h"
|
#include "libc/math.h"
|
||||||
#include "libc/tinymath/feval.internal.h"
|
#include "libc/tinymath/feval.internal.h"
|
||||||
#include "libc/tinymath/ldshape.internal.h"
|
#include "libc/tinymath/ldshape.internal.h"
|
||||||
|
#if !(LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024)
|
||||||
|
|
||||||
asm(".ident\t\"\\n\\n\
|
asm(".ident\t\"\\n\\n\
|
||||||
Musl libc (MIT License)\\n\
|
Musl libc (MIT License)\\n\
|
||||||
Copyright 2005-2014 Rich Felker, et. al.\"");
|
Copyright 2005-2014 Rich Felker, et. al.\"");
|
||||||
asm(".include \"libc/disclaimer.inc\"");
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
/* clang-format off */
|
// clang-format off
|
||||||
|
|
||||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
|
||||||
long double atanhl(long double x)
|
|
||||||
{
|
|
||||||
return atanh(x);
|
|
||||||
}
|
|
||||||
#elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns inverse hyperbolic tangent of 𝑥.
|
* Returns inverse hyperbolic tangent of 𝑥.
|
||||||
|
@ -72,6 +66,4 @@ long double atanhl(long double x)
|
||||||
return s ? -x : x;
|
return s ? -x : x;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#endif /* long double is long */
|
||||||
#error "architecture unsupported"
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include "libc/math.h"
|
#include "libc/math.h"
|
||||||
#include "libc/tinymath/internal.h"
|
#include "libc/tinymath/internal.h"
|
||||||
#include "libc/tinymath/ldshape.internal.h"
|
#include "libc/tinymath/ldshape.internal.h"
|
||||||
|
#if !(LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024)
|
||||||
|
|
||||||
asm(".ident\t\"\\n\\n\
|
asm(".ident\t\"\\n\\n\
|
||||||
fdlibm (fdlibm license)\\n\
|
fdlibm (fdlibm license)\\n\
|
||||||
|
@ -54,13 +55,6 @@ asm(".include \"libc/disclaimer.inc\"");
|
||||||
* Converted to long double by David Schultz <das@FreeBSD.ORG>.
|
* Converted to long double by David Schultz <das@FreeBSD.ORG>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
|
||||||
long double atanl(long double x)
|
|
||||||
{
|
|
||||||
return atan(x);
|
|
||||||
}
|
|
||||||
#elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384
|
|
||||||
|
|
||||||
#if LDBL_MANT_DIG == 64
|
#if LDBL_MANT_DIG == 64
|
||||||
#define EXPMAN(u) ((u.i.se & 0x7fff)<<8 | (u.i.m>>55 & 0xff))
|
#define EXPMAN(u) ((u.i.se & 0x7fff)<<8 | (u.i.m>>55 & 0xff))
|
||||||
|
|
||||||
|
@ -231,6 +225,4 @@ long double atanl(long double x)
|
||||||
return sign ? -z : z;
|
return sign ? -z : z;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#endif /* long double is long */
|
||||||
#error "architecture unsupported"
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -25,3 +25,7 @@
|
||||||
double cabs(double complex z) {
|
double cabs(double complex z) {
|
||||||
return hypot(creal(z), cimag(z));
|
return hypot(creal(z), cimag(z));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||||
|
__strong_reference(cabs, cabsl);
|
||||||
|
#endif
|
||||||
|
|
|
@ -18,14 +18,13 @@
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
#include "libc/complex.h"
|
#include "libc/complex.h"
|
||||||
#include "libc/math.h"
|
#include "libc/math.h"
|
||||||
|
#if !(LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns absolute value of complex number.
|
* Returns absolute value of complex number.
|
||||||
*/
|
*/
|
||||||
long double cabsl(long double complex z) {
|
long double cabsl(long double complex z) {
|
||||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
|
||||||
return cabs(z);
|
|
||||||
#else
|
|
||||||
return hypotl(creall(z), cimagl(z));
|
return hypotl(creall(z), cimagl(z));
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* long double is long */
|
||||||
|
|
|
@ -22,3 +22,7 @@
|
||||||
double carg(double complex z) {
|
double carg(double complex z) {
|
||||||
return atan2(cimag(z), creal(z));
|
return atan2(cimag(z), creal(z));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||||
|
__strong_reference(carg, cargl);
|
||||||
|
#endif
|
||||||
|
|
|
@ -18,11 +18,10 @@
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
#include "libc/complex.h"
|
#include "libc/complex.h"
|
||||||
#include "libc/math.h"
|
#include "libc/math.h"
|
||||||
|
#if !(LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024)
|
||||||
|
|
||||||
long double cargl(long double complex z) {
|
long double cargl(long double complex z) {
|
||||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
|
||||||
return carg(z);
|
|
||||||
#else
|
|
||||||
return atan2l(cimagl(z), creall(z));
|
return atan2l(cimagl(z), creall(z));
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* long double is long */
|
||||||
|
|
|
@ -33,9 +33,7 @@ asm(".ident\t\"\\n\\n\
|
||||||
Musl libc (MIT License)\\n\
|
Musl libc (MIT License)\\n\
|
||||||
Copyright 2005-2014 Rich Felker, et. al.\"");
|
Copyright 2005-2014 Rich Felker, et. al.\"");
|
||||||
asm(".include \"libc/disclaimer.inc\"");
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
/* clang-format off */
|
// clang-format off
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// FIXME
|
// FIXME
|
||||||
|
|
||||||
|
@ -52,3 +50,7 @@ double complex casin(double complex z)
|
||||||
double complex r = clog(CMPLX(-y, x) + csqrt(w));
|
double complex r = clog(CMPLX(-y, x) + csqrt(w));
|
||||||
return CMPLX(cimag(r), -creal(r));
|
return CMPLX(cimag(r), -creal(r));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||||
|
__strong_reference(casin, casinl);
|
||||||
|
#endif
|
||||||
|
|
|
@ -26,18 +26,16 @@
|
||||||
│ │
|
│ │
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
#include "libc/complex.h"
|
#include "libc/complex.h"
|
||||||
|
#if !(LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024)
|
||||||
|
|
||||||
asm(".ident\t\"\\n\\n\
|
asm(".ident\t\"\\n\\n\
|
||||||
Musl libc (MIT License)\\n\
|
Musl libc (MIT License)\\n\
|
||||||
Copyright 2005-2014 Rich Felker, et. al.\"");
|
Copyright 2005-2014 Rich Felker, et. al.\"");
|
||||||
asm(".include \"libc/disclaimer.inc\"");
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
/* clang-format off */
|
// clang-format off
|
||||||
|
|
||||||
long double complex casinl(long double complex z) {
|
long double complex casinl(long double complex z)
|
||||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
{
|
||||||
return casin(z);
|
|
||||||
#else
|
|
||||||
// FIXME
|
|
||||||
long double complex w;
|
long double complex w;
|
||||||
long double x, y;
|
long double x, y;
|
||||||
x = creall(z);
|
x = creall(z);
|
||||||
|
@ -45,5 +43,6 @@ long double complex casinl(long double complex z) {
|
||||||
w = CMPLXL(1.0 - (x - y)*(x + y), -2.0*x*y);
|
w = CMPLXL(1.0 - (x - y)*(x + y), -2.0*x*y);
|
||||||
long double complex r = clogl(CMPLXL(-y, x) + csqrtl(w));
|
long double complex r = clogl(CMPLXL(-y, x) + csqrtl(w));
|
||||||
return CMPLXL(cimagl(r), -creall(r));
|
return CMPLXL(cimagl(r), -creall(r));
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* long double is long */
|
||||||
|
|
|
@ -36,7 +36,7 @@ asm(".ident\t\"\\n\\n\
|
||||||
Musl libc (MIT License)\\n\
|
Musl libc (MIT License)\\n\
|
||||||
Copyright 2005-2014 Rich Felker, et. al.\"");
|
Copyright 2005-2014 Rich Felker, et. al.\"");
|
||||||
asm(".include \"libc/disclaimer.inc\"");
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
/* clang-format off */
|
// clang-format off
|
||||||
|
|
||||||
|
|
||||||
/* origin: OpenBSD /usr/src/lib/libm/src/s_catan.c */
|
/* origin: OpenBSD /usr/src/lib/libm/src/s_catan.c */
|
||||||
|
|
|
@ -1,45 +1,24 @@
|
||||||
/*-*- mode:c;indent-tabs-mode:t;c-basic-offset:8;tab-width:8;coding:utf-8 -*-│
|
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||||
│vi: set et ft=c ts=8 tw=8 fenc=utf-8 :vi│
|
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||||
╚──────────────────────────────────────────────────────────────────────────────╝
|
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||||
|
│ Copyright 2023 Justine Alexandra Roberts Tunney │
|
||||||
│ │
|
│ │
|
||||||
│ Musl Libc │
|
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||||
│ Copyright © 2005-2014 Rich Felker, et al. │
|
│ any purpose with or without fee is hereby granted, provided that the │
|
||||||
│ │
|
│ above copyright notice and this permission notice appear in all copies. │
|
||||||
│ Permission is hereby granted, free of charge, to any person obtaining │
|
|
||||||
│ a copy of this software and associated documentation files (the │
|
|
||||||
│ "Software"), to deal in the Software without restriction, including │
|
|
||||||
│ without limitation the rights to use, copy, modify, merge, publish, │
|
|
||||||
│ distribute, sublicense, and/or sell copies of the Software, and to │
|
|
||||||
│ permit persons to whom the Software is furnished to do so, subject to │
|
|
||||||
│ the following conditions: │
|
|
||||||
│ │
|
|
||||||
│ The above copyright notice and this permission notice shall be │
|
|
||||||
│ included in all copies or substantial portions of the Software. │
|
|
||||||
│ │
|
|
||||||
│ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, │
|
|
||||||
│ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF │
|
|
||||||
│ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. │
|
|
||||||
│ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY │
|
|
||||||
│ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, │
|
|
||||||
│ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE │
|
|
||||||
│ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │
|
|
||||||
│ │
|
│ │
|
||||||
|
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||||
|
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||||
|
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||||
|
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||||
|
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||||
|
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||||
|
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||||
|
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
#include "libc/complex.h"
|
#include "libc/complex.h"
|
||||||
#include "libc/math.h"
|
#include "libc/math.h"
|
||||||
#include "libc/tinymath/complex.internal.h"
|
|
||||||
|
|
||||||
asm(".ident\t\"\\n\\n\
|
double complex ccos(double complex z) {
|
||||||
Musl libc (MIT License)\\n\
|
|
||||||
Copyright 2005-2014 Rich Felker, et. al.\"");
|
|
||||||
asm(".include \"libc/disclaimer.inc\"");
|
|
||||||
/* clang-format off */
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* cos(z) = cosh(i z) */
|
|
||||||
|
|
||||||
double complex ccos(double complex z)
|
|
||||||
{
|
|
||||||
return ccosh(CMPLX(-cimag(z), creal(z)));
|
return ccosh(CMPLX(-cimag(z), creal(z)));
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ asm(".ident\t\"\\n\\n\
|
||||||
Musl libc (MIT License)\\n\
|
Musl libc (MIT License)\\n\
|
||||||
Copyright 2005-2014 Rich Felker, et. al.\"");
|
Copyright 2005-2014 Rich Felker, et. al.\"");
|
||||||
asm(".include \"libc/disclaimer.inc\"");
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
/* clang-format off */
|
// clang-format off
|
||||||
|
|
||||||
/* origin: FreeBSD /usr/src/lib/msun/src/s_cos.c */
|
/* origin: FreeBSD /usr/src/lib/msun/src/s_cos.c */
|
||||||
/*
|
/*
|
||||||
|
@ -120,3 +120,7 @@ double cos(double x)
|
||||||
return __sin(y[0], y[1], 1);
|
return __sin(y[0], y[1], 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
||||||
|
__strong_reference(cos, cosl);
|
||||||
|
#endif
|
||||||
|
|
|
@ -33,7 +33,7 @@ asm(".ident\t\"\\n\\n\
|
||||||
Musl libc (MIT License)\\n\
|
Musl libc (MIT License)\\n\
|
||||||
Copyright 2005-2014 Rich Felker, et. al.\"");
|
Copyright 2005-2014 Rich Felker, et. al.\"");
|
||||||
asm(".include \"libc/disclaimer.inc\"");
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
/* clang-format off */
|
// clang-format off
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns hyperbolic cosine of 𝑥.
|
* Returns hyperbolic cosine of 𝑥.
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include "libc/math.h"
|
#include "libc/math.h"
|
||||||
#include "libc/tinymath/kernel.internal.h"
|
#include "libc/tinymath/kernel.internal.h"
|
||||||
#include "libc/tinymath/ldshape.internal.h"
|
#include "libc/tinymath/ldshape.internal.h"
|
||||||
|
#if !(LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024)
|
||||||
|
|
||||||
asm(".ident\t\"\\n\\n\
|
asm(".ident\t\"\\n\\n\
|
||||||
Musl libc (MIT License)\\n\
|
Musl libc (MIT License)\\n\
|
||||||
|
@ -41,9 +42,6 @@ asm(".include \"libc/disclaimer.inc\"");
|
||||||
*/
|
*/
|
||||||
long double cosl(long double x)
|
long double cosl(long double x)
|
||||||
{
|
{
|
||||||
#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
|
|
||||||
return cos(x);
|
|
||||||
#elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384
|
|
||||||
union ldshape u = {x};
|
union ldshape u = {x};
|
||||||
unsigned n;
|
unsigned n;
|
||||||
long double y[2], hi, lo;
|
long double y[2], hi, lo;
|
||||||
|
@ -72,7 +70,6 @@ long double cosl(long double x)
|
||||||
default:
|
default:
|
||||||
return __sinl(hi, lo, 1);
|
return __sinl(hi, lo, 1);
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
#error "architecture unsupported"
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* long double is long */
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue