mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-15 07:19:18 +00:00
Brush up some more code
This commit is contained in:
parent
ee6566a152
commit
a2d269dc38
32 changed files with 251 additions and 335 deletions
|
@ -220,7 +220,7 @@ int unbing(int c) {
|
|||
l = 0;
|
||||
r = ARRAYLEN(kCp437i) - 1;
|
||||
while (l <= r) {
|
||||
m = (l + r) >> 1;
|
||||
m = (l & r) + ((l ^ r) >> 1); // floor((a+b)/2)
|
||||
if ((kCp437i[m] >> 8) < c) {
|
||||
l = m + 1;
|
||||
} else if ((kCp437i[m] >> 8) > c) {
|
||||
|
|
|
@ -743,7 +743,7 @@ static void __asan_report_memory_origin_image(intptr_t a, int z) {
|
|||
r = n = st->count;
|
||||
k = a - st->addr_base;
|
||||
while (l < r) {
|
||||
m = (l + r) >> 1;
|
||||
m = (l & r) + ((l ^ r) >> 1); // floor((a+b)/2)
|
||||
if (st->symbols[m].y < k) {
|
||||
l = m + 1;
|
||||
} else {
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/assert.h"
|
||||
#include "libc/intrin/midpoint.h"
|
||||
#include "libc/runtime/memtrack.internal.h"
|
||||
|
||||
noasan unsigned FindMemoryInterval(const struct MemoryIntervals *mm, int x) {
|
||||
|
@ -25,7 +24,7 @@ noasan unsigned FindMemoryInterval(const struct MemoryIntervals *mm, int x) {
|
|||
l = 0;
|
||||
r = mm->i;
|
||||
while (l < r) {
|
||||
m = _midpoint(l, r);
|
||||
m = (l & r) + ((l ^ r) >> 1); // floor((a+b)/2)
|
||||
if (mm->p[m].y < x) {
|
||||
l = m + 1;
|
||||
} else {
|
||||
|
|
|
@ -161,7 +161,7 @@ privileged static bool kismapped(int x) {
|
|||
if (kismemtrackhosed()) return false;
|
||||
r = _weaken(_mmi)->i;
|
||||
while (l < r) {
|
||||
m = (l + r) >> 1;
|
||||
m = (l & r) + ((l ^ r) >> 1); // floor((a+b)/2)
|
||||
if (_weaken(_mmi)->p[m].y < x) {
|
||||
l = m + 1;
|
||||
} else {
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
#ifndef COSMOPOLITAN_LIBC_BITS_MIDPOINT_H_
|
||||
#define COSMOPOLITAN_LIBC_BITS_MIDPOINT_H_
|
||||
#include "libc/assert.h"
|
||||
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||
|
||||
#if defined(__GNUC__) && !defined(__STRICT_ANSI__) && defined(__x86__)
|
||||
/**
|
||||
* Computes `(a + b) / 2` assuming unsigned.
|
||||
*
|
||||
* This implementation is the fastest on AMD Zen architecture.
|
||||
*/
|
||||
#define _midpoint(a, b) \
|
||||
({ \
|
||||
typeof((a) + (b)) a_ = (a); \
|
||||
typeof(a_) b_ = (b); \
|
||||
_unassert(a_ >= 0); \
|
||||
_unassert(b_ >= 0); \
|
||||
asm("add\t%1,%0\n\t" \
|
||||
"rcr\t%0" \
|
||||
: "+r"(a_) \
|
||||
: "r"(b_)); \
|
||||
a_; \
|
||||
})
|
||||
#else
|
||||
/**
|
||||
* Computes `(a + b) / 2` assuming unsigned.
|
||||
*/
|
||||
#define _midpoint(a, b) (((a) & (b)) + ((a) ^ (b)) / 2)
|
||||
#endif /* __GNUC__ && !__STRICT_ANSI__ && x86 */
|
||||
|
||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||
#endif /* COSMOPOLITAN_LIBC_BITS_MIDPOINT_H_ */
|
|
@ -18,7 +18,6 @@
|
|||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/assert.h"
|
||||
#include "libc/dce.h"
|
||||
#include "libc/intrin/midpoint.h"
|
||||
#include "libc/mem/mem.h"
|
||||
#include "libc/mem/sortedints.internal.h"
|
||||
#include "libc/str/str.h"
|
||||
|
@ -28,7 +27,7 @@ bool ContainsInt(const struct SortedInts *t, int k) {
|
|||
l = 0;
|
||||
r = t->n - 1;
|
||||
while (l <= r) {
|
||||
m = _midpoint(l, r);
|
||||
m = (l & r) + ((l ^ r) >> 1); // floor((a+b)/2)
|
||||
if (t->p[m] < k) {
|
||||
l = m + 1;
|
||||
} else if (t->p[m] > k) {
|
||||
|
@ -45,7 +44,7 @@ int LeftmostInt(const struct SortedInts *t, int k) {
|
|||
l = 0;
|
||||
r = t->n;
|
||||
while (l < r) {
|
||||
m = _midpoint(l, r);
|
||||
m = (l & r) + ((l ^ r) >> 1); // floor((a+b)/2)
|
||||
if (t->p[m] < k) {
|
||||
l = m + 1;
|
||||
} else {
|
||||
|
|
|
@ -41,7 +41,7 @@ dontinstrument privileged int __get_symbol(struct SymbolTable *t, intptr_t a) {
|
|||
r = n = t->count;
|
||||
k = a - t->addr_base;
|
||||
while (l < r) {
|
||||
m = (l + r) >> 1;
|
||||
m = (l & r) + ((l ^ r) >> 1); // floor((a+b)/2)
|
||||
if (t->symbols[m].y < k) {
|
||||
l = m + 1;
|
||||
} else {
|
||||
|
|
|
@ -30,7 +30,8 @@ textwindows int sys_closesocket_nt(struct Fd *fd) {
|
|||
struct SockFd *sockfd;
|
||||
sockfd = (struct SockFd *)fd->extra;
|
||||
free(sockfd);
|
||||
if (__sys_closesocket_nt(fd->handle) != -1) {
|
||||
int rc = __sys_closesocket_nt(fd->handle);
|
||||
if (rc != -1) {
|
||||
return 0;
|
||||
} else {
|
||||
return __winsockerr();
|
||||
|
|
|
@ -39,7 +39,7 @@ uint32_t crc32c(uint32_t init, const void *data, size_t size) {
|
|||
static uint32_t kCrc32cTab[256];
|
||||
if (!once) {
|
||||
crc32init(kCrc32cTab, 0x82f63b78);
|
||||
once = 0;
|
||||
once = 1;
|
||||
}
|
||||
p = data;
|
||||
pe = p + size;
|
||||
|
|
|
@ -399,7 +399,7 @@ int iswseparator(wint_t c) {
|
|||
l = 0;
|
||||
r = n = sizeof(kCodes) / sizeof(kCodes[0]);
|
||||
while (l < r) {
|
||||
m = (l + r) >> 1;
|
||||
m = (l & r) + ((l ^ r) >> 1); // floor((a+b)/2)
|
||||
if (kCodes[m][1] < c) {
|
||||
l = m + 1;
|
||||
} else {
|
||||
|
@ -411,7 +411,7 @@ int iswseparator(wint_t c) {
|
|||
l = 0;
|
||||
r = n = sizeof(kAstralCodes) / sizeof(kAstralCodes[0]);
|
||||
while (l < r) {
|
||||
m = (l + r) >> 1;
|
||||
m = (l & r) + ((l ^ r) >> 1); // floor((a+b)/2)
|
||||
if (kAstralCodes[m][1] < c) {
|
||||
l = m + 1;
|
||||
} else {
|
||||
|
|
|
@ -24,39 +24,6 @@
|
|||
* 1. If SRC is too long, it's truncated and *not* NUL-terminated.
|
||||
* 2. If SRC is too short, the remainder is zero-filled.
|
||||
*
|
||||
* Please note this function isn't designed to prevent untrustworthy
|
||||
* data from modifying memory without authorization; the memccpy()
|
||||
* function can be used for that purpose.
|
||||
*
|
||||
* Here's an example of the only use case we know of for strncpy:
|
||||
*
|
||||
* static const struct People {
|
||||
* char name[8];
|
||||
* int age;
|
||||
* } kPeople[] = {
|
||||
* {"alice", 29}, //
|
||||
* {"bob", 42}, //
|
||||
* };
|
||||
*
|
||||
* int GetAge(const char *name) {
|
||||
* char k[8];
|
||||
* int m, l, r;
|
||||
* l = 0;
|
||||
* r = ARRAYLEN(kPeople) - 1;
|
||||
* strncpy(k, name, 8);
|
||||
* while (l <= r) {
|
||||
* m = (l + r) >> 1;
|
||||
* if (READ64BE(kPeople[m].name) < READ64BE(k)) {
|
||||
* l = m + 1;
|
||||
* } else if (READ64BE(kPeople[m].name) > READ64BE(k)) {
|
||||
* r = m - 1;
|
||||
* } else {
|
||||
* return kPeople[m].age;
|
||||
* }
|
||||
* }
|
||||
* return -1;
|
||||
* }
|
||||
*
|
||||
* @return dest
|
||||
* @see stpncpy(), memccpy()
|
||||
* @asyncsignalsafe
|
||||
|
|
|
@ -201,7 +201,7 @@ wint_t towlower(wint_t c) {
|
|||
l = 0;
|
||||
r = n = sizeof(kLower) / sizeof(kLower[0]);
|
||||
while (l < r) {
|
||||
m = (l + r) >> 1;
|
||||
m = (l & r) + ((l ^ r) >> 1); // floor((a+b)/2)
|
||||
if (kLower[m].y < c) {
|
||||
l = m + 1;
|
||||
} else {
|
||||
|
@ -218,7 +218,7 @@ wint_t towlower(wint_t c) {
|
|||
l = 0;
|
||||
r = n = sizeof(kAstralLower) / sizeof(kAstralLower[0]);
|
||||
while (l < r) {
|
||||
m = (l + r) >> 1;
|
||||
m = (l & r) + ((l ^ r) >> 1); // floor((a+b)/2)
|
||||
if (kAstralLower[m][1] < c) {
|
||||
l = m + 1;
|
||||
} else {
|
||||
|
|
|
@ -164,7 +164,7 @@ wint_t towupper(wint_t c) {
|
|||
l = 0;
|
||||
r = n = sizeof(kUpper) / sizeof(kUpper[0]);
|
||||
while (l < r) {
|
||||
m = (l + r) >> 1;
|
||||
m = (l & r) + ((l ^ r) >> 1); // floor((a+b)/2)
|
||||
if (kUpper[m].y < c) {
|
||||
l = m + 1;
|
||||
} else {
|
||||
|
@ -181,7 +181,7 @@ wint_t towupper(wint_t c) {
|
|||
l = 0;
|
||||
r = n = sizeof(kAstralUpper) / sizeof(kAstralUpper[0]);
|
||||
while (l < r) {
|
||||
m = (l + r) >> 1;
|
||||
m = (l & r) + ((l ^ r) >> 1); // floor((a+b)/2)
|
||||
if (kAstralUpper[m][1] < c) {
|
||||
l = m + 1;
|
||||
} else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue