Author: zoltan
Date: 2008-02-12 18:53:53 -0500 (Tue, 12 Feb 2008)
New Revision: 95555
Modified:
trunk/mono/mono/mini/ChangeLog
trunk/mono/mono/mini/mini-alpha.c
trunk/mono/mono/mini/mini-alpha.h
trunk/mono/mono/mini/tramp-alpha.c
Log:
2008-02-13 Zoltan Varga <[EMAIL PROTECTED]>
* mini-alpha.h mini-alpha.c tramp-alpha.c: Alpha port updates from
Sergey Tikhonov
<[EMAIL PROTECTED]>.
Modified: trunk/mono/mono/mini/ChangeLog
===================================================================
--- trunk/mono/mono/mini/ChangeLog 2008-02-12 23:52:55 UTC (rev 95554)
+++ trunk/mono/mono/mini/ChangeLog 2008-02-12 23:53:53 UTC (rev 95555)
@@ -1,3 +1,8 @@
+2008-02-13 Zoltan Varga <[EMAIL PROTECTED]>
+
+ * mini-alpha.h mini-alpha.c tramp-alpha.c: Alpha port updates from
Sergey Tikhonov
+ <[EMAIL PROTECTED]>.
+
2008-02-12 Zoltan Varga <[EMAIL PROTECTED]>
* mini.c (mono_normalize_opcodes): Always convert CEE_CONV_R4/R8 to
Modified: trunk/mono/mono/mini/mini-alpha.c
===================================================================
--- trunk/mono/mono/mini/mini-alpha.c 2008-02-12 23:52:55 UTC (rev 95554)
+++ trunk/mono/mono/mini/mini-alpha.c 2008-02-12 23:53:53 UTC (rev 95555)
@@ -25,9 +25,9 @@
#define ALPHA_PRINT if (mini_alpha_verbose_level)
#define NEW_INS(cfg,ins,dest,op) do { \
- (dest) = mono_mempool_alloc0 ((cfg)->mempool, sizeof (MonoInst)); \
- (dest)->opcode = (op); \
- MONO_INST_LIST_ADD_TAIL (&(dest)->node, &(ins)->node);
+ (dest) = mono_mempool_alloc0 ((cfg)->mempool, sizeof (MonoInst)); \
+ (dest)->opcode = (op); \
+ MONO_INST_LIST_ADD_TAIL (&(dest)->node, &(ins)->node); \
} while (0)
#define NEW_ICONST(cfg,dest,val) do { \
@@ -91,6 +91,9 @@
gboolean lmf_addr_key_inited = FALSE;
+MonoBreakpointInfo
+mono_breakpoint_info [MONO_BREAKPOINT_ARRAY_SIZE];
+
/*====================== End of Global Variables ===================*/
gpointer mono_arch_get_lmf_addr (void);
@@ -191,7 +194,7 @@
}
static void
-add_valuetype (MonoGenericSharingContext *ctx, MonoMethodSignature *sig,
ArgInfo *ainfo, MonoType *type,
+add_valuetype (MonoGenericSharingContext *gsctx, MonoMethodSignature *sig,
ArgInfo *ainfo, MonoType *type,
gboolean is_return,
guint32 *gr, guint32 *fr, guint32 *stack_size)
{
@@ -419,17 +422,21 @@
/*========================= End of Function ========================*/
+// This peephole function is called before "local_regalloc" method
+// TSV_TODO - Check what we need to move here
void
mono_arch_peephole_pass_1 (MonoCompile *cfg, MonoBasicBlock *bb)
{
+ CFG_DEBUG(3) g_print ("ALPHA: PEEPHOLE_1 pass\n");
}
+// This peephole function is called after "local_regalloc" method
void
mono_arch_peephole_pass_2 (MonoCompile *cfg, MonoBasicBlock *bb)
{
MonoInst *ins, *n;
- CFG_DEBUG(3) g_print ("ALPHA: PEEPHOLE pass\n");
+ CFG_DEBUG(3) g_print ("ALPHA: PEEPHOLE_2 pass\n");
MONO_INST_LIST_FOR_EACH_ENTRY_SAFE (ins, n, &bb->ins_list, node) {
MonoInst *last_ins = mono_inst_list_prev (&ins->node, &bb->ins_list);
@@ -910,8 +917,8 @@
* Converts complex opcodes into simpler ones so that each IR instruction
* corresponds to one machine instruction.
*/
-static void
- mono_arch_lowering_pass (MonoCompile *cfg, MonoBasicBlock *bb)
+void
+mono_arch_lowering_pass (MonoCompile *cfg, MonoBasicBlock *bb)
{
MonoInst *ins, *n, *next, *temp;
@@ -983,7 +990,7 @@
ins->sreg2 = temp->dreg;
// We should try to reevaluate new IR opcode
- continue;
+ //continue;
}
next = mono_inst_list_next (&ins->node, &bb->ins_list);
@@ -1003,7 +1010,7 @@
ins->sreg2 = temp->dreg;
// We should try to reevaluate new IR opcode
- continue;
+ //continue;
}
next = mono_inst_list_next (&ins->node, &bb->ins_list);
@@ -5861,9 +5868,39 @@
return 0;
}
+gpointer
+mono_arch_get_this_arg_from_call (MonoMethodSignature *sig, gssize *regs,
guint8 *code)
+{
+ unsigned int *pc = (unsigned int *)code;
+ ALPHA_PRINT g_debug("ALPHA_CHECK: [mono_arch_get_this_arg_from_call] code:
%p regs: %p",
+ pc, regs);
+
+ if (MONO_TYPE_ISSTRUCT (sig->ret))
+ return (gpointer)regs [alpha_a1];
+ else
+ return (gpointer)regs [alpha_a0];
+}
+
+gpointer
+mono_arch_get_delegate_invoke_impl (MonoMethodSignature *sig, gboolean
has_target)
+{
+ unsigned int *code, *start;
+ MonoDomain *domain = mono_domain_get ();
+ int i;
+
+ ALPHA_PRINT g_debug("ALPHA_CHECK:
[mono_arch_get_delegate_invoke_impl]");
+
+ /* FIXME: Support more cases */
+ if (MONO_TYPE_ISSTRUCT (sig->ret))
+ return NULL;
+
+ return NULL;
+}
+
guint32
mono_arch_get_patch_offset (guint8 *code)
{
return 3;
}
+
Modified: trunk/mono/mono/mini/mini-alpha.h
===================================================================
--- trunk/mono/mono/mini/mini-alpha.h 2008-02-12 23:52:55 UTC (rev 95554)
+++ trunk/mono/mono/mini/mini-alpha.h 2008-02-12 23:53:53 UTC (rev 95555)
@@ -306,5 +306,10 @@
#define MONO_ARCH_HAVE_CREATE_TRAMPOLINE_FROM_TOKEN 1
#define MONO_ARCH_HAVE_CREATE_DELEGATE_TRAMPOLINE 1
+typedef struct {
+ guint8 *address;
+ guint8 *saved_byte;
+} MonoBreakpointInfo;
+extern MonoBreakpointInfo mono_breakpoint_info[MONO_BREAKPOINT_ARRAY_SIZE];
#endif /* __MONO_MINI_ALPHA_H__ */
Modified: trunk/mono/mono/mini/tramp-alpha.c
===================================================================
--- trunk/mono/mono/mini/tramp-alpha.c 2008-02-12 23:52:55 UTC (rev 95554)
+++ trunk/mono/mono/mini/tramp-alpha.c 2008-02-12 23:53:53 UTC (rev 95555)
@@ -181,7 +181,7 @@
}
// alpha_at points to start of this method !!!
- alpha_ldq(code, alpha_r0, alpha_at, off);
+ alpha_ldq(code, alpha_pv, alpha_at, off);
alpha_br(code, alpha_zero, 2);
*code = (unsigned int)(((unsigned long)mono_get_lmf_addr) & 0xFFFFFFFF);
@@ -193,7 +193,7 @@
* The call might clobber argument registers, but they are already
* saved to the stack/global regs.
*/
- alpha_jsr(code, alpha_ra, alpha_r0, 0);
+ alpha_jsr(code, alpha_ra, alpha_pv, 0);
// Save lmf_addr
alpha_stq(code, alpha_r0, alpha_sp,
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches