+ const mips_immediate_attr_t *attr = get_mips_immediate_attr_const(node);
+
+ switch(attr->imm_type) {
+ case MIPS_IMM_CONST:
+ be_emit_irprintf(env->emit, "%d", attr->val);
+ break;
+ case MIPS_IMM_SYMCONST_LO:
+ be_emit_cstring(env->emit, "%lo($");
+ be_emit_ident(env->emit, get_entity_ld_ident(attr->entity));
+ if(attr->val != 0) {
+ be_emit_irprintf(env->emit, "%+d", attr->val);
+ }
+ be_emit_char(env->emit, ')');
+ break;
+ case MIPS_IMM_SYMCONST_HI:
+ be_emit_cstring(env->emit, "%hi($");
+ be_emit_ident(env->emit, get_entity_ld_ident(attr->entity));
+ if(attr->val != 0) {
+ be_emit_irprintf(env->emit, "%+d", attr->val);
+ }
+ be_emit_char(env->emit, ')');
+ break;
+ default:
+ panic("invalid immediate type found");
+ }
+}