Author: zoltan
Date: 2008-02-06 16:31:03 -0500 (Wed, 06 Feb 2008)
New Revision: 95078
Modified:
trunk/mono/mono/mini/ChangeLog
trunk/mono/mono/mini/aliasing.c
trunk/mono/mono/mini/graph.c
trunk/mono/mono/mini/inssel.brg
trunk/mono/mono/mini/local-propagation.c
trunk/mono/mono/mini/mini-alpha.c
trunk/mono/mono/mini/mini-amd64.c
trunk/mono/mono/mini/mini-arm.c
trunk/mono/mono/mini/mini-hppa.c
trunk/mono/mono/mini/mini-ia64.c
trunk/mono/mono/mini/mini-mips.c
trunk/mono/mono/mini/mini-ops.h
trunk/mono/mono/mini/mini-ppc.c
trunk/mono/mono/mini/mini-s390.c
trunk/mono/mono/mini/mini-s390x.c
trunk/mono/mono/mini/mini-sparc.c
trunk/mono/mono/mini/mini-x86.c
trunk/mono/mono/mini/mini.c
trunk/mono/mono/mini/ssa.c
Log:
2008-02-06 Zoltan Varga <[EMAIL PROTECTED]>
* mini-ops.h: Add new opcodes OP_CALL/OP_CALLVIRT.
* *.c: Use the new opcodes in the IR and back end code.
Modified: trunk/mono/mono/mini/ChangeLog
===================================================================
--- trunk/mono/mono/mini/ChangeLog 2008-02-06 21:16:03 UTC (rev 95077)
+++ trunk/mono/mono/mini/ChangeLog 2008-02-06 21:31:03 UTC (rev 95078)
@@ -1,5 +1,9 @@
2008-02-06 Zoltan Varga <[EMAIL PROTECTED]>
+ * mini-ops.h: Add new opcodes OP_CALL/OP_CALLVIRT.
+
+ * *.c: Use the new opcodes in the IR and back end code.
+
* mini-ops.h cpu-<ARCH>.md: Correct the name of the bgt_un opcodes.
* mini-amd64.c (emit_call_body): Use a far-call for calling dynamic
methods.
Modified: trunk/mono/mono/mini/aliasing.c
===================================================================
--- trunk/mono/mono/mini/aliasing.c 2008-02-06 21:16:03 UTC (rev 95077)
+++ trunk/mono/mono/mini/aliasing.c 2008-02-06 21:31:03 UTC (rev 95078)
@@ -48,7 +48,7 @@
#define OP_IS_OUTARG(op)
(((op)==OP_OUTARG)||((op)==OP_OUTARG_REG)||((op)==OP_OUTARG_IMM)||((op)==OP_OUTARG_R4)||((op)==OP_OUTARG_R8)||((op)==OP_OUTARG_VT))
-#define OP_IS_CALL(op)
(((op)==CEE_CALLI)||((op)==CEE_CALL)||((op)==CEE_CALLVIRT)||(((op)>=OP_VOIDCALL)&&((op)<=OP_CALL_MEMBASE)))
+#define OP_IS_CALL(op)
(((op)==CEE_CALLI)||((op)==OP_CALL)||((op)==OP_CALLVIRT)||(((op)>=OP_VOIDCALL)&&((op)<=OP_CALL_MEMBASE)))
#define OP_IS_STORE(op)
(((op)==CEE_STIND_REF)||((op)==CEE_STIND_I1)||((op)==CEE_STIND_I2)||((op)==CEE_STIND_I4)||((op)==CEE_STIND_I8)||((op)==CEE_STIND_R4)||((op)==CEE_STIND_R8)||((op)==CEE_STIND_I))
#define OP_IS_LOAD(op)
(((op)==CEE_LDIND_REF)||((op)==CEE_LDIND_I1)||((op)==CEE_LDIND_I2)||((op)==CEE_LDIND_I4)||((op)==CEE_LDIND_U1)||((op)==CEE_LDIND_U2)||((op)==CEE_LDIND_U4)||((op)==CEE_LDIND_I8)||((op)==CEE_LDIND_R4)||((op)==CEE_LDIND_R8)||((op)==CEE_LDIND_I))
#define OP_IS_CONST(op)
(((op)==OP_ICONST)||((op)==OP_I8CONST)||((op)==OP_R4CONST)||((op)==OP_R8CONST)||((op)==OP_AOTCONST))
@@ -158,8 +158,8 @@
case CEE_NEWARR:
printf ("[%s]", tree->inst_newa_class->name);
break;
- case CEE_CALL:
- case CEE_CALLVIRT:
+ case OP_CALL:
+ case OP_CALLVIRT:
case OP_FCALL:
case OP_FCALLVIRT:
case OP_LCALL:
Modified: trunk/mono/mono/mini/graph.c
===================================================================
--- trunk/mono/mono/mini/graph.c 2008-02-06 21:16:03 UTC (rev 95077)
+++ trunk/mono/mono/mini/graph.c 2008-02-06 21:31:03 UTC (rev 95078)
@@ -187,8 +187,8 @@
fprintf (fp, "[%s]", tree->inst_newa_class->name);
mono_print_label (fp, tree->inst_newa_len);
break;
- case CEE_CALL:
- case CEE_CALLVIRT:
+ case OP_CALL:
+ case OP_CALLVIRT:
case OP_FCALL:
case OP_FCALLVIRT:
case OP_LCALL:
Modified: trunk/mono/mono/mini/inssel.brg
===================================================================
--- trunk/mono/mono/mini/inssel.brg 2008-02-06 21:16:03 UTC (rev 95077)
+++ trunk/mono/mono/mini/inssel.brg 2008-02-06 21:31:03 UTC (rev 95078)
@@ -862,13 +862,13 @@
mono_bblock_add_inst (s->cbb, tree);
}
-reg: CEE_CALL {
+reg: OP_CALL {
tree->dreg = state->reg1;
mono_bblock_add_inst (s->cbb, tree);
}
-reg: CEE_CALLVIRT (reg) {
- mini_emit_virtual_call (s, state, tree, CEE_CALL, OP_CALL_MEMBASE);
+reg: OP_CALLVIRT (reg) {
+ mini_emit_virtual_call (s, state, tree, OP_CALL, OP_CALL_MEMBASE);
}
stmt: OP_VOIDCALLVIRT (reg) {
@@ -949,7 +949,7 @@
reg: OP_CALL_REG (OP_ICONST),
reg: OP_CALL_REG (OP_I8CONST) {
- tree->opcode = CEE_CALL;
+ tree->opcode = OP_CALL;
((MonoCallInst*)tree)->fptr = state->left->tree->inst_p0;
tree->dreg = state->reg1;
mono_bblock_add_inst (s->cbb, tree);
Modified: trunk/mono/mono/mini/local-propagation.c
===================================================================
--- trunk/mono/mono/mini/local-propagation.c 2008-02-06 21:16:03 UTC (rev
95077)
+++ trunk/mono/mono/mini/local-propagation.c 2008-02-06 21:31:03 UTC (rev
95078)
@@ -702,9 +702,9 @@
}
break;
- case CEE_CALL:
+ case OP_CALL:
case OP_CALL_REG:
- case CEE_CALLVIRT:
+ case OP_CALLVIRT:
case OP_LCALL_REG:
case OP_LCALLVIRT:
case OP_LCALL:
Modified: trunk/mono/mono/mini/mini-alpha.c
===================================================================
--- trunk/mono/mono/mini/mini-alpha.c 2008-02-06 21:16:03 UTC (rev 95077)
+++ trunk/mono/mono/mini/mini-alpha.c 2008-02-06 21:31:03 UTC (rev 95078)
@@ -3676,7 +3676,7 @@
case OP_LCALL:
case OP_VCALL:
case OP_VOIDCALL:
- case CEE_CALL:
+ case OP_CALL:
CFG_DEBUG(4) g_print("ALPHA_CHECK: [fcall/lcall/vcall/voidcall/call]
Target: [");
call = (MonoCallInst*)ins;
Modified: trunk/mono/mono/mini/mini-amd64.c
===================================================================
--- trunk/mono/mono/mini/mini-amd64.c 2008-02-06 21:16:03 UTC (rev 95077)
+++ trunk/mono/mono/mini/mini-amd64.c 2008-02-06 21:31:03 UTC (rev 95078)
@@ -2339,7 +2339,7 @@
/* Move return value to the target register */
/* FIXME: do this in the local reg allocator */
switch (ins->opcode) {
- case CEE_CALL:
+ case OP_CALL:
case OP_CALL_REG:
case OP_CALL_MEMBASE:
case OP_LCALL:
@@ -3187,7 +3187,7 @@
case OP_LCALL:
case OP_VCALL:
case OP_VOIDCALL:
- case CEE_CALL:
+ case OP_CALL:
call = (MonoCallInst*)ins;
/*
* The AMD64 ABI forces callers to know about varargs.
Modified: trunk/mono/mono/mini/mini-arm.c
===================================================================
--- trunk/mono/mono/mini/mini-arm.c 2008-02-06 21:16:03 UTC (rev 95077)
+++ trunk/mono/mono/mini/mini-arm.c 2008-02-06 21:31:03 UTC (rev 95078)
@@ -2445,7 +2445,7 @@
case OP_LCALL:
case OP_VCALL:
case OP_VOIDCALL:
- case CEE_CALL:
+ case OP_CALL:
call = (MonoCallInst*)ins;
if (ins->flags & MONO_INST_HAS_METHOD)
mono_add_patch_info (cfg, offset,
MONO_PATCH_INFO_METHOD, call->method);
Modified: trunk/mono/mono/mini/mini-hppa.c
===================================================================
--- trunk/mono/mono/mini/mini-hppa.c 2008-02-06 21:16:03 UTC (rev 95077)
+++ trunk/mono/mono/mini/mini-hppa.c 2008-02-06 21:31:03 UTC (rev 95078)
@@ -1565,7 +1565,7 @@
case OP_LCALL:
case OP_VCALL:
case OP_VOIDCALL:
- case CEE_CALL:
+ case OP_CALL:
call = (MonoCallInst*)ins;
if (ins->flags & MONO_INST_HAS_METHOD)
mono_add_patch_info (cfg, offset,
MONO_PATCH_INFO_METHOD, call->method);
Modified: trunk/mono/mono/mini/mini-ia64.c
===================================================================
--- trunk/mono/mono/mini/mini-ia64.c 2008-02-06 21:16:03 UTC (rev 95077)
+++ trunk/mono/mono/mini/mini-ia64.c 2008-02-06 21:31:03 UTC (rev 95078)
@@ -1967,7 +1967,7 @@
case OP_VOIDCALL_REG:
case OP_VOIDCALL_MEMBASE:
break;
- case CEE_CALL:
+ case OP_CALL:
case OP_CALL_REG:
case OP_CALL_MEMBASE:
case OP_LCALL:
@@ -2722,7 +2722,7 @@
case OP_LCALL:
case OP_VCALL:
case OP_VOIDCALL:
- case CEE_CALL:
+ case OP_CALL:
call = (MonoCallInst*)ins;
if (ins->flags & MONO_INST_HAS_METHOD)
Modified: trunk/mono/mono/mini/mini-mips.c
===================================================================
--- trunk/mono/mono/mini/mini-mips.c 2008-02-06 21:16:03 UTC (rev 95077)
+++ trunk/mono/mono/mini/mini-mips.c 2008-02-06 21:31:03 UTC (rev 95078)
@@ -2260,7 +2260,7 @@
case OP_LCALL:
case OP_VCALL:
case OP_VOIDCALL:
- case CEE_CALL:
+ case OP_CALL:
case OP_FCALL_REG:
case OP_LCALL_REG:
case OP_VCALL_REG:
@@ -2276,7 +2276,7 @@
case OP_LCALL:
case OP_VCALL:
case OP_VOIDCALL:
- case CEE_CALL:
+ case OP_CALL:
call = (MonoCallInst*)ins;
if (ins->flags & MONO_INST_HAS_METHOD)
mono_add_patch_info (cfg, offset,
MONO_PATCH_INFO_METHOD, call->method);
Modified: trunk/mono/mono/mini/mini-ops.h
===================================================================
--- trunk/mono/mono/mini/mini-ops.h 2008-02-06 21:16:03 UTC (rev 95077)
+++ trunk/mono/mono/mini/mini-ops.h 2008-02-06 21:31:03 UTC (rev 95078)
@@ -47,6 +47,8 @@
MINI_OP(OP_VCALLVIRT, "vcallvirt")
MINI_OP(OP_VCALL_REG, "vcall_reg")
MINI_OP(OP_VCALL_MEMBASE, "vcall_membase")
+MINI_OP(OP_CALL, "call")
+MINI_OP(OP_CALLVIRT, "callvirt")
MINI_OP(OP_CALL_REG, "call_reg")
MINI_OP(OP_CALL_MEMBASE, "call_membase")
MINI_OP(OP_TRAP, "trap")
Modified: trunk/mono/mono/mini/mini-ppc.c
===================================================================
--- trunk/mono/mono/mini/mini-ppc.c 2008-02-06 21:16:03 UTC (rev 95077)
+++ trunk/mono/mono/mini/mini-ppc.c 2008-02-06 21:31:03 UTC (rev 95078)
@@ -2611,7 +2611,7 @@
case OP_LCALL:
case OP_VCALL:
case OP_VOIDCALL:
- case CEE_CALL:
+ case OP_CALL:
call = (MonoCallInst*)ins;
if (ins->flags & MONO_INST_HAS_METHOD)
mono_add_patch_info (cfg, offset,
MONO_PATCH_INFO_METHOD, call->method);
Modified: trunk/mono/mono/mini/mini-s390.c
===================================================================
--- trunk/mono/mono/mini/mini-s390.c 2008-02-06 21:16:03 UTC (rev 95077)
+++ trunk/mono/mono/mini/mini-s390.c 2008-02-06 21:31:03 UTC (rev 95078)
@@ -3388,7 +3388,7 @@
case OP_LCALL:
case OP_VCALL:
case OP_VOIDCALL:
- case CEE_CALL: {
+ case OP_CALL: {
call = (MonoCallInst*)ins;
if (ins->flags & MONO_INST_HAS_METHOD)
mono_add_patch_info (cfg, offset,
MONO_PATCH_INFO_METHOD, call->method);
Modified: trunk/mono/mono/mini/mini-s390x.c
===================================================================
--- trunk/mono/mono/mini/mini-s390x.c 2008-02-06 21:16:03 UTC (rev 95077)
+++ trunk/mono/mono/mini/mini-s390x.c 2008-02-06 21:31:03 UTC (rev 95078)
@@ -3543,7 +3543,7 @@
case OP_LCALL:
case OP_VCALL:
case OP_VOIDCALL:
- case CEE_CALL: {
+ case OP_CALL: {
s390_basr (code, s390_r13, 0);
s390_j (code, 6);
call = (MonoCallInst*)ins;
Modified: trunk/mono/mono/mini/mini-sparc.c
===================================================================
--- trunk/mono/mono/mini/mini-sparc.c 2008-02-06 21:16:03 UTC (rev 95077)
+++ trunk/mono/mono/mini/mini-sparc.c 2008-02-06 21:31:03 UTC (rev 95078)
@@ -1947,7 +1947,7 @@
case OP_VOIDCALL_REG:
case OP_VOIDCALL_MEMBASE:
break;
- case CEE_CALL:
+ case OP_CALL:
case OP_CALL_REG:
case OP_CALL_MEMBASE:
g_assert (ins->dreg == sparc_o0);
@@ -2862,7 +2862,7 @@
case OP_LCALL:
case OP_VCALL:
case OP_VOIDCALL:
- case CEE_CALL:
+ case OP_CALL:
call = (MonoCallInst*)ins;
g_assert (!call->virtual);
code = emit_save_sp_to_lmf (cfg, code);
Modified: trunk/mono/mono/mini/mini-x86.c
===================================================================
--- trunk/mono/mono/mini/mini-x86.c 2008-02-06 21:16:03 UTC (rev 95077)
+++ trunk/mono/mono/mini/mini-x86.c 2008-02-06 21:31:03 UTC (rev 95078)
@@ -1946,7 +1946,7 @@
/* Move return value to the target register */
switch (ins->opcode) {
- case CEE_CALL:
+ case OP_CALL:
case OP_CALL_REG:
case OP_CALL_MEMBASE:
if (ins->dreg != X86_EAX)
@@ -2661,7 +2661,7 @@
case OP_LCALL:
case OP_VCALL:
case OP_VOIDCALL:
- case CEE_CALL:
+ case OP_CALL:
call = (MonoCallInst*)ins;
if (ins->flags & MONO_INST_HAS_METHOD)
code = emit_call (cfg, code,
MONO_PATCH_INFO_METHOD, call->method);
Modified: trunk/mono/mono/mini/mini.c
===================================================================
--- trunk/mono/mono/mini/mini.c 2008-02-06 21:16:03 UTC (rev 95077)
+++ trunk/mono/mono/mini/mini.c 2008-02-06 21:31:03 UTC (rev 95078)
@@ -2128,7 +2128,7 @@
ret_type_to_call_opcode (MonoType *type, int calli, int virt,
MonoGenericSharingContext *gsctx)
{
if (type->byref)
- return calli? OP_CALL_REG: virt? CEE_CALLVIRT: CEE_CALL;
+ return calli? OP_CALL_REG: virt? OP_CALLVIRT: OP_CALL;
handle_enum:
type = mini_get_basic_type_from_generic (gsctx, type);
@@ -2143,18 +2143,18 @@
case MONO_TYPE_CHAR:
case MONO_TYPE_I4:
case MONO_TYPE_U4:
- return calli? OP_CALL_REG: virt? CEE_CALLVIRT: CEE_CALL;
+ return calli? OP_CALL_REG: virt? OP_CALLVIRT: OP_CALL;
case MONO_TYPE_I:
case MONO_TYPE_U:
case MONO_TYPE_PTR:
case MONO_TYPE_FNPTR:
- return calli? OP_CALL_REG: virt? CEE_CALLVIRT: CEE_CALL;
+ return calli? OP_CALL_REG: virt? OP_CALLVIRT: OP_CALL;
case MONO_TYPE_CLASS:
case MONO_TYPE_STRING:
case MONO_TYPE_OBJECT:
case MONO_TYPE_SZARRAY:
case MONO_TYPE_ARRAY:
- return calli? OP_CALL_REG: virt? CEE_CALLVIRT: CEE_CALL;
+ return calli? OP_CALL_REG: virt? OP_CALLVIRT: OP_CALL;
case MONO_TYPE_I8:
case MONO_TYPE_U8:
return calli? OP_LCALL_REG: virt? OP_LCALLVIRT: OP_LCALL;
@@ -2472,7 +2472,7 @@
if (!MONO_TYPE_IS_VOID (ret) || ret_object) {
if (ret_object) {
call->inst.type = STACK_OBJ;
- call->inst.opcode = CEE_CALL;
+ call->inst.opcode = OP_CALL;
temp = mono_compile_create_var (cfg,
&mono_defaults.string_class->byval_arg, OP_LOCAL);
} else {
type_to_eval_stack_type (cfg, ret, ins);
@@ -8448,7 +8448,7 @@
if (! (get_domain = mono_arch_get_domain_intrinsic (cfg))) {
MonoCallInst *call;
- MONO_INST_NEW_CALL (cfg, call, CEE_CALL);
+ MONO_INST_NEW_CALL (cfg, call, OP_CALL);
call->signature = helper_sig_domain_get;
call->inst.type = STACK_PTR;
call->fptr = mono_domain_get;
@@ -8613,8 +8613,8 @@
printf ("[%s]", tree->inst_newa_class->name);
mono_print_tree (tree->inst_newa_len);
break;
- case CEE_CALL:
- case CEE_CALLVIRT:
+ case OP_CALL:
+ case OP_CALLVIRT:
case OP_FCALL:
case OP_FCALLVIRT:
case OP_LCALL:
Modified: trunk/mono/mono/mini/ssa.c
===================================================================
--- trunk/mono/mono/mini/ssa.c 2008-02-06 21:16:03 UTC (rev 95077)
+++ trunk/mono/mono/mini/ssa.c 2008-02-06 21:31:03 UTC (rev 95078)
@@ -571,7 +571,7 @@
}
-#define IS_CALL(op) (op == CEE_CALLI || op == CEE_CALL || op == CEE_CALLVIRT
|| (op >= OP_VOIDCALL && op <= OP_CALL_MEMBASE))
+#define IS_CALL(op) (op == CEE_CALLI || op == OP_CALL || op == OP_CALLVIRT ||
(op >= OP_VOIDCALL && op <= OP_CALL_MEMBASE))
typedef struct {
MonoBasicBlock *bb;
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches