+static ir_node *do_strict_conv(dbg_info *dbgi, ir_node *node)
+{
+ ir_mode *mode = get_irn_mode(node);
+
+ if(!(get_irg_fp_model(current_ir_graph) & fp_explicit_rounding))
+ return node;
+ if(!mode_is_float(mode))
+ return node;
+
+ /* check if there is already a Conv */
+ if (get_irn_op(node) == op_Conv) {
+ /* convert it into a strict Conv */
+ set_Conv_strict(node, 1);
+ return node;
+ }
+
+ /* otherwise create a new one */
+ return new_d_strictConv(dbgi, node, mode);
+}
+
+static ir_node *get_global_var_address(dbg_info *const dbgi,
+ const declaration_t *const decl)
+{
+ assert(decl->declaration_type == DECLARATION_TYPE_GLOBAL_VARIABLE);
+
+ ir_entity *const entity = decl->v.entity;
+ switch ((storage_class_tag_t)decl->storage_class) {
+ case STORAGE_CLASS_THREAD:
+ case STORAGE_CLASS_THREAD_EXTERN:
+ case STORAGE_CLASS_THREAD_STATIC: {
+ ir_node *const no_mem = new_NoMem();
+ ir_node *const tls = get_irg_tls(current_ir_graph);
+ return new_d_simpleSel(dbgi, no_mem, tls, entity);
+ }
+
+ default:
+ return create_symconst(dbgi, entity);
+ }
+}
+