+ const sparc_attr_t *attr = get_sparc_attr_const(node);
+
+ // no need to fix offset as we are adressing via the framepointer
+ if (attr->immediate_value >= 0) {
+ be_emit_cstring("\tadd ");
+ sparc_emit_source_register(node, 0);
+ be_emit_cstring(", ");
+ be_emit_irprintf("%ld", attr->immediate_value);
+ } else {
+ be_emit_cstring("\tsub ");
+ sparc_emit_source_register(node, 0);
+ be_emit_cstring(", ");
+ be_emit_irprintf("%ld", -attr->immediate_value);
+ }
+
+ be_emit_cstring(", ");
+ sparc_emit_dest_register(node, 0);
+ be_emit_finish_line_gas(node);
+}
+
+static const char *get_icc_unsigned(pn_Cmp pnc)
+{
+ switch (pnc) {
+ case pn_Cmp_False: return "bn";
+ case pn_Cmp_Eq: return "be";
+ case pn_Cmp_Lt: return "blu";
+ case pn_Cmp_Le: return "bleu";
+ case pn_Cmp_Gt: return "bgu";
+ case pn_Cmp_Ge: return "bgeu";
+ case pn_Cmp_Lg: return "bne";
+ case pn_Cmp_Leg: return "ba";
+ default: panic("Cmp has unsupported pnc");
+ }
+}
+
+static const char *get_icc_signed(pn_Cmp pnc)
+{
+ switch (pnc) {
+ case pn_Cmp_False: return "bn";
+ case pn_Cmp_Eq: return "be";
+ case pn_Cmp_Lt: return "bl";
+ case pn_Cmp_Le: return "ble";
+ case pn_Cmp_Gt: return "bg";
+ case pn_Cmp_Ge: return "bge";
+ case pn_Cmp_Lg: return "bne";
+ case pn_Cmp_Leg: return "ba";
+ default: panic("Cmp has unsupported pnc");
+ }
+}
+
+static const char *get_fcc(pn_Cmp pnc)
+{
+ switch (pnc) {
+ case pn_Cmp_False: return "fbn";
+ case pn_Cmp_Eq: return "fbe";
+ case pn_Cmp_Lt: return "fbl";
+ case pn_Cmp_Le: return "fble";
+ case pn_Cmp_Gt: return "fbg";
+ case pn_Cmp_Ge: return "fbge";
+ case pn_Cmp_Lg: return "fblg";
+ case pn_Cmp_Leg: return "fbo";
+ case pn_Cmp_Uo: return "fbu";
+ case pn_Cmp_Ue: return "fbue";
+ case pn_Cmp_Ul: return "fbul";
+ case pn_Cmp_Ule: return "fbule";
+ case pn_Cmp_Ug: return "fbug";
+ case pn_Cmp_Uge: return "fbuge";
+ case pn_Cmp_Ne: return "fbne";
+ case pn_Cmp_True: return "fba";
+ case pn_Cmp_max:
+ break;
+ }
+ panic("invalid pnc");
+}
+
+typedef const char* (*get_cc_func)(pn_Cmp pnc);
+
+static void emit_sparc_branch(const ir_node *node, get_cc_func get_cc)
+{
+ const sparc_jmp_cond_attr_t *attr = get_sparc_jmp_cond_attr_const(node);
+ pn_Cmp pnc = attr->pnc;
+ const ir_node *proj_true = NULL;
+ const ir_node *proj_false = NULL;