+ arch_register_class_t const *const cls = arch_get_irn_register_req_out(start, reg->offset)->cls;
+ reg->irn = new_r_Proj(start, cls ? cls->mode : mode_M, reg->offset);
+ }
+ return reg->irn;
+}
+
+static ir_node *get_g0(ir_graph *irg)
+{
+ return get_reg(irg, &start_g0);
+}
+
+static ir_node *get_g7(ir_graph *irg)
+{
+ return get_reg(irg, &start_g7);
+}
+
+static ir_node *make_tls_offset(dbg_info *dbgi, ir_node *block,
+ ir_entity *entity, int32_t offset)
+{
+ ir_node *hi = new_bd_sparc_SetHi(dbgi, block, entity, offset);
+ ir_node *low = new_bd_sparc_Xor_imm(dbgi, block, hi, entity, offset);
+ return low;
+}
+
+static ir_node *make_address(dbg_info *dbgi, ir_node *block, ir_entity *entity,
+ int32_t offset)
+{
+ if (get_entity_owner(entity) == get_tls_type()) {
+ ir_graph *irg = get_irn_irg(block);
+ ir_node *g7 = get_g7(irg);
+ ir_node *offsetn = make_tls_offset(dbgi, block, entity, offset);
+ ir_node *add = new_bd_sparc_Add_reg(dbgi, block, g7, offsetn);
+ return add;
+ } else {
+ ir_node *hi = new_bd_sparc_SetHi(dbgi, block, entity, offset);
+ ir_node *low = new_bd_sparc_Or_imm(dbgi, block, hi, entity, offset);
+ return low;