Hello Zoltan,

Here is another set of patches for mono on alpha:
- fixed implementation of LOCALLOC opcode
- implemented non-un compare for floats
- code cleanup
- implementation of FDIV and CKFINITE opcodes
- fixes for latest mono updates
- additional arch opcodes

Thank you,
Sergey.

Index: mono/mono/mini/inssel-alpha.brg
===================================================================
--- mono/mono/mini/inssel-alpha.brg	(revision 72791)
+++ mono/mono/mini/inssel-alpha.brg	(working copy)
@@ -53,6 +53,10 @@
         /* microcoded in mini-arm.c */
         tree->sreg1 = mono_regstate_next_int (s->rs);
         tree->dreg = state->reg1;
+
+	if (tree->flags & MONO_INST_INIT)
+	    tree->sreg2 = mono_regstate_next_int (s->rs);
+
         MONO_EMIT_NEW_ICONST (s, tree->sreg1, state->left->tree->inst_c0);
         mono_bblock_add_inst (s->cbb, tree);
 }
@@ -60,6 +64,10 @@
 reg: OP_LOCALLOC (reg) {
         tree->dreg = state->reg1;
         tree->sreg1 = state->left->reg1;
+
+        if (tree->flags & MONO_INST_INIT)
+            tree->sreg2 = mono_regstate_next_int (s->rs);
+
         mono_bblock_add_inst (s->cbb, tree);
 }
 
@@ -276,6 +284,11 @@
         MONO_EMIT_UNALU (s, tree, OP_BR_REG, -1, target_reg);
 }
 
+stmt: CEE_STIND_I8 (OP_REGVAR, reg) {
+        MONO_EMIT_NEW_UNALU (s, OP_MOVE, state->left->tree->dreg,
+		state->right->reg1);
+}
+
 reg: CEE_LDIND_I1 (OP_REGVAR) {
         MONO_EMIT_UNALU (s, tree, OP_SEXT_I1, state->reg1,
 	state->left->tree->dreg);
@@ -287,60 +300,21 @@
 }
 
 
-#stmt: CEE_BEQ (fpcflags) {
-#        tree->opcode = OP_FBEQ;
-#        mono_bblock_add_inst (s->cbb, tree);
-#}
-#
-#stmt: CEE_BNE_UN (fpcflags) {
-#        tree->opcode = OP_FBNE_UN;
-#        mono_bblock_add_inst (s->cbb, tree);
-#}
-#
-#stmt: CEE_BLT (fpcflags) {
-#        tree->opcode = OP_FBLT;
-#        mono_bblock_add_inst (s->cbb, tree);
-#}
-#
-#stmt: CEE_BLT_UN (fpcflags) {
-#        tree->opcode = OP_FBLT_UN;
-#        mono_bblock_add_inst (s->cbb, tree);
-#}
-#
-#stmt: CEE_BGT (fpcflags) {
-#        tree->opcode = OP_FBGT;
-#        mono_bblock_add_inst (s->cbb, tree);
-#}
-#
-#stmt: CEE_BGT_UN (fpcflags) {
-#        tree->opcode = OP_FBGT_UN;
-#        mono_bblock_add_inst (s->cbb, tree);
-#}
-#
-#stmt: CEE_BGE  (fpcflags) {
-#        tree->opcode = OP_FBGE;
-#        mono_bblock_add_inst (s->cbb, tree);
-#}
-#
-#stmt: CEE_BGE_UN (fpcflags) {
-#        tree->opcode = OP_FBGE_UN;
-#        mono_bblock_add_inst (s->cbb, tree);
-#}
-#
-#stmt: CEE_BLE  (fpcflags) {
-#        tree->opcode = OP_FBLE;
-#        mono_bblock_add_inst (s->cbb, tree);
-#}
-#
-#stmt: CEE_BLE_UN (fpcflags) {
-#        tree->opcode = OP_FBLE_UN;
-#        mono_bblock_add_inst (s->cbb, tree);
-#}
 
 #stmt: CEE_BEQ (OP_LCOMPARE(reg, OP_I8CONST)) {
 #	printf("Found match for CEE_BEQ (OP_LCOMPARE(reg, OP_I8CONST))\n");
 #}
 
+# Compare floats sequences (comments from Zoltan Varga)
+#
+# non-un comparisions should return false if the arguments are not
+# comparable, ie. 1.0 < nan is false. The un comparisions are needed
+# to implement the opposite of normal comparisions, i.e.
+# (a < b) is bl, while !(a < b) is translated into bge.un. This is 
+# because fp comparirions can return 4 values, not just three: lesser,
+# greater, equal or unordered 
+
+
 stmt: CEE_BLT_UN (OP_COMPARE (freg, freg)) {
         MONO_EMIT_NEW_BIALU (s, OP_ALPHA_CMPT_UN_SU, (alpha_at+1),
                 state->left->left->reg1, state->left->right->reg1);
@@ -351,6 +325,17 @@
 	MONO_EMIT_UNALU (s, tree, OP_FBLT_UN, -1, -1);
 }
 
+stmt: CEE_BLT (OP_COMPARE (freg, freg)) {
+        MONO_EMIT_NEW_BIALU (s, OP_ALPHA_CMPT_UN_SU, (alpha_at+1),
+                state->left->left->reg1, state->left->right->reg1);
+        MONO_EMIT_NEW_BIALU (s, OP_ALPHA_CMPT_LT_SU, alpha_at,
+                state->left->left->reg1, state->left->right->reg1);
+        MONO_EMIT_NEW_UNALU (s, OP_ALPHA_TRAPB, -1, -1);
+
+        MONO_EMIT_UNALU (s, tree, OP_FBLT, -1, -1);
+}
+
+
 stmt: CEE_BLE_UN (OP_COMPARE (freg, freg)) {
 	MONO_EMIT_NEW_BIALU (s, OP_ALPHA_CMPT_UN_SU, (alpha_at+1),
                 state->left->left->reg1, state->left->right->reg1);
@@ -361,6 +346,16 @@
         MONO_EMIT_UNALU (s, tree, OP_FBLE_UN, -1, -1);
 }
 
+stmt: CEE_BLE (OP_COMPARE (freg, freg)) {
+        MONO_EMIT_NEW_BIALU (s, OP_ALPHA_CMPT_UN_SU, (alpha_at+1),
+                state->left->left->reg1, state->left->right->reg1);
+        MONO_EMIT_NEW_BIALU (s, OP_ALPHA_CMPT_LE_SU, alpha_at,
+                state->left->left->reg1, state->left->right->reg1);
+        MONO_EMIT_NEW_UNALU (s, OP_ALPHA_TRAPB, -1, -1);
+
+        MONO_EMIT_UNALU (s, tree, OP_FBLE, -1, -1);
+}
+
 stmt: CEE_BGT_UN (OP_COMPARE (freg, freg)) {
         MONO_EMIT_NEW_BIALU (s, OP_ALPHA_CMPT_UN_SU, (alpha_at+1),
                 state->left->left->reg1, state->left->right->reg1);
@@ -371,6 +366,16 @@
         MONO_EMIT_UNALU (s, tree, OP_FBGT_UN, -1, -1);
 }
 
+stmt: CEE_BGT (OP_COMPARE (freg, freg)) {
+        MONO_EMIT_NEW_BIALU (s, OP_ALPHA_CMPT_UN_SU, (alpha_at+1),
+                state->left->left->reg1, state->left->right->reg1);
+        MONO_EMIT_NEW_BIALU (s, OP_ALPHA_CMPT_LE_SU, alpha_at,
+                state->left->left->reg1, state->left->right->reg1);
+        MONO_EMIT_NEW_UNALU (s, OP_ALPHA_TRAPB, -1, -1);
+
+        MONO_EMIT_UNALU (s, tree, OP_FBGT, -1, -1);
+}
+
 stmt: CEE_BGE_UN (OP_COMPARE (freg, freg)) {
         MONO_EMIT_NEW_BIALU (s, OP_ALPHA_CMPT_UN_SU, (alpha_at+1),
                 state->left->left->reg1, state->left->right->reg1);
@@ -381,6 +386,16 @@
         MONO_EMIT_UNALU (s, tree, OP_FBGE_UN, -1, -1);
 }
 
+stmt: CEE_BGE (OP_COMPARE (freg, freg)) {
+	MONO_EMIT_NEW_BIALU (s, OP_ALPHA_CMPT_UN_SU, (alpha_at+1),
+                state->left->left->reg1, state->left->right->reg1);
+        MONO_EMIT_NEW_BIALU (s, OP_ALPHA_CMPT_LT_SU, alpha_at,
+                state->left->left->reg1, state->left->right->reg1);
+        MONO_EMIT_NEW_UNALU (s, OP_ALPHA_TRAPB, -1, -1);
+
+        MONO_EMIT_UNALU (s, tree, OP_FBGE, -1, -1);
+}
+
 reg: OP_CEQ (OP_COMPARE (freg, freg)) {
         MONO_EMIT_NEW_BIALU (s, OP_ALPHA_CMPT_EQ_SU, alpha_at,
                 state->left->left->reg1, state->left->right->reg1);
Index: mono/mono/mini/cpu-alpha.md
===================================================================
--- mono/mono/mini/cpu-alpha.md	(revision 72791)
+++ mono/mono/mini/cpu-alpha.md	(working copy)
@@ -103,8 +103,8 @@
 conv.i2: dest:i src1:i len:12
 conv.i4: dest:i src1:i len:4
 conv.i8: dest:i src1:i len:4
-conv.r4: dest:f src1:i len:20
-conv.r8: dest:f src1:i len:20
+conv.r4: dest:f src1:i len:24
+conv.r8: dest:f src1:i len:24
 conv.u4: dest:i src1:i len:4
 conv.u8: dest:i src1:i len:4
 conv.r.un: dest:f src1:i len:8
@@ -126,7 +126,7 @@
 cgt.un: dest:c len:8
 clt: dest:c len:8
 clt.un: dest:c len:8
-localloc: dest:i src1:i len:20
+localloc: dest:i src1:i src2:i len:40 clob:1
 compare: src1:i src2:i len:4
 lcompare: src1:i src2:i len:4
 icompare: src1:i src2:i len:4
@@ -247,8 +247,8 @@
 long_shl: dest:i src1:i src2:i len:4
 long_shr: dest:i src1:i src2:i len:4
 long_shr_un: dest:i src1:i src2:i len:4
-long_conv_to_r4: dest:f src1:i len:20
-long_conv_to_r8: dest:f src1:i len:20
+long_conv_to_r4: dest:f src1:i len:24
+long_conv_to_r8: dest:f src1:i len:24
 long_conv_to_ovf_i: dest:i src1:i src2:i len:40
 long_mul_ovf: dest:i src1:i src2:i clob:1 len:16
 long_mul_ovf_un: dest:i src1:i src2:i len:22
@@ -266,11 +266,11 @@
 float_bge_un: len:12
 float_ble: len:4
 float_ble_un: len:12
-float_add: dest:f src1:f src2:f len:4
-float_sub: dest:f src1:f src2:f len:4
+float_add: dest:f src1:f src2:f len:8
+float_sub: dest:f src1:f src2:f len:8
 float_mul: dest:f src1:f src2:f len:5
-float_div: dest:f src1:f src2:f len:5
-float_div_un: dest:f src1:f src2:f len:5
+float_div: dest:f src1:f src2:f len:8
+float_div_un: dest:f src1:f src2:f len:8
 float_rem: dest:f src1:f src2:f len:19
 float_rem_un: dest:f src1:f src2:f len:19
 float_neg: dest:f src1:f len:23
@@ -378,7 +378,7 @@
 int_and: dest:i src1:i src2:i len:4
 int_or: dest:i src1:i src2:i len:4
 int_xor: dest:i src1:i src2:i len:4
-int_shl: dest:i src1:i src2:i len:4
+int_shl: dest:i src1:i src2:i len:8
 int_shr: dest:i src1:i src2:i len:8
 int_shr_un: dest:i src1:i src2:i len:8
 int_adc: dest:i src1:i src2:i clob:1 len:64
@@ -397,7 +397,7 @@
 int_and_imm: dest:i src1:i len:4
 int_or_imm: dest:i src1:i len:4
 int_xor_imm: dest:i src1:i len:4
-int_shl_imm: dest:i src1:i len:4
+int_shl_imm: dest:i src1:i len:8
 int_shr_imm: dest:i src1:i len:8
 int_shr_un_imm: dest:i src1:i len:8
 int_neg: dest:i src1:i len:4
Index: mono/mono/mini/mini-alpha.c
===================================================================
--- mono/mono/mini/mini-alpha.c	(revision 72791)
+++ mono/mono/mini/mini-alpha.c	(working copy)
@@ -199,11 +199,11 @@
                gboolean is_return,
                guint32 *gr, guint32 *fr, guint32 *stack_size)
 {
-  guint32 size, i;
+  guint32 size;
   MonoClass *klass;
   MonoMarshalType *info;
-  gboolean is_hfa = TRUE;
-  guint32 hfa_type = 0;
+  //gboolean is_hfa = TRUE;
+  //guint32 hfa_type = 0;
 
   klass = mono_class_from_mono_type (type);
   if (type->type == MONO_TYPE_TYPEDBYREF)
@@ -1487,7 +1487,7 @@
    /* Save (global) regs */
    offset = cfg->arch.reg_save_area_offset;
 
-   for (i = 0; i < MONO_MAX_VREGS; ++i)
+   for (i = 0; i < MONO_MAX_IREGS; ++i)
      if (ALPHA_IS_CALLEE_SAVED_REG (i) &&
          (cfg->used_int_regs & (1 << i)) &&
          !( ALPHA_ARGS_REGS & (1 << i)) )
@@ -1818,7 +1818,7 @@
   // Restore saved regs
   offset = cfg->arch.reg_save_area_offset;
    
-  for (i = 0; i < MONO_MAX_VREGS; ++i)
+  for (i = 0; i < MONO_MAX_IREGS; ++i)
     if (ALPHA_IS_CALLEE_SAVED_REG (i) &&
 	(cfg->used_int_regs & (1 << i)) &&
 	!( ALPHA_ARGS_REGS & (1 << i)) )
@@ -2300,6 +2300,7 @@
            CFG_DEBUG(4) g_print("ALPHA_CHECK: [int_shl] dreg=%d, sreg1=%d, sreg2=%d\n",
                   ins->dreg, ins->sreg1, ins->sreg2);
            alpha_sll(code, ins->sreg1, ins->sreg2, ins->dreg);
+	   alpha_addl_(code, ins->dreg, 0, ins->dreg);
            break;
 
 	 case OP_ISHL_IMM:
@@ -2308,6 +2309,7 @@
            CFG_DEBUG(4) g_print("ALPHA_CHECK: [int_shl_imm] dreg=%d, sreg1=%d, const=%ld\n",
                   ins->dreg, ins->sreg1, ins->inst_imm);
            alpha_sll_(code, ins->sreg1, ins->inst_imm, ins->dreg);
+	   alpha_addl_(code, ins->dreg, 0, ins->dreg);
            break;
 
 	 case OP_SHL_IMM:
@@ -2999,14 +3001,16 @@
 	   // Later check different rounding and exc modes
 	   CFG_DEBUG(4) g_print("ALPHA_CHECK: [float_add] sreg1=%d, sreg2=%d, dreg=%d\n",
 		  ins->sreg1, ins->sreg2, ins->dreg);
-	   alpha_addt(code, ins->sreg1, ins->sreg2, ins->dreg);
+	   alpha_addt_su(code, ins->sreg1, ins->sreg2, ins->dreg);
+	   alpha_trapb(code);
 	   break;
 
 	 case OP_FSUB:
 	   // Later check different rounding and exc modes
 	   CFG_DEBUG(4) g_print("ALPHA_CHECK: [float_sub] sreg1=%d, sreg2=%d, dreg=%d\n",
 				 ins->sreg1, ins->sreg2, ins->dreg);
-	   alpha_subt(code, ins->sreg1, ins->sreg2, ins->dreg);
+	   alpha_subt_su(code, ins->sreg1, ins->sreg2, ins->dreg);
+	   alpha_trapb(code);
            break;
 
 	 case OP_FMUL:
@@ -3144,7 +3148,7 @@
            break;
 
          case OP_ALPHA_CMP_IMM_ULE:
-           CFG_DEBUG(4) g_print("ALPHA_CHECK: [alpha_cmp_imm_ule] sreg1=%d, const=%0lX, dreg=%\d\n",
+           CFG_DEBUG(4) g_print("ALPHA_CHECK: [alpha_cmp_imm_ule] sreg1=%d, const=%0lX, dreg=%d\n",
                   ins->sreg1, ins->inst_imm, ins->dreg);
            alpha_cmpule_(code, ins->sreg1, ins->inst_imm, alpha_at);
            break;
@@ -3175,7 +3179,7 @@
 
 
          case OP_ALPHA_CMP_IMM_LE:
-           CFG_DEBUG(4) g_print("ALPHA_CHECK: [alpha_cmp_imm_le] sreg1=%d, const=%0lX, dreg=%\d\n",
+           CFG_DEBUG(4) g_print("ALPHA_CHECK: [alpha_cmp_imm_le] sreg1=%d, const=%0lX, dreg=%d\n",
                   ins->sreg1, ins->inst_imm, ins->dreg);
            alpha_cmple_(code, ins->sreg1, ins->inst_imm, alpha_at);
            break;
@@ -3421,6 +3425,7 @@
 	   alpha_ldt(code, ins->dreg, alpha_sp, 0);
 	   alpha_lda(code, alpha_sp, alpha_sp, 8);
 	   alpha_cvtqs(code, ins->dreg, ins->dreg);
+	   alpha_trapb(code);
 	   break;
 
          case CEE_CONV_R8:
@@ -3433,13 +3438,15 @@
            alpha_ldt(code, ins->dreg, alpha_sp, 0);
            alpha_lda(code, alpha_sp, alpha_sp, 8);
            alpha_cvtqt(code, ins->dreg, ins->dreg);
+	   alpha_trapb(code);
            break;
 
 	 case OP_FCONV_TO_R4:
 	   // Convert 64 bit float to 32 bit float (T -> S)
 	   CFG_DEBUG(4) g_print("ALPHA_CHECK: [fconv_r4] sreg=%d, dreg=%d\n",
 				 ins->sreg1, ins->dreg);
-	   alpha_cvtts(code, ins->sreg1, ins->dreg);
+	   alpha_cvtts_su(code, ins->sreg1, ins->dreg);
+	   alpha_trapb(code);
 	   break;
 
 	 case OP_LOCALLOC:
@@ -3448,11 +3455,33 @@
 	   // top of stack is used for call params
 	   CFG_DEBUG(4) g_print("ALPHA_CHECK: [localloc] sreg=%d, dreg=%d\n",
 				ins->sreg1, ins->dreg);
+
 	   alpha_addq_(code, ins->sreg1, (MONO_ARCH_LOCALLOC_ALIGNMENT - 1), ins->sreg1);
-	   alpha_and_(code, ins->sreg1, ~(MONO_ARCH_LOCALLOC_ALIGNMENT - 1), ins->sreg1);
+	   alpha_bic_(code, ins->sreg1, (MONO_ARCH_LOCALLOC_ALIGNMENT - 1), ins->sreg1);
+	   if (ins->flags & MONO_INST_INIT)
+	       alpha_mov1(code, ins->sreg1, ins->sreg2);
+
 	   alpha_subq(code, alpha_sp, ins->sreg1, alpha_sp);
-	   alpha_lda(code, ins->dreg, alpha_zero, (cfg->arch.params_stack_size));
-	   alpha_addq(code, alpha_sp, ins->dreg, ins->dreg);
+	   if (cfg->arch.params_stack_size > 0)
+	   {
+	       alpha_lda(code, ins->dreg, alpha_zero,
+			(cfg->arch.params_stack_size));
+	       alpha_addq(code, alpha_sp, ins->dreg, ins->dreg);
+	   }
+	   else
+	       alpha_mov1(code, alpha_sp, ins->dreg);
+
+	   if (ins->flags & MONO_INST_INIT)
+	   {
+		// TODO: Optimize it later
+		alpha_lda(code, ins->sreg2, ins->sreg2,
+			-(MONO_ARCH_LOCALLOC_ALIGNMENT));
+		alpha_blt(code, ins->sreg2, 3);
+		alpha_addq(code, ins->sreg2, ins->dreg, alpha_at);
+		alpha_stq(code, alpha_zero, alpha_at, 0);
+		alpha_br(code, alpha_zero, -5);
+	   }
+
 	   break;
 
 	 case OP_MOVE:
@@ -3564,6 +3593,12 @@
            EMIT_ALPHA_BRANCH(ins, alpha_at, fbeq);
            break;
 
+	 case OP_FBGE:
+	   CFG_DEBUG(4) g_print("ALPHA_CHECK: [fbge] [");
+	   alpha_fbne(code, (alpha_at+1), 1);
+	   EMIT_ALPHA_BRANCH(ins, alpha_at, fbeq);
+           break;
+
          case OP_FBLE_UN:
            CFG_DEBUG(4) g_print("ALPHA_CHECK: [fble_un] [");
            alpha_fbeq(code, (alpha_at+1), 1);
@@ -3571,6 +3606,12 @@
            EMIT_ALPHA_BRANCH(ins, alpha_at, fbne);
            break;
 
+         case OP_FBLE:
+           CFG_DEBUG(4) g_print("ALPHA_CHECK: [fble] [");
+           alpha_fbne(code, (alpha_at+1), 1);
+           EMIT_ALPHA_BRANCH(ins, alpha_at, fbne);
+           break;
+
          case OP_FBLT_UN:
            CFG_DEBUG(4) g_print("ALPHA_CHECK: [fblt_un] [");
            alpha_fbeq(code, (alpha_at+1), 1);
@@ -3578,6 +3619,12 @@
            EMIT_ALPHA_BRANCH(ins, alpha_at, fbne);
            break;
 
+         case OP_FBLT:
+           CFG_DEBUG(4) g_print("ALPHA_CHECK: [fblt] [");
+           alpha_fbne(code, (alpha_at+1), 1);
+           EMIT_ALPHA_BRANCH(ins, alpha_at, fbne);
+           break;
+
          case OP_FBGT_UN:
            CFG_DEBUG(4) g_print("ALPHA_CHECK: [fbgt_un] [");
            alpha_fbeq(code, (alpha_at+1), 1);
@@ -3585,6 +3632,12 @@
            EMIT_ALPHA_BRANCH(ins, alpha_at, fbeq);
            break;
 
+         case OP_FBGT:
+           CFG_DEBUG(4) g_print("ALPHA_CHECK: [fbgt] [");
+           alpha_fbne(code, (alpha_at+1), 1);
+           EMIT_ALPHA_BRANCH(ins, alpha_at, fbeq);
+           break;
+
 	 case OP_IBEQ:
 	   CFG_DEBUG(4) g_print("ALPHA_CHECK: [ibeq] [");
 	   EMIT_ALPHA_BRANCH(ins, alpha_at, beq);
@@ -3889,7 +3942,22 @@
 	   CFG_DEBUG(4) g_print("ALPHA_CHECK: [mb]\n");
 	   alpha_mb(code);
 	   break;
-	   
+	  
+	 case CEE_CKFINITE:
+	   // Float register contains a value which we need to check
+	   CFG_DEBUG(4) g_print("ALPHA_TODO: [chfinite] sreg1=%d\n", ins->sreg1);
+ 	   alpha_cmptun_su(code, ins->sreg1, ins->sreg1, alpha_at);
+	   alpha_trapb(code);
+	   EMIT_COND_EXC_BRANCH(fbeq, alpha_at, "ArithmeticException");
+
+	   break;
+	 case OP_FDIV:
+	   CFG_DEBUG(4) g_print("ALPHA_TODO: [fdiv] dest=%d, sreg1=%d, sreg2=%d\n",
+		ins->dreg, ins->sreg1, ins->sreg2);
+	   alpha_divt_su(code, ins->sreg1, ins->sreg2, ins->dreg);
+	   alpha_trapb(code);
+
+	   break;
 	 default:
 	   g_warning ("unknown opcode %s in %s()\n",
 		      mono_inst_name (ins->opcode), __FUNCTION__);
@@ -4763,7 +4831,7 @@
 	 if ((i >= sig->hasthis) &&
 	     (MONO_TYPE_ISSTRUCT(arg_type)))
 	   {
-	     gint align;
+	     guint align;
 	     guint32 size;
 	     
 	     if (arg_type->type == MONO_TYPE_TYPEDBYREF) {
@@ -5038,42 +5106,6 @@
 
 /*========================= End of Function ========================*/
 
-static gboolean
-is_regsize_var (MonoType *t)
-{
-  if (t->byref)
-    return TRUE;
-
-  t = mono_type_get_underlying_type (t);
-  switch (t->type) {
-  case MONO_TYPE_I1:
-  case MONO_TYPE_U1:
-  case MONO_TYPE_I2:
-  case MONO_TYPE_U2:
-  case MONO_TYPE_I4:
-  case MONO_TYPE_U4:
-  case MONO_TYPE_I:
-  case MONO_TYPE_U:
-  case MONO_TYPE_PTR:
-  case MONO_TYPE_FNPTR:
-  case MONO_TYPE_BOOLEAN:
-    return TRUE;
-  case MONO_TYPE_OBJECT:
-  case MONO_TYPE_STRING:
-  case MONO_TYPE_CLASS:
-  case MONO_TYPE_SZARRAY:
-  case MONO_TYPE_ARRAY:
-    return TRUE;
-  case MONO_TYPE_VALUETYPE:
-    return FALSE;
-  }
-
-  return FALSE;
-}
-
-
-
-
 /*------------------------------------------------------------------*/
 /*                                                                  */
 /* Name         - mono_arch_get_allocatable_int_vars                */
@@ -5130,7 +5162,7 @@
 	   (ins->opcode != OP_LOCAL && ins->opcode != OP_ARG))
 	 continue;
 
-       if (is_regsize_var (ins->inst_vtype))
+       if (mono_is_regsize_var (ins->inst_vtype))
 	 {
 	   g_assert (MONO_VARINFO (cfg, i)->reg == -1);
 	   g_assert (i == vmv->idx);
@@ -5672,7 +5704,7 @@
    CFG_DEBUG(3) g_print ("ALPHA: reg_save_area_offset at %d(%x)\n", offset, offset);
    
    // Reserve space for caller saved registers 
-   for (i = 0; i < MONO_MAX_VREGS; ++i)
+   for (i = 0; i < MONO_MAX_IREGS; ++i)
      if ((ALPHA_IS_CALLEE_SAVED_REG (i)) &&
 	 (cfg->used_int_regs & (1 << i)))
        {
@@ -5862,7 +5894,7 @@
 	  pc, regs);
 
   // Check if we have parameters on stack
-  if (pc[-2] & 0xFFFF0000 == 0x23DE0000)     // lda     sp,-n(sp)
+  if ((pc[-2] & 0xFFFF0000) == 0x23DE0000)     // lda     sp,-n(sp)
     start_index = -3;
 
   // Check for (call_membase):
Index: mono/mono/mini/mini-alpha.h
===================================================================
--- mono/mono/mini/mini-alpha.h	(revision 72791)
+++ mono/mono/mini/mini-alpha.h	(working copy)
@@ -300,7 +300,7 @@
 
 #define MONO_ARCH_EMULATE_CONV_R8_UN     1
 #define MONO_ARCH_EMULATE_LCONV_TO_R8_UN 1
-#define MONO_ARCH_EMULATE_LCONV_TO_R8    1
+//#define MONO_ARCH_EMULATE_LCONV_TO_R8    1
 #define MONO_ARCH_EMULATE_FREM           1
 #define MONO_ARCH_EMULATE_MUL_DIV        1
 #define MONO_ARCH_EMULATE_LONG_MUL_OPTS  1
Index: mono/mono/arch/alpha/alpha-codegen.h
===================================================================
--- mono/mono/arch/alpha/alpha-codegen.h	(revision 72791)
+++ mono/mono/arch/alpha/alpha-codegen.h	(working copy)
@@ -547,6 +547,10 @@
 #define alpha_cmptlt(ins, Rsrc1, Rsrc2, Rdest) alpha_encode_fpop( ins, 0x16, 0x0A6, Rsrc1, Rsrc2, Rdest )
 #define alpha_cmptle(ins, Rsrc1, Rsrc2, Rdest) alpha_encode_fpop( ins, 0x16, 0x0A7, Rsrc1, Rsrc2, Rdest )
 
+#define alpha_addt_su(ins, Rsrc1, Rsrc2, Rdest) alpha_encode_fpop( ins, 0x16, 0x5A0, Rsrc1, Rsrc2, Rdest )
+#define alpha_subt_su(ins, Rsrc1, Rsrc2, Rdest) alpha_encode_fpop( ins, 0x16, 0x5A1, Rsrc1, Rsrc2, Rdest )
+
+
 #define alpha_cmptun_su(ins, Rsrc1, Rsrc2, Rdest) alpha_encode_fpop( ins, 0x16, 0x5A4, Rsrc1, Rsrc2, Rdest )
 #define alpha_cmpteq_su(ins, Rsrc1, Rsrc2, Rdest) alpha_encode_fpop( ins, 0x16, 0x5A5, Rsrc1, Rsrc2, Rdest )
 #define alpha_cmptlt_su(ins, Rsrc1, Rsrc2, Rdest) alpha_encode_fpop( ins, 0x16, 0x5A6, Rsrc1, Rsrc2, Rdest )
@@ -557,7 +561,10 @@
 #define alpha_cvtqs(ins, Rsrc2, Rdest) alpha_encode_fpop( ins, 0x16, 0x0BC, alpha_fzero, Rsrc2, Rdest )
 #define alpha_cvtqt(ins, Rsrc2, Rdest) alpha_encode_fpop( ins, 0x16, 0x0BE, alpha_fzero, Rsrc2, Rdest )
 
+#define alpha_divt_su(ins, Rsrc1, Rsrc2, Rdest) alpha_encode_fpop( ins, 0x16, 0x5A3, Rsrc1, Rsrc2, Rdest )
 
+#define alpha_cvtts_su(ins, Rsrc2, Rdest) alpha_encode_fpop( ins, 0x16, 0x5AC, alpha_fzero, Rsrc2, Rdest )
+
 #define alpha_cpys(ins,  Rsrc1, Rsrc2, Rdest) alpha_encode_fpop( ins, 0x17, 0x020, Rsrc1, Rsrc2, Rdest )
 #define alpha_cpysn(ins,  Rsrc1, Rsrc2, Rdest) alpha_encode_fpop( ins, 0x17, 0x021, Rsrc1, Rsrc2, Rdest )
 #define alpha_cpyse(ins,  Rsrc1, Rsrc2, Rdest) alpha_encode_fpop( ins, 0x17, 0x022, Rsrc1, Rsrc2, Rdest )
_______________________________________________
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

Reply via email to