projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
- Improved addressmode optimisation for conv nodes
[libfirm]
/
ir
/
be
/
ia32
/
ia32_gen_decls.c
diff --git
a/ir/be/ia32/ia32_gen_decls.c
b/ir/be/ia32/ia32_gen_decls.c
index
30cb53b
..
46f0e31
100644
(file)
--- a/
ir/be/ia32/ia32_gen_decls.c
+++ b/
ir/be/ia32/ia32_gen_decls.c
@@
-66,7
+66,7
@@
static unsigned highest_bit(unsigned v)
return res;
}
return res;
}
-static void ia32_dump_comm(obstack_t *obst, const char *name, visibility vis, int size, int align) {
+static void ia32_dump_comm(obstack_t *obst, const char *name,
ir_
visibility vis, int size, int align) {
switch (asm_flavour) {
case ASM_LINUX_GAS:
if (vis == visibility_local)
switch (asm_flavour) {
case ASM_LINUX_GAS:
if (vis == visibility_local)
@@
-79,6
+79,8
@@
static void ia32_dump_comm(obstack_t *obst, const char *name, visibility vis, in
else
obstack_printf(obst, "\t.comm\t%s,%d\n", name, size);
break;
else
obstack_printf(obst, "\t.comm\t%s,%d\n", name, size);
break;
+ default:
+ break;
}
}
}
}
@@
-187,6
+189,10
@@
static void do_dump_atomic_init(obstack_t *obst, ir_node *init)
obstack_printf(obst, "%s", get_entity_ld_name(get_SymConst_entity(init)));
break;
obstack_printf(obst, "%s", get_entity_ld_name(get_SymConst_entity(init)));
break;
+ case symconst_ofs_ent:
+ obstack_printf(obst, "%d", get_entity_offset_bytes(get_SymConst_entity(init)));
+ break;
+
case symconst_type_size:
obstack_printf(obst, "%d", get_type_size_bytes(get_SymConst_type(init)));
break;
case symconst_type_size:
obstack_printf(obst, "%d", get_type_size_bytes(get_SymConst_type(init)));
break;
@@
-201,7
+207,7
@@
static void do_dump_atomic_init(obstack_t *obst, ir_node *init)
break;
default:
break;
default:
- assert(
0 &&
"dump_atomic_init(): don't know how to init from this SymConst");
+ assert(
!
"dump_atomic_init(): don't know how to init from this SymConst");
}
return;
}
return;
@@
-380,6
+386,8
@@
static void dump_object_size(obstack_t *obst, const char *name, int size) {
obstack_printf(obst, "\t.type\t%s,@object\n", name);
obstack_printf(obst, "\t.size\t%s,%d\n", name, size);
break;
obstack_printf(obst, "\t.type\t%s,@object\n", name);
obstack_printf(obst, "\t.size\t%s,%d\n", name, size);
break;
+ default:
+ break;
}
}
}
}
@@
-387,7
+395,7
@@
static void dump_object_size(obstack_t *obst, const char *name, int size) {
* Dumps the initialization of global variables that are not
* "uninitialized".
*/
* Dumps the initialization of global variables that are not
* "uninitialized".
*/
-static void dump_global(const
arch_env_t *arch
_env,
+static void dump_global(const
be_main_env_t *main
_env,
obstack_t *rdata_obstack, obstack_t *data_obstack,
obstack_t *comm_obstack, obstack_t *ctor_obstack,
entity *ent)
obstack_t *rdata_obstack, obstack_t *data_obstack,
obstack_t *comm_obstack, obstack_t *ctor_obstack,
entity *ent)
@@
-401,8
+409,8
@@
static void dump_global(const arch_env_t *arch_env,
* FIXME: did NOT work for partly constant values
*/
if (! is_Method_type(ty)) {
* FIXME: did NOT work for partly constant values
*/
if (! is_Method_type(ty)) {
-
ent
_variability variability = get_entity_variability(ent);
- visibility visibility = get_entity_visibility(ent);
+
ir
_variability variability = get_entity_variability(ent);
+
ir_
visibility visibility = get_entity_visibility(ent);
if (variability == variability_constant) {
/* a constant entity, put it on the rdata */
if (variability == variability_constant) {
/* a constant entity, put it on the rdata */
@@
-411,6
+419,8
@@
static void dump_global(const arch_env_t *arch_env,
/* check, whether it is initialized, if yes create data */
if (variability != variability_uninitialized) {
/* check, whether it is initialized, if yes create data */
if (variability != variability_uninitialized) {
+ be_dbg_variable(main_env->db_handle, obst, ent);
+
if (visibility == visibility_external_visible) {
obstack_printf(obst, ".globl\t%s\n", ld_name);
}
if (visibility == visibility_external_visible) {
obstack_printf(obst, ".globl\t%s\n", ld_name);
}
@@
-557,6
+567,8
@@
static void dump_global(const arch_env_t *arch_env,
obstack_printf(obst, "\n");
}
else if (visibility != visibility_external_allocated) {
obstack_printf(obst, "\n");
}
else if (visibility != visibility_external_allocated) {
+ be_dbg_variable(main_env->db_handle, comm_obstack, ent);
+
/* uninitialized and NOT external */
if (get_entity_owner(ent) != get_tls_type()) {
/* calculate the alignment */
/* uninitialized and NOT external */
if (get_entity_owner(ent) != get_tls_type()) {
/* calculate the alignment */
@@
-575,16
+587,16
@@
static void dump_global(const arch_env_t *arch_env,
} else {
/* TLS */
if (visibility == visibility_external_visible) {
} else {
/* TLS */
if (visibility == visibility_external_visible) {
- obstack_printf(
obst
, ".globl\t%s\n", ld_name);
+ obstack_printf(
comm_obstack
, ".globl\t%s\n", ld_name);
}
dump_object_size(comm_obstack, ld_name, get_type_size_bytes(ty));
align = get_type_alignment_bytes(ty);
}
dump_object_size(comm_obstack, ld_name, get_type_size_bytes(ty));
align = get_type_alignment_bytes(ty);
- ia32_dump_align(
obst
, align);
+ ia32_dump_align(
comm_obstack
, align);
obstack_printf(comm_obstack, "%s:\n\t.zero %d\n", ld_name, get_type_size_bytes(ty));
}
}
} /* ! is method type */
obstack_printf(comm_obstack, "%s:\n\t.zero %d\n", ld_name, get_type_size_bytes(ty));
}
}
} /* ! is method type */
- else if (ctor_obstack &&
arch_ent_is_constructor(arch_env, ent)
) {
+ else if (ctor_obstack &&
get_method_img_section(ent) == section_constructors
) {
ia32_dump_align(ctor_obstack, get_type_alignment_bytes(ty));
dump_size_type(ctor_obstack, get_type_alignment_bytes(ty));
obstack_printf(ctor_obstack, "%s\n", ld_name);
ia32_dump_align(ctor_obstack, get_type_alignment_bytes(ty));
dump_size_type(ctor_obstack, get_type_alignment_bytes(ty));
obstack_printf(ctor_obstack, "%s\n", ld_name);
@@
-599,7
+611,7
@@
static void ia32_dump_globals(ir_type *gt, ia32_decl_env_t *env)
int i, n = get_compound_n_members(gt);
for (i = 0; i < n; i++)
int i, n = get_compound_n_members(gt);
for (i = 0; i < n; i++)
- dump_global(env->main_env
->arch_env
, env->rodata_obst, env->data_obst, env->comm_obst, env->ctor_obst,
+ dump_global(env->main_env, env->rodata_obst, env->data_obst, env->comm_obst, env->ctor_obst,
get_compound_member(gt, i));
}
get_compound_member(gt, i));
}