Release Cosmopolitan v3.6.0

This release is an atomic upgrade to GCC 14.1.0 with C23 and C++23
This commit is contained in:
Justine Tunney 2024-07-23 03:16:17 -07:00
parent 62ace3623a
commit 5660ec4741
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
1585 changed files with 117353 additions and 271644 deletions

View file

@ -52,7 +52,7 @@ char *StringifyMatrixByte(long yn, long xn, const unsigned char M[yn][xn],
StringTableFormatter formatter, const char *param1,
const char *param2, const char *param3) {
struct StringBuilder *sb = NewStringBuilder();
FormatMatrixByte(yn, xn, M, StringBuilderAppend, sb, formatter, param1,
param2, param3);
FormatMatrixByte(yn, xn, M, (void *)StringBuilderAppend, sb, formatter,
param1, param2, param3);
return FreeStringBuilder(sb);
}

View file

@ -61,7 +61,7 @@ char *StringifyMatrixDouble(long yn, long xn, const double M[yn][xn],
const char *param2, const char *param3, double digs,
double rounder(double)) {
struct StringBuilder *sb = NewStringBuilder();
FormatMatrixDouble(yn, xn, M, StringBuilderAppend, sb, formatter, param1,
param2, param3, digs, rounder);
FormatMatrixDouble(yn, xn, M, (void *)StringBuilderAppend, sb, formatter,
param1, param2, param3, digs, rounder);
return FreeStringBuilder(sb);
}

View file

@ -53,7 +53,7 @@ char *StringifyMatrixShort(long yn, long xn, const short M[yn][xn],
StringTableFormatter formatter, const char *param1,
const char *param2, const char *param3) {
struct StringBuilder *sb = NewStringBuilder();
FormatMatrixShort(yn, xn, M, StringBuilderAppend, sb, formatter, param1,
param2, param3);
FormatMatrixShort(yn, xn, M, (void *)StringBuilderAppend, sb, formatter,
param1, param2, param3);
return FreeStringBuilder(sb);
}

View file

@ -77,31 +77,33 @@ static const char *GetStorageSpecifier(const char *type, int *out_width,
static void EmitSection(long yn, long xn, int w, int arrayalign, int emit(),
void *a) {
void (*Emit)(const char *, void *) = (void (*)(const char *, void *))emit;
char alignstr[21];
FormatUint32(alignstr, arrayalign);
if (arrayalign <= 8 && yn * xn * w == 8) {
emit("\t.rodata.cst", a);
emit("8\n", a);
Emit("\t.rodata.cst", a);
Emit("8\n", a);
} else if (arrayalign <= 16 && yn * xn * w == 16) {
emit("\t.rodata.cst", a);
emit("16\n", a);
Emit("\t.rodata.cst", a);
Emit("16\n", a);
} else if (arrayalign <= 32 && yn * xn * w == 32) {
emit("\t.rodata.cst", a);
emit("32\n", a);
Emit("\t.rodata.cst", a);
Emit("32\n", a);
} else if (arrayalign <= 64 && yn * xn * w == 64) {
emit("\t.rodata.cst", a);
emit("64\n", a);
Emit("\t.rodata.cst", a);
Emit("64\n", a);
} else {
emit("\t.rodata\n", a);
emit("\t.align\t", a);
emit(alignstr, a);
emit("\n", a);
Emit("\t.rodata\n", a);
Emit("\t.align\t", a);
Emit(alignstr, a);
Emit("\n", a);
}
}
void *FormatStringTableAsAssembly(long yn, long xn, const char *const T[yn][xn],
int emit(), void *a, const char *type,
const char *name, const char *scope) {
void (*Emit)(const char *, void *) = (void (*)(const char *, void *))emit;
int w, align;
const char *storage;
char ynstr[21], xnstr[21];
@ -110,16 +112,16 @@ void *FormatStringTableAsAssembly(long yn, long xn, const char *const T[yn][xn],
FormatUint64(ynstr, yn);
FormatUint64(xnstr, xn);
EmitSection(yn, xn, w, GetArrayAlignment(yn, xn, w, align), emit, a);
emit(name, a);
emit(":", a);
Emit(name, a);
Emit(":", a);
if (strwidth(name, 0) >= 8)
emit("\n", a);
Emit("\n", a);
FormatStringTable(yn, xn, T, emit, a, gc(xstrcat("\t.", storage, "\t")), ",",
"\n");
emit("\t.endobj\t", a);
emit(name, a);
emit(",", a);
emit(firstnonnull(scope, "globl"), a);
emit("\n\t.previous\n", a);
Emit("\t.endobj\t", a);
Emit(name, a);
Emit(",", a);
Emit(firstnonnull(scope, "globl"), a);
Emit("\n\t.previous\n", a);
return (/* unconst */ void *)T;
}

View file

@ -23,18 +23,19 @@
void *FormatStringTableAsCode(long yn, long xn, const char *const T[yn][xn],
int emit(), void *arg, const char *type,
const char *name, const char *ignored) {
void (*Emit)(const char *, void *) = (void (*)(const char *, void *))emit;
char ynstr[21], xnstr[21];
FormatUint64(ynstr, yn);
FormatUint64(xnstr, xn);
emit(type, arg);
emit(" ", arg);
emit(firstnonnull(name, "M"), arg);
emit("[", arg);
emit(ynstr, arg);
emit("][", arg);
emit(xnstr, arg);
emit("] = {", arg);
Emit(type, arg);
Emit(" ", arg);
Emit(firstnonnull(name, "M"), arg);
Emit("[", arg);
Emit(ynstr, arg);
Emit("][", arg);
Emit(xnstr, arg);
Emit("] = {", arg);
FormatStringTable(yn, xn, T, emit, arg, "\n {", ", ", "},");
emit("\n};\n", arg);
Emit("\n};\n", arg);
return (/* unconst */ void *)T;
}

View file

@ -46,18 +46,19 @@ static unsigned GetBiggestCellWidth(long yn, long xn,
void *FormatStringTable(long yn, long xn, const char *const T[yn][xn],
int emit(), void *a, const char *startrow,
const char *comma, const char *endrow) {
void (*Emit)(const char *, void *) = (void (*)(const char *, void *))emit;
long w, y, x, i, n;
w = GetBiggestCellWidth(yn, xn, T);
for (y = 0; y < yn; ++y) {
emit(startrow, a);
Emit(startrow, a);
for (x = 0; x < xn; ++x) {
if (x)
emit(comma, a);
Emit(comma, a);
for (n = w - strwidth(T[y][x], 0), i = 0; i < n; ++i)
emit(" ", a);
emit(T[y][x], a);
Emit(" ", a);
Emit(T[y][x], a);
}
emit(endrow, a);
Emit(endrow, a);
}
return (/* unconst */ void *)T;
}