Author: zoltan
Date: 2008-02-07 17:14:41 -0500 (Thu, 07 Feb 2008)
New Revision: 95196
Modified:
trunk/mono/mono/mini/ChangeLog
trunk/mono/mono/mini/cpu-s390.md
trunk/mono/mono/mini/mini-s390.c
trunk/mono/mono/mini/mini-s390.h
Log:
2008-02-07 Zoltan Varga <[EMAIL PROTECTED]>
* mini-s390.c mini-s390.h cpu-s390.md: Get rid of CEE_ opcodes.
* mini.c (mono_normalize_opcodes): Add some more opcodes.
* mini-arm.c mini-arm.h cpu-arm.md: Get rid of CEE_ opcodes.
Modified: trunk/mono/mono/mini/ChangeLog
===================================================================
--- trunk/mono/mono/mini/ChangeLog 2008-02-07 22:08:48 UTC (rev 95195)
+++ trunk/mono/mono/mini/ChangeLog 2008-02-07 22:14:41 UTC (rev 95196)
@@ -1,5 +1,11 @@
2008-02-07 Zoltan Varga <[EMAIL PROTECTED]>
+ * mini-s390.c mini-s390.h cpu-s390.md: Get rid of CEE_ opcodes.
+
+ * mini.c (mono_normalize_opcodes): Add some more opcodes.
+
+ * mini-arm.c mini-arm.h cpu-arm.md: Get rid of CEE_ opcodes.
+
* cpu-amd64.md: Remove some unused opcodes.
* mini-sparc.c mini-sparc.h cpu-sparc.md: Get rid of CEE_ opcodes.
Modified: trunk/mono/mono/mini/cpu-s390.md
===================================================================
--- trunk/mono/mono/mini/cpu-s390.md 2008-02-07 22:08:48 UTC (rev 95195)
+++ trunk/mono/mono/mini/cpu-s390.md 2008-02-07 22:14:41 UTC (rev 95196)
@@ -46,32 +46,16 @@
# See the code in mini-x86.c for more details on how the specifiers are used.
#
+nop: len:4
+
adc: dest:i src1:i src2:i len:6
-adc_imm: dest:i src1:i len:18
-add.ovf.un: len: 10 dest:i src1:i src2:i
-add.ovf: len: 24 dest:i src1:i src2:i
-add: dest:i src1:i src2:i len:6
-add_imm: dest:i src1:i len:18
-addcc_imm: dest:i src1:i len:18
add_ovf_carry: dest:i src1:1 src2:i len:28
add_ovf_un_carry: dest:i src1:1 src2:i len:28
addcc: dest:i src1:i src2:i len:6
-and: dest:i src1:i src2:i len:6
-and_imm: dest:i src1:i len:16
aot_const: dest:i len:8
atomic_add_i4: src1:b src2:i dest:i len:20
atomic_exchange_i4: src1:b src2:i dest:i len:20
atomic_add_new_i4: src1:b src2:i dest:i len:24
-beq: len:8
-bge.un: len:8
-bge: len:8
-bgt.un: len:8
-bgt: len:8
-ble.un: len:8
-ble: len:8
-blt.un: len:8
-blt: len:8
-bne.un: len:8
br: len:6
br_reg: src1:i len:8
break: len:6
@@ -102,21 +86,6 @@
cond_exc_ne_un: len:8
cond_exc_no: len:8
cond_exc_ov: len:8
-conv.i1: dest:i src1:i len:26
-conv.i2: dest:i src1:i len:26
-conv.i4: dest:i src1:i len:2
-conv.i: dest:i src1:i len:2
-conv.r.un: dest:f src1:i len:30
-conv.r4: dest:f src1:i len:4
-conv.r8: dest:f src1:i len:4
-conv.u1: dest:i src1:i len:8
-conv.u2: dest:i src1:i len:16
-conv.u4: dest:i src1:i
-conv.u: dest:i src1:i len:4
-div.un: dest:a src1:i src2:i len:12
-div: dest:a src1:i src2:i len:10
-div_imm: dest:i src1:i src2:i len:24
-div_un_imm: dest:i src1:i src2:i len:24
endfinally: len: 20
fcall: dest:g len:10 clob:c
fcall_membase: dest:g src1:b len:14 clob:c
@@ -188,42 +157,22 @@
long_sub_ovf: len:36 dest:l src1:l src2:i clob:1
memory_barrier: len: 10
move: dest:i src1:i len:4
-mul.ovf.un: dest:i src1:i src2:i len:20
-mul.ovf: dest:i src1:i src2:i len:42
-mul: dest:i src1:i src2:i len:6
-mul_imm: dest:i src1:i len:20
-neg: dest:i src1:i len:4
-nop: len:4
-not: dest:i src1:i len:8
bigmul: len:2 dest:l src1:a src2:i
bigmul_un: len:2 dest:l src1:a src2:i
endfilter: src1:i len:12
rethrow: src1:i len:8
oparglist: src1:i len:20
-or: dest:i src1:i src2:i len:4
-or_imm: dest:i src1:i len:16
outarg: src1:i len:1
outarg_imm: len:5
r4const: dest:f len:22
r8const: dest:f len:18
-rem.un: dest:d src1:i src2:i len:12
-rem: dest:d src1:i src2:i len:10
-rem_imm: dest:i src1:i src2:i len:24
-rem_un_imm: dest:i src1:i src2:i len:24
s390_bkchain: len:16 dest:i src1:i
s390_move: len:48 dest:b src1:b
s390_setf4ret: dest:f src1:f len:4
tls_get: dest:i len:44
sbb: dest:i src1:i src2:i len:8
-sbb_imm: dest:i src1:i len:18
setlret: src1:i src2:i len:12
setret: dest:a src1:i len:6
-shl: dest:i src1:i src2:i clob:s len:8
-shl_imm: dest:i src1:i len:8
-shr.un: dest:i src1:i src2:i clob:s len:8
-shr: dest:i src1:i src2:i clob:s len:8
-shr_imm: dest:i src1:i len:8
-shr_un_imm: dest:i src1:i len:8
sqrt: dest:f src1:f len:4
start_handler: len:18
store_membase_imm: dest:b len:32
@@ -238,11 +187,6 @@
storei8_membase_reg: dest:b src1:i
storer4_membase_reg: dest:b src1:f len:22
storer8_membase_reg: dest:b src1:f len:22
-sub.ovf.un: len:10 dest:i src1:i src2:i
-sub.ovf: len:24 dest:i src1:i src2:i
-sub: dest:i src1:i src2:i len:6
-sub_imm: dest:i src1:i len:18
-subcc_imm: dest:i src1:i len:18
sub_ovf_carry: dest:i src1:1 src2:i len:28
sub_ovf_un_carry: dest:i src1:1 src2:i len:28
subcc: dest:i src1:i src2:i len:6
@@ -253,5 +197,68 @@
voidcall: len:8 clob:c
voidcall_membase: src1:b len:12 clob:c
voidcall_reg: src1:i len:8 clob:c
-xor: dest:i src1:i src2:i len:4
+
+# 32 bit opcodes
+int_add: dest:i src1:i src2:i len:6
+int_sub: dest:i src1:i src2:i len:6
+int_mul: dest:i src1:i src2:i len:6
+int_div: dest:a src1:i src2:i len:10
+int_div_un: dest:a src1:i src2:i len:12
+int_and: dest:i src1:i src2:i len:6
+int_or: dest:i src1:i src2:i len:4
+int_xor: dest:i src1:i src2:i len:4
+int_rem: dest:d src1:i src2:i len:10
+int_rem_un: dest:d src1:i src2:i len:12
+int_shl: dest:i src1:i src2:i clob:s len:8
+int_shr: dest:i src1:i src2:i clob:s len:8
+int_shr_un: dest:i src1:i src2:i clob:s len:8
+int_add_ovf: len: 24 dest:i src1:i src2:i
+int_add_ovf_un: len: 10 dest:i src1:i src2:i
+int_sub_ovf: len:24 dest:i src1:i src2:i
+int_sub_ovf_un: len:10 dest:i src1:i src2:i
+int_mul_ovf: dest:i src1:i src2:i len:42
+int_mul_ovf_un: dest:i src1:i src2:i len:20
+
+int_neg: dest:i src1:i len:4
+int_not: dest:i src1:i len:8
+int_conv_to_i1: dest:i src1:i len:26
+int_conv_to_i2: dest:i src1:i len:26
+int_conv_to_i4: dest:i src1:i len:2
+int_conv_to_i: dest:i src1:i len:2
+int_conv_to_r4: dest:f src1:i len:4
+int_conv_to_r8: dest:f src1:i len:4
+int_conv_to_u1: dest:i src1:i len:8
+int_conv_to_u2: dest:i src1:i len:16
+int_conv_to_u4: dest:i src1:i
+
+conv.r.un: dest:f src1:i len:30
+conv.u: dest:i src1:i len:4
+
+int_beq: len:8
+int_bge_un: len:8
+int_bge: len:8
+int_bgt_un: len:8
+int_bgt: len:8
+int_ble_un: len:8
+int_ble: len:8
+int_blt_un: len:8
+int_blt: len:8
+int_bne_un: len:8
+
+mul_imm: dest:i src1:i len:20
+adc_imm: dest:i src1:i len:18
+add_imm: dest:i src1:i len:18
+addcc_imm: dest:i src1:i len:18
+and_imm: dest:i src1:i len:16
+div_imm: dest:i src1:i src2:i len:24
+div_un_imm: dest:i src1:i src2:i len:24
+or_imm: dest:i src1:i len:16
+rem_imm: dest:i src1:i src2:i len:24
+rem_un_imm: dest:i src1:i src2:i len:24
+sbb_imm: dest:i src1:i len:18
+shl_imm: dest:i src1:i len:8
+shr_imm: dest:i src1:i len:8
+shr_un_imm: dest:i src1:i len:8
+sub_imm: dest:i src1:i len:18
+subcc_imm: dest:i src1:i len:18
xor_imm: dest:i src1:i len:16
Modified: trunk/mono/mono/mini/mini-s390.c
===================================================================
--- trunk/mono/mono/mini/mini-s390.c 2008-02-07 22:08:48 UTC (rev 95195)
+++ trunk/mono/mono/mini/mini-s390.c 2008-02-07 22:14:41 UTC (rev 95196)
@@ -2282,7 +2282,7 @@
if (last_ins && (last_ins->opcode ==
OP_STOREI1_MEMBASE_REG) &&
ins->inst_basereg ==
last_ins->inst_destbasereg &&
ins->inst_offset ==
last_ins->inst_offset) {
- ins->opcode = (ins->opcode ==
OP_LOADI1_MEMBASE) ? CEE_CONV_I1 : CEE_CONV_U1;
+ ins->opcode = (ins->opcode ==
OP_LOADI1_MEMBASE) ? OP_ICONV_TO_I1 : OP_ICONV_TO_U1;
ins->sreg1 = last_ins->sreg1;
}
break;
@@ -2291,12 +2291,10 @@
if (last_ins && (last_ins->opcode ==
OP_STOREI2_MEMBASE_REG) &&
ins->inst_basereg ==
last_ins->inst_destbasereg &&
ins->inst_offset ==
last_ins->inst_offset) {
- ins->opcode = (ins->opcode ==
OP_LOADI2_MEMBASE) ? CEE_CONV_I2 : CEE_CONV_U2;
+ ins->opcode = (ins->opcode ==
OP_LOADI2_MEMBASE) ? OP_ICONV_TO_I2 : OP_ICONV_TO_U2;
ins->sreg1 = last_ins->sreg1;
}
break;
- case CEE_CONV_I4:
- case CEE_CONV_U4:
case OP_MOVE:
/*
* OP_MOVE reg, reg
@@ -2605,7 +2603,7 @@
s390_lr (code, ins->dreg, s390_r0);
}
break;
- case CEE_CONV_I1: {
+ case OP_ICONV_TO_I1: {
s390_lhi (code, s390_r0, 0x80);
if (ins->dreg != ins->sreg1) {
s390_lr (code, ins->dreg, ins->sreg1);
@@ -2617,7 +2615,7 @@
s390_or (code, ins->dreg, s390_r13);
}
break;
- case CEE_CONV_I2: {
+ case OP_ICONV_TO_I2: {
s390_lhi (code, s390_r0, 0x80);
s390_sll (code, s390_r0, 0, 8);
if (ins->dreg != ins->sreg1) {
@@ -2630,7 +2628,7 @@
s390_or (code, ins->dreg, s390_r13);
}
break;
- case CEE_CONV_U1: {
+ case OP_ICONV_TO_U1: {
s390_lhi (code, s390_r0, 0xff);
if (ins->dreg != ins->sreg1) {
s390_lr (code, ins->dreg, ins->sreg1);
@@ -2638,7 +2636,7 @@
s390_nr (code, ins->dreg, s390_r0);
}
break;
- case CEE_CONV_U2: {
+ case OP_ICONV_TO_U2: {
s390_lhi (code, s390_r0, -1);
s390_sll (code, s390_r0, 0, 16);
s390_srl (code, s390_r0, 0, 16);
@@ -2651,8 +2649,8 @@
case OP_COMPARE: {
next = mono_inst_list_next (&ins->node, &bb->ins_list);
if ((next) &&
- (((next->opcode >= CEE_BNE_UN) &&
- (next->opcode <= CEE_BLT_UN)) ||
+ (((next->opcode >= OP_IBNE_UN) &&
+ (next->opcode <= OP_IBLT_UN)) ||
((next->opcode >= OP_COND_EXC_NE_UN) &&
(next->opcode <= OP_COND_EXC_LT_UN)) ||
((next->opcode == OP_CLT_UN) ||
@@ -2667,8 +2665,8 @@
if (s390_is_imm16 (ins->inst_imm)) {
s390_lhi (code, s390_r0, ins->inst_imm);
if ((next) &&
- (((next->opcode >= CEE_BNE_UN) &&
- (next->opcode <= CEE_BLT_UN)) ||
+ (((next->opcode >= OP_IBNE_UN) &&
+ (next->opcode <= OP_IBLT_UN)) ||
((next->opcode >= OP_COND_EXC_NE_UN) &&
(next->opcode <= OP_COND_EXC_LT_UN)) ||
((next->opcode == OP_CLT_UN) ||
@@ -2682,8 +2680,8 @@
s390_j (code, 4);
s390_word (code, ins->inst_imm);
if ((next) &&
- (((next->opcode >= CEE_BNE_UN) &&
- (next->opcode <= CEE_BLT_UN)) ||
+ (((next->opcode >= OP_IBNE_UN) &&
+ (next->opcode <= OP_IBLT_UN)) ||
((next->opcode >= OP_COND_EXC_NE_UN) &&
(next->opcode <= OP_COND_EXC_LT_UN)) ||
((next->opcode == OP_CLT_UN) ||
@@ -2704,7 +2702,7 @@
s390_alr (code, ins->dreg, src2);
}
break;
- case CEE_ADD: {
+ case OP_IADD: {
CHECK_SRCDST_COM;
s390_ar (code, ins->dreg, src2);
}
@@ -2783,13 +2781,13 @@
}
}
break;
- case CEE_ADD_OVF: {
+ case OP_IADD_OVF: {
CHECK_SRCDST_COM;
s390_ar (code, ins->dreg, src2);
EMIT_COND_SYSTEM_EXCEPTION (S390_CC_OV,
"OverflowException");
}
break;
- case CEE_ADD_OVF_UN: {
+ case OP_IADD_OVF_UN: {
CHECK_SRCDST_COM;
s390_alr (code, ins->dreg, src2);
EMIT_COND_SYSTEM_EXCEPTION (S390_CC_CY,
"OverflowException");
@@ -2847,7 +2845,7 @@
s390_slr (code, ins->dreg, src2);
}
break;
- case CEE_SUB: {
+ case OP_ISUB: {
CHECK_SRCDST_NCOM;
s390_sr (code, ins->dreg, src2);
}
@@ -2907,13 +2905,13 @@
}
}
break;
- case CEE_SUB_OVF: {
+ case OP_ISUB_OVF: {
CHECK_SRCDST_NCOM;
s390_sr (code, ins->dreg, src2);
EMIT_COND_SYSTEM_EXCEPTION (S390_CC_OV,
"OverflowException");
}
break;
- case CEE_SUB_OVF_UN: {
+ case OP_ISUB_OVF_UN: {
CHECK_SRCDST_NCOM;
s390_slr (code, ins->dreg, src2);
EMIT_COND_SYSTEM_EXCEPTION (S390_CC_NC,
"OverflowException");
@@ -2968,7 +2966,7 @@
EMIT_COND_SYSTEM_EXCEPTION (S390_CC_NC,
"OverflowException");
}
break;
- case CEE_AND: {
+ case OP_IAND: {
if (ins->sreg1 == ins->dreg) {
s390_nr (code, ins->dreg, ins->sreg2);
}
@@ -3001,14 +2999,14 @@
}
}
break;
- case CEE_DIV: {
+ case OP_IDIV: {
s390_lr (code, s390_r0, ins->sreg1);
s390_srda (code, s390_r0, 0, 32);
s390_dr (code, s390_r0, ins->sreg2);
s390_lr (code, ins->dreg, s390_r1);
}
break;
- case CEE_DIV_UN: {
+ case OP_IDIV_UN: {
s390_lr (code, s390_r0, ins->sreg1);
s390_srdl (code, s390_r0, 0, 32);
s390_dlr (code, s390_r0, ins->sreg2);
@@ -3031,13 +3029,13 @@
s390_lr (code, ins->dreg, s390_r1);
}
break;
- case CEE_REM: {
+ case OP_IREM: {
s390_lr (code, s390_r0, ins->sreg1);
s390_srda (code, s390_r0, 0, 32);
s390_dr (code, s390_r0, ins->sreg2);
s390_lr (code, ins->dreg, s390_r0);
break;
- case CEE_REM_UN:
+ case OP_IREM_UN:
s390_lr (code, s390_r0, ins->sreg1);
s390_srdl (code, s390_r0, 0, 32);
s390_dlr (code, s390_r0, ins->sreg2);
@@ -3060,7 +3058,7 @@
s390_lr (code, ins->dreg, s390_r0);
}
break;
- case CEE_OR: {
+ case OP_IOR: {
if (ins->sreg1 == ins->dreg) {
s390_or (code, ins->dreg, ins->sreg2);
}
@@ -3093,7 +3091,7 @@
}
}
break;
- case CEE_XOR: {
+ case OP_IXOR: {
if (ins->sreg1 == ins->dreg) {
s390_xr (code, ins->dreg, ins->sreg2);
}
@@ -3126,7 +3124,7 @@
}
}
break;
- case CEE_SHL: {
+ case OP_ISHL: {
CHECK_SRCDST_NCOM;
s390_sll (code, ins->dreg, src2, 0);
}
@@ -3138,7 +3136,7 @@
s390_sll (code, ins->dreg, 0, (ins->inst_imm & 0x1f));
}
break;
- case CEE_SHR: {
+ case OP_ISHR: {
CHECK_SRCDST_NCOM;
s390_sra (code, ins->dreg, src2, 0);
}
@@ -3157,12 +3155,12 @@
s390_srl (code, ins->dreg, 0, (ins->inst_imm & 0x1f));
}
break;
- case CEE_SHR_UN: {
+ case OP_ISHR_UN: {
CHECK_SRCDST_NCOM;
s390_srl (code, ins->dreg, src2, 0);
}
break;
- case CEE_NOT: {
+ case OP_INOT: {
if (ins->sreg1 != ins->dreg) {
s390_lr (code, ins->dreg, ins->sreg1);
}
@@ -3170,11 +3168,11 @@
s390_xr (code, ins->dreg, s390_r0);
}
break;
- case CEE_NEG: {
+ case OP_INEG: {
s390_lcr (code, ins->dreg, ins->sreg1);
}
break;
- case CEE_MUL: {
+ case OP_IMUL: {
if (ins->sreg1 == ins->dreg) {
s390_msr (code, ins->dreg, ins->sreg2);
}
@@ -3207,7 +3205,7 @@
s390_msr (code, ins->dreg, s390_r13);
}
break;
- case CEE_MUL_OVF: {
+ case OP_IMUL_OVF: {
short int *o[2];
s390_ltr (code, s390_r1, ins->sreg1);
s390_jz (code, 0); CODEPTR(code, o[0]);
@@ -3226,7 +3224,7 @@
s390_lr (code, ins->dreg, s390_r1);
}
break;
- case CEE_MUL_OVF_UN: {
+ case OP_IMUL_OVF_UN: {
s390_lhi (code, s390_r0, 0);
s390_lr (code, s390_r1, ins->sreg1);
s390_mlr (code, s390_r0, ins->sreg2);
@@ -3270,8 +3268,8 @@
s390_l (code,ins->dreg, 0, s390_r13, 4);
}
break;
- case CEE_CONV_I4:
- case CEE_CONV_U4:
+ case OP_ICONV_TO_I4:
+ case OP_ICONV_TO_U4:
case OP_MOVE: {
if (ins->dreg != ins->sreg1) {
s390_lr (code, ins->dreg, ins->sreg1);
@@ -3612,26 +3610,26 @@
case OP_COND_EXC_NC:
EMIT_COND_SYSTEM_EXCEPTION (S390_CC_NC, ins->inst_p1);
break;
- case CEE_BEQ:
+ case OP_IBEQ:
EMIT_COND_BRANCH (ins, S390_CC_EQ);
break;
- case CEE_BNE_UN:
+ case OP_IBNE_UN:
EMIT_COND_BRANCH (ins, S390_CC_NE);
break;
- case CEE_BLT:
- case CEE_BLT_UN:
+ case OP_IBLT:
+ case OP_IBLT_UN:
EMIT_COND_BRANCH (ins, S390_CC_LT);
break;
- case CEE_BGT:
- case CEE_BGT_UN:
+ case OP_IBGT:
+ case OP_IBGT_UN:
EMIT_COND_BRANCH (ins, S390_CC_GT);
break;
- case CEE_BGE:
- case CEE_BGE_UN:
+ case OP_IBGE:
+ case OP_IBGE_UN:
EMIT_COND_BRANCH (ins, S390_CC_GE);
break;
- case CEE_BLE:
- case CEE_BLE_UN:
+ case OP_IBLE:
+ case OP_IBLE_UN:
EMIT_COND_BRANCH (ins, S390_CC_LE);
break;
@@ -3721,11 +3719,11 @@
s390_adb (code, ins->dreg, 0, s390_r13, 4);
}
break;
- case CEE_CONV_R4: {
+ case OP_ICONV_TO_R4: {
s390_cdfbr (code, ins->dreg, ins->sreg1);
}
break;
- case CEE_CONV_R8: {
+ case OP_ICONV_TO_R8: {
s390_cdfbr (code, ins->dreg, ins->sreg1);
}
break;
Modified: trunk/mono/mono/mini/mini-s390.h
===================================================================
--- trunk/mono/mono/mini/mini-s390.h 2008-02-07 22:08:48 UTC (rev 95195)
+++ trunk/mono/mono/mini/mini-s390.h 2008-02-07 22:14:41 UTC (rev 95196)
@@ -159,6 +159,7 @@
#define MONO_ARCH_NEED_DIV_CHECK 1
#define MONO_ARCH_HAVE_ATOMIC_ADD 1
#define MONO_ARCH_HAVE_ATOMIC_EXCHANGE 1
+#define MONO_ARCH_ENABLE_NORMALIZE_OPCODES 1
// #define MONO_ARCH_SIGSEGV_ON_ALTSTACK 1
// #define MONO_ARCH_SIGNAL_STACK_SIZE 65536
// #define MONO_ARCH_HAVE_THROW_CORLIB_EXCEPTION 1
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches