return;
case 12:
- be_emit_irprintf("0x%02x%02x%02x%02x%02x%02x%02x%02x"
- "%02x%02x%02x%02x", get_tarval_sub_bits(tv, 11),
- get_tarval_sub_bits(tv, 10), get_tarval_sub_bits(tv, 9),
- get_tarval_sub_bits(tv, 8), get_tarval_sub_bits(tv, 7),
- get_tarval_sub_bits(tv, 6), get_tarval_sub_bits(tv, 5),
- get_tarval_sub_bits(tv, 4), get_tarval_sub_bits(tv, 3),
- get_tarval_sub_bits(tv, 2), get_tarval_sub_bits(tv, 1),
- get_tarval_sub_bits(tv, 0));
+ /* Beware: Mixed endian output! One little endian number emitted as
+ * three longs. Each long initializer is written in big endian. */
+ be_emit_irprintf(
+ "\t.long\t0x%02x%02x%02x%02x\n"
+ "\t.long\t0x%02x%02x%02x%02x\n"
+ "\t.long\t0x%02x%02x%02x%02x",
+ get_tarval_sub_bits(tv, 3), get_tarval_sub_bits(tv, 2),
+ get_tarval_sub_bits(tv, 1), get_tarval_sub_bits(tv, 0),
+ get_tarval_sub_bits(tv, 7), get_tarval_sub_bits(tv, 6),
+ get_tarval_sub_bits(tv, 5), get_tarval_sub_bits(tv, 4),
+ get_tarval_sub_bits(tv, 11), get_tarval_sub_bits(tv, 10),
+ get_tarval_sub_bits(tv, 9), get_tarval_sub_bits(tv, 8)
+ );
return;
case 16:
- be_emit_irprintf("0x%02x%02x%02x%02x%02x%02x%02x%02x"
- "%02x%02x%02x%02x%02x%02x%02x%02x",
+ be_emit_irprintf(
+ "\t.long\t0x%02x%02x%02x%02x0x%02x%02x%02x%02x0x%02x%02x%02x%02x0x%02x%02x%02x%02x",
get_tarval_sub_bits(tv, 15), get_tarval_sub_bits(tv, 16),
get_tarval_sub_bits(tv, 13), get_tarval_sub_bits(tv, 12),
get_tarval_sub_bits(tv, 11), get_tarval_sub_bits(tv, 10),
- get_tarval_sub_bits(tv, 9), get_tarval_sub_bits(tv, 8),
- get_tarval_sub_bits(tv, 7), get_tarval_sub_bits(tv, 6),
- get_tarval_sub_bits(tv, 5), get_tarval_sub_bits(tv, 4),
- get_tarval_sub_bits(tv, 3), get_tarval_sub_bits(tv, 2),
- get_tarval_sub_bits(tv, 1), get_tarval_sub_bits(tv, 0));
+ get_tarval_sub_bits(tv, 9), get_tarval_sub_bits(tv, 8),
+ get_tarval_sub_bits(tv, 7), get_tarval_sub_bits(tv, 6),
+ get_tarval_sub_bits(tv, 5), get_tarval_sub_bits(tv, 4),
+ get_tarval_sub_bits(tv, 3), get_tarval_sub_bits(tv, 2),
+ get_tarval_sub_bits(tv, 1), get_tarval_sub_bits(tv, 0)
+ );
return;
}
}
return;
- case iro_Add:
- if (!mode_is_int(mode) && !mode_is_reference(mode)) {
- panic("Constant must be int or pointer for '+' to work");
- }
- do_dump_atomic_init(env, get_Add_left(init));
- be_emit_cstring(" + ");
- do_dump_atomic_init(env, get_Add_right(init));
- return;
-
- case iro_Sub:
- if (!mode_is_int(mode) && !mode_is_reference(mode)) {
- panic("Constant must be int or pointer for '-' to work");
- }
- do_dump_atomic_init(env, get_Sub_left(init));
- be_emit_cstring(" - ");
- do_dump_atomic_init(env, get_Sub_right(init));
- return;
-
- case iro_Mul:
- if (!mode_is_int(mode) && !mode_is_reference(mode)) {
- panic("Constant must be int or pointer for '*' to work");
- }
- do_dump_atomic_init(env, get_Mul_left(init));
- be_emit_cstring(" * ");
- do_dump_atomic_init(env, get_Mul_right(init));
- return;
+ case iro_Add:
+ if (!mode_is_int(mode) && !mode_is_reference(mode)) {
+ panic("Constant must be int or pointer for '+' to work");
+ }
+ do_dump_atomic_init(env, get_Add_left(init));
+ be_emit_cstring(" + ");
+ do_dump_atomic_init(env, get_Add_right(init));
+ return;
- default:
- assert(0 && "dump_atomic_init(): unknown IR-node");
+ case iro_Sub:
+ if (!mode_is_int(mode) && !mode_is_reference(mode)) {
+ panic("Constant must be int or pointer for '-' to work");
+ }
+ do_dump_atomic_init(env, get_Sub_left(init));
+ be_emit_cstring(" - ");
+ do_dump_atomic_init(env, get_Sub_right(init));
+ return;
+
+ case iro_Mul:
+ if (!mode_is_int(mode) && !mode_is_reference(mode)) {
+ panic("Constant must be int or pointer for '*' to work");
+ }
+ do_dump_atomic_init(env, get_Mul_left(init));
+ be_emit_cstring(" * ");
+ do_dump_atomic_init(env, get_Mul_right(init));
+ return;
+
+ default:
+ panic("dump_atomic_init(): unsupported IR-node %+F", init);
}
}
be_emit_write_line();
break;
}
- } else if (section == GAS_SECTION_PIC_TRAMPOLINES) {
+ } else if (section == GAS_SECTION_PIC_TRAMPOLINES
+ || section == GAS_SECTION_PIC_SYMBOLS) {
if (be_gas_flavour == GAS_FLAVOUR_MACH_O) {
be_emit_cstring("\t.indirect_symbol ");
be_emit_ident(get_entity_ident(ent));
be_emit_char('\n');
be_emit_write_line();
- be_emit_cstring("\thlt ; hlt ; hlt ; hlt ; hlt\n");
- be_emit_write_line();
+ if (section == GAS_SECTION_PIC_TRAMPOLINES) {
+ be_emit_cstring("\thlt ; hlt ; hlt ; hlt ; hlt\n");
+ be_emit_write_line();
+ } else {
+ assert(section == GAS_SECTION_PIC_SYMBOLS);
+ be_emit_cstring("\t.long 0\n");
+ be_emit_write_line();
+ }
} else {
panic("PIC trampolines not yet supported in this gas mode");
}
dump_compound_init(env, ent);
break;
default:
- assert(0);
+ panic("Unimplemented type kind in dump_global()");
}
}
}