mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-30 00:08:30 +00:00
Further refine documentation
This commit is contained in:
parent
1bc3a25505
commit
548dcb9f08
27 changed files with 389 additions and 1478 deletions
|
@ -98,25 +98,37 @@ typedef float __m128_u _Vector_size(16) forcealign(1) mayalias;
|
|||
│ cosmopolitan § it's a trap! » sse » scalar ops ─╬─│┼
|
||||
╚────────────────────────────────────────────────────────────────────────────│*/
|
||||
|
||||
forceinline __m128 _mm_add_ss(__m128 m128_0, __m128 m128_1) {
|
||||
m128_0[0] += m128_1[0];
|
||||
return m128_0;
|
||||
}
|
||||
#define _mm_add_ss(m128_0, m128_1) \
|
||||
({ \
|
||||
__m128 a = m128_0; \
|
||||
__m128 b = m128_0; \
|
||||
a[0] += b[0]; \
|
||||
a; \
|
||||
})
|
||||
|
||||
forceinline __m128 _mm_sub_ss(__m128 m128_0, __m128 m128_1) {
|
||||
m128_0[0] -= m128_1[0];
|
||||
return m128_0;
|
||||
}
|
||||
#define _mm_sub_ss(m128_0, m128_1) \
|
||||
({ \
|
||||
__m128 a = m128_0; \
|
||||
__m128 b = m128_0; \
|
||||
a[0] -= b[0]; \
|
||||
a; \
|
||||
})
|
||||
|
||||
forceinline __m128 _mm_mul_ss(__m128 m128_0, __m128 m128_1) {
|
||||
m128_0[0] *= m128_1[0];
|
||||
return m128_0;
|
||||
}
|
||||
#define _mm_mul_ss(m128_0, m128_1) \
|
||||
({ \
|
||||
__m128 a = m128_0; \
|
||||
__m128 b = m128_0; \
|
||||
a[0] *= b[0]; \
|
||||
a; \
|
||||
})
|
||||
|
||||
forceinline __m128 _mm_div_ss(__m128 m128_0, __m128 m128_1) {
|
||||
m128_0[0] /= m128_1[0];
|
||||
return m128_0;
|
||||
}
|
||||
#define _mm_div_ss(m128_0, m128_1) \
|
||||
({ \
|
||||
__m128 a = m128_0; \
|
||||
__m128 b = m128_0; \
|
||||
a[0] /= b[0]; \
|
||||
a; \
|
||||
})
|
||||
|
||||
#define _mm_rcp_ss(M128) __builtin_ia32_rcpss((__v4sf)(M128)) /*~1/x*/
|
||||
#define _mm_sqrt_ss(M128) __builtin_ia32_sqrtss((__v4sf)(M128)) /*sqrt𝑥*/
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
|
||||
#define va_end(AP)
|
||||
#define va_copy(DST, SRC) ((DST)[0] = (SRC)[0])
|
||||
#define va_start(AP, LAST) \
|
||||
do { \
|
||||
*(AP) = *(struct __va *)__va_area__; \
|
||||
#define va_start(AP, LAST) \
|
||||
do { \
|
||||
*(AP) = *(struct __va_list *)__va_area__; \
|
||||
} while (0)
|
||||
|
||||
#define va_arg(AP, TYPE) \
|
||||
(*(TYPE *)__va_arg(AP, sizeof(TYPE), _Alignof(TYPE), \
|
||||
__builtin_reg_class(TYPE)))
|
||||
|
||||
typedef struct __va va_list[1];
|
||||
typedef struct __va_list va_list[1];
|
||||
|
|
|
@ -73,7 +73,7 @@ void vflogf_onfail(FILE *f) {
|
|||
fseek(f, SEEK_SET, 0);
|
||||
f->beg = f->end = 0;
|
||||
clearerr(f);
|
||||
(fprintf)(f, "performed emergency log truncation: %s\r\n", strerror(err));
|
||||
(fprintf)(f, "performed emergency log truncation: %s\n", strerror(err));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -112,10 +112,10 @@ void(vflogf)(unsigned level, const char *file, int line, FILE *f,
|
|||
}
|
||||
(vfprintf)(f, fmt, va);
|
||||
va_end(va);
|
||||
fputs("\r\n", f);
|
||||
fputs("\n", f);
|
||||
if (level == kLogFatal) {
|
||||
__start_fatal(file, line);
|
||||
(dprintf)(STDERR_FILENO, "fatal error see logfile\r\n");
|
||||
(dprintf)(STDERR_FILENO, "fatal error see logfile\n");
|
||||
__die();
|
||||
unreachable;
|
||||
}
|
||||
|
|
22
libc/math.h
22
libc/math.h
|
@ -285,28 +285,6 @@ void sincos(double, double *, double *);
|
|||
void sincosf(float, float *, float *);
|
||||
void sincosl(long double, long double *, long double *);
|
||||
|
||||
/*───────────────────────────────────────────────────────────────────────────│─╗
|
||||
│ cosmopolitan § mathematics » x87 ─╬─│┼
|
||||
╚────────────────────────────────────────────────────────────────────────────│*/
|
||||
|
||||
#define fldz() __X87_CONST(fldz, 0x0p+0)
|
||||
#define fld1() __X87_CONST(fld1, 0x8p-3)
|
||||
#define fldpi() __X87_CONST(fldpi, M_PI)
|
||||
#define fldl2t() __X87_CONST(fldl2t, M_LOG2_10)
|
||||
#define fldlg2() __X87_CONST(fldlg2, M_LOG10_2)
|
||||
#define fldln2() __X87_CONST(fldln2, M_LN2)
|
||||
#define fldl2e() __X87_CONST(fldl2e, M_LOG2E)
|
||||
#ifdef __x86__
|
||||
#define __X87_CONST(OP, VALUE) \
|
||||
({ \
|
||||
long double St0##OP; \
|
||||
asm(#OP : "=t"(St0##OP)); \
|
||||
St0##OP; \
|
||||
})
|
||||
#else
|
||||
#define __X87_CONST(OP, VALUE) VALUE
|
||||
#endif
|
||||
|
||||
COSMOPOLITAN_C_END_
|
||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||
#endif /* COSMOPOLITAN_LIBC_MATH_H_ */
|
||||
|
|
|
@ -21,15 +21,15 @@
|
|||
|
||||
/ Returns binary logarithm of integer 𝑥.
|
||||
/
|
||||
/ 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
|
||||
/ 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 rsi:rdi is 128-bit unsigned 𝑥 value
|
||||
/ @return eax number in range [0,128) or undef if 𝑥 is 0
|
||||
|
|
|
@ -409,7 +409,7 @@ int WSARecvFrom(uint64_t s, const struct NtIovec *out_lpBuffers,
|
|||
uint32_t *inout_fromsockaddrlen,
|
||||
struct NtOverlapped *opt_inout_lpOverlapped,
|
||||
const NtWsaOverlappedCompletionRoutine opt_lpCompletionRoutine)
|
||||
paramsnonnull((2, 5, 6, 7));
|
||||
paramsnonnull((2, 5));
|
||||
|
||||
int WSARecvDisconnect(uint64_t s,
|
||||
const struct NtIovec *opt_lpInboundDisconnectData);
|
||||
|
|
|
@ -20,13 +20,13 @@
|
|||
#include "libc/macros.h"
|
||||
#include "libc/runtime/valist.h"
|
||||
|
||||
static void *__va_arg_mem(struct __va *ap, size_t sz, size_t align) {
|
||||
static void *__va_arg_mem(struct __va_list *ap, size_t sz, size_t align) {
|
||||
void *r = (void *)ROUNDUP((intptr_t)ap->overflow_arg_area, align);
|
||||
ap->overflow_arg_area = (void *)ROUNDUP((intptr_t)r + sz, 8);
|
||||
return r;
|
||||
}
|
||||
|
||||
void *__va_arg(struct __va *ap, size_t sz, unsigned align, unsigned k) {
|
||||
void *__va_arg(struct __va_list *ap, size_t sz, unsigned align, unsigned k) {
|
||||
void *r;
|
||||
switch (k) {
|
||||
case 0:
|
||||
|
|
|
@ -3,14 +3,14 @@
|
|||
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||
COSMOPOLITAN_C_START_
|
||||
|
||||
struct __va {
|
||||
struct __va_list {
|
||||
uint32_t gp_offset;
|
||||
uint32_t fp_offset;
|
||||
void *overflow_arg_area;
|
||||
void *reg_save_area;
|
||||
};
|
||||
|
||||
void *__va_arg(struct __va *, size_t, unsigned, unsigned);
|
||||
void *__va_arg(struct __va_list *, size_t, unsigned, unsigned);
|
||||
|
||||
COSMOPOLITAN_C_END_
|
||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue