#include "irnode_t.h"
#include "ircons.h"
#include "irprog_t.h"
+#include "iroptimize.h"
#include "lower_dw.h"
#include "array.h"
#include "error.h"
#define ID(x) new_id_from_chars(x, sizeof(x)-1)
-static ir_entity *create_compiler_lib_entity(const char *name, ir_type *type)
-{
- ir_type *glob = get_glob_type();
- ident *id = new_id_from_str(name);
- ir_entity *entity;
-
- /* Hack: we need to know the type of runtime library we use. Strictly
- speaking it's not the same as the object-file-format. But in practice
- the following should be enough */
- if (be_gas_object_file_format == OBJECT_FILE_FORMAT_MACH_O
- || be_gas_object_file_format == OBJECT_FILE_FORMAT_COFF) {
- id = id_mangle3("___", id, "");
- } else {
- id = id_mangle3("__", id, "");
- }
- entity = new_entity(glob, id, type);
- set_entity_visibility(entity, ir_visibility_external);
- set_entity_ld_ident(entity, id);
- return entity;
-}
-
/**
* Maps a Div. Change into a library call.
*/
/* 64bit signed Division */
ent = env->divdi3;
if (ent == NULL) {
- ent = env->divdi3 = create_compiler_lib_entity("divdi3", method);
+ /* create library entity */
+ ident *id = ID("__divdi3");
+ ent = env->divdi3 = create_compilerlib_entity(id, method);
}
} else {
/* 64bit unsigned Division */
ent = env->udivdi3;
if (ent == NULL) {
/* create library entity */
- ent = env->udivdi3 = create_compiler_lib_entity("udivdi3", method);
+ ident *id = ID("__udivdi3");
+ ent = env->udivdi3 = create_compilerlib_entity(id, method);
}
}
ent = env->moddi3;
if (ent == NULL) {
/* create library entity */
- ent = env->moddi3 = create_compiler_lib_entity("moddi3", method);
+ ident *id = ID("__moddi3");
+ ent = env->moddi3 = create_compilerlib_entity(id, method);
}
} else {
/* 64bit signed Modulo */
ent = env->umoddi3;
if (ent == NULL) {
/* create library entity */
- ent = env->umoddi3 = create_compiler_lib_entity("umoddi3", method);
+ ident *id = ID("__umoddi3");
+ ent = env->umoddi3 = create_compilerlib_entity(id, method);
}
}
#include "ircons_t.h"
#include "irgmod.h"
#include "irgwalk.h"
+#include "iroptimize.h"
#include "error.h"
static pmap *entities;
entity = pmap_get(entities, id);
if (entity == NULL) {
- ir_type *glob = get_glob_type();
- entity = new_entity(glob, id, mtp);
- set_entity_visibility(entity, ir_visibility_external);
+ entity = create_compilerlib_entity(id, mtp);
pmap_insert(entities, id, entity);
}
#include "irgwalk.h"
#include "irmode.h"
#include "iropt_dbg.h"
+#include "iroptimize.h"
#include "irprog_t.h"
#include "lower_softfloat.h"
#include "lowering.h"
else
snprintf(buf, sizeof(buf), "__%s%s%s%s", name, first_param, second_param, result);
- id = new_id_from_str(buf);
- ent = new_entity(get_glob_type(), id, method);
-
- set_entity_ld_ident(ent, get_entity_ident(ent));
+ id = new_id_from_str(buf);
+ ent = create_compilerlib_entity(id, method);
sym.entity_p = ent;
return new_r_SymConst(irg, mode_P_code, sym, symconst_addr_ent);