Add MODE=optlinux build mode (#141)

This commit is contained in:
Justine Tunney 2021-10-14 19:36:49 -07:00
parent 226aaf3547
commit 67b5200a0b
111 changed files with 934 additions and 854 deletions

View file

@ -31,8 +31,9 @@
* @see mkdir()
*/
int makedirs(const char *path, unsigned mode) {
int rc;
int e, rc;
char *dir;
e = errno;
if (mkdir(path, mode) != -1) return 0;
if (errno != ENOENT) return -1;
dir = xdirname(path);
@ -43,5 +44,6 @@ int makedirs(const char *path, unsigned mode) {
}
free(dir);
if (rc == -1) return -1;
errno = e;
return mkdir(path, mode);
}

View file

@ -16,10 +16,6 @@
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
*/
#include "libc/intrin/pcmpgtb.h"
#include "libc/intrin/pmovmskb.h"
#include "libc/intrin/punpckhbw.h"
#include "libc/intrin/punpcklbw.h"
#include "libc/mem/mem.h"
#include "libc/str/str.h"
#include "libc/str/thompike.h"
@ -38,25 +34,30 @@ char16_t *utf8toutf16(const char *p, size_t n, size_t *z) {
wint_t x, a, b;
char16_t *r, *q;
unsigned m, j, w;
uint8_t v1[16], v2[16], vz[16];
if (z) *z = 0;
if (n == -1) n = p ? strlen(p) : 0;
if ((q = r = malloc(n * sizeof(char16_t) * 2 + sizeof(char16_t)))) {
if ((q = r = malloc((n + 16) * sizeof(char16_t) * 2 + sizeof(char16_t)))) {
for (i = 0; i < n;) {
if (i + 16 < n) { /* 34x ascii */
bzero(vz, 16);
#if defined(__SSE2__) && defined(__GNUC__) && !defined(__STRICT_ANSI__)
if (i + 16 < n) {
typedef char xmm_t __attribute__((__vector_size__(16), __aligned__(1)));
xmm_t vi, vz = {0};
do {
memcpy(v1, p + i, 16);
pcmpgtb((int8_t *)v2, (int8_t *)v1, (int8_t *)vz);
if (pmovmskb(v2) != 0xFFFF) break;
punpcklbw(v2, v1, vz);
punpckhbw(v1, v1, vz);
memcpy(q + 0, v2, 16);
memcpy(q + 8, v1, 16);
i += 16;
q += 16;
vi = *(const xmm_t *)(p + i);
*(xmm_t *)(q + 0) = __builtin_ia32_punpcklbw128(vi, vz);
*(xmm_t *)(q + 8) = __builtin_ia32_punpckhbw128(vi, vz);
if (!(m = __builtin_ia32_pmovmskb128(vi > vz) ^ 0xffff)) {
i += 16;
q += 16;
} else {
m = __builtin_ctzl(m);
i += m;
q += m;
break;
}
} while (i + 16 < n);
}
#endif
x = p[i++] & 0xff;
if (x >= 0300) {
a = ThomPikeByte(x);