+Call = dict(
+ ins = [ "mem", "ptr" ],
+ arity = "variable",
+ outs = [ "M_regular", "X_regular", "X_except", "T_result", "M_except", "P_value_res_base" ],
+ flags = "fragile, uses_memory",
+ attrs = [
+ dict(
+ type = "ir_type*",
+ name = "type"
+ )
+ ],
+ attr_struct = "call_attr",
+ pinned = "memory",
+ pinned_init = "op_pin_state_pinned",
+ init = '''
+ assert((get_unknown_type() == type) || is_Method_type(type));
+ ''',
+ d_post = '''
+ #if PRECISE_EXC_CONTEXT
+ firm_alloc_frag_arr(res, op_Call, &res->attr.call.exc.frag_arr);
+ #endif
+ '''
+),
+
+CallBegin = dict(
+ ins = [ "ptr" ],
+ outs = [ "" ], # TODO
+ flags = "cfopcode, ip_cfopcode",
+ pinned = "yes",
+ # TODO: attribute with call...
+ attr_struct = "callbegin_attr",
+ java_noconstr = True,
+ init = '''
+ res->attr.callbegin.call = call;
+ ''',