mirror of
git://c9x.me/qbe.git
synced 2026-04-05 09:59:47 +00:00
please as with truncated constants
Apple's assembler actually hard crashed on overflows.
This commit is contained in:
parent
0f6bbb1c7c
commit
e0ded59639
18
emit.c
18
emit.c
@ -61,11 +61,14 @@ emitfnlnk(char *n, Lnk *l, FILE *f)
|
||||
void
|
||||
emitdat(Dat *d, FILE *f)
|
||||
{
|
||||
static char *dtoa[] = {
|
||||
[DB] = "\t.byte",
|
||||
[DH] = "\t.short",
|
||||
[DW] = "\t.int",
|
||||
[DL] = "\t.quad"
|
||||
static struct {
|
||||
char decl[8];
|
||||
int64_t mask;
|
||||
} di[] = {
|
||||
[DB] = {"\t.byte", 0xffL},
|
||||
[DH] = {"\t.short", 0xffffL},
|
||||
[DW] = {"\t.int", 0xffffffffL},
|
||||
[DL] = {"\t.quad", -1L},
|
||||
};
|
||||
static int64_t zero;
|
||||
char *p;
|
||||
@ -111,12 +114,13 @@ emitdat(Dat *d, FILE *f)
|
||||
else if (d->isref) {
|
||||
p = d->u.ref.name[0] == '"' ? "" : T.assym;
|
||||
fprintf(f, "%s %s%s%+"PRId64"\n",
|
||||
dtoa[d->type], p, d->u.ref.name,
|
||||
di[d->type].decl, p, d->u.ref.name,
|
||||
d->u.ref.off);
|
||||
}
|
||||
else {
|
||||
fprintf(f, "%s %"PRId64"\n",
|
||||
dtoa[d->type], d->u.num);
|
||||
di[d->type].decl,
|
||||
d->u.num & di[d->type].mask);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user