@@ -24,8 +24,6 @@ char* TMPL_MAIN = " _main:\n bl __j_main\n
2424char* WIDTH_BYTE = ".byte";
2525char* WIDTH_QUAD = ".quad";
2626char* TMPL_GLOBAL_NUM = " .data\n __j_%s: %s %i\n .text\n";
27- # todo: this is silly - fix printf?!
28- char* TMPL_GLOBAL_MIN_INTEGER = " .data\n __j_%s: %s 0x8000000000000000\n .text ; %i\n";
2927char* TMPL_GLOBAL_CHAR = " .data\n __j_%s: %s '%c'\n .text\n";
3028char* TMPL_GLOBAL_STRING = " .data\n __j_%s: .asciz %c%s%c\n .text\n";
3129
@@ -103,9 +101,7 @@ char* TMPL_BIN_COMPARE = " cmp x0, x1\n b.%s expr_
103101char* TMPL_VALUE_STRING = " .data\n _j_str_%i: .asciz %c%s%c\n .text\n adrp x0, _j_str_%i@PAGE\n add x0, x0, _j_str_%i@PAGEOFF\n";
104102char* TMPL_VALUE_INT = " mov x0, #%i\n";
105103char* TMPL_VALUE_Xi_INT = " mov x%i, #%i\n";
106- char* TMPL_VALUE_INT_LARGE = " .data\n _j_int_%i: .quad %x ; %i\n .text\n adrp x0, _j_int_%i@PAGE\n add x0, x0, _j_int_%i@PAGEOFF\n ldr x0, [x0]\n";
107- # todo: this is silly - fix printf?!
108- char* TMPL_VALUE_MIN_INTEGER = " .data\n _j_int_%i: .quad 0x8000000000000000 ; %x / %i\n .text\n adrp x0, _j_int_%i@PAGE\n add x0, x0, _j_int_%i@PAGEOFF\n ldr x0, [x0]\n";
104+ char* TMPL_VALUE_INT_LARGE = " .data\n _j_int_%i: .quad %x ; %i\n .text\n adrp x0, _j_int_%i@PAGE\n add x0, x0, _j_int_%i@PAGEOFF\n ldr x0, [x0]\n";
109105char* TMPL_VALUE_OF_LOCAL = " ldr x0, [fp, -%x]\n";
110106
111107# "add-a-negative" so it matches the addressing offsets
@@ -267,17 +263,14 @@ fn decl_global(void* self, Token* nameT, void* expr, Symbol* symbol) {
267263 } else {
268264 width = WIDTH_QUAD;
269265 }
270- void val = Emitter_eval_const(self, expr);
271266 char* tmpl;
272267 if val_type == T_CHAR {
273268 tmpl = TMPL_GLOBAL_CHAR;
274- } else if (val & 0x7fffffffffffffff) == 0 && val != 0 {
275- # todo: it's MIN_INTEGER, which printf can't handle - like literals
276- tmpl = TMPL_GLOBAL_MIN_INTEGER;
277269 } else {
278270 tmpl = TMPL_GLOBAL_NUM;
279271 }
280- printf(tmpl, name, width, val);
272+ expr = Emitter_eval_const(self, expr);
273+ printf(tmpl, name, width, expr);
281274}
282275
283276pub fn Emitter_do_fn_intro(void* self, void* nameT, int lbytes, void* args) {
@@ -857,10 +850,6 @@ fn Emitter_do_value_integer(void* self, int i) {
857850fn Emitter_do_value_integer_large(void* self, int i) {
858851 int seq = Emitter_seqnum(self);
859852 char* tmpl = TMPL_VALUE_INT_LARGE;
860- if (i & 0x7fffffffffffffff) == 0 && i != 0 {
861- # todo: it's MIN_INTEGER, which printf can't handle - like globals
862- tmpl = TMPL_VALUE_MIN_INTEGER;
863- }
864853 printf(tmpl, seq, i, i, seq, seq);
865854}
866855
0 commit comments