/* */
/*------------------------------------------------------------------*/
-static int methodCount = 0;
-
static void
enter_method (MonoMethod *method, RegParm *rParm, char *sp)
{
size_data sz;
void *curParm;
-methodCount++;
-if (methodCount > 150000) {
-methodCount = 0;
-rewind(stdout);
-}
fname = mono_method_full_name (method, TRUE);
indent (1);
printf ("ENTER: %s(", fname);
g_free (fname);
ip = (*(guint32 *) (sp+S390_RET_ADDR_OFFSET)) & 0x7fffffff;
- printf (") ip: %p sp: %p\n", ip, sp);
+ printf (") ip: %p sp: %p - ", ip, sp);
if (rParm == NULL)
return;
s390_word (code, ins->inst_offset);
s390_a (code, s390_r0, 0, s390_r13, 4);
}
- s390_lr (code, s390_r1, ins->sreg2);
+ s390_lr (code, s390_r12, ins->sreg1);
if (s390_is_imm16 (ins->inst_imm)) {
- s390_ahi (code, s390_r1, ins->inst_imm);
+ s390_ahi (code, s390_r12, ins->inst_imm);
} else {
s390_basr (code, s390_r13, 0);
s390_j (code, 4);
s390_word (code, ins->inst_imm);
- s390_a (code, s390_r1, 0, s390_r13, 4);
+ s390_a (code, s390_r12, 0, s390_r13, 4);
}
- s390_lr (code, s390_r12, ins->sreg1);
+ s390_lr (code, s390_r1, ins->sreg1);
s390_lr (code, s390_r13, s390_r1);
s390_mvcle(code, s390_r0, s390_r12, 0, 0);
s390_jo (code, -2);
#define MONO_EMIT_NEW_MOVE(cfg,dest,offset,src,imm,size) do { \
MonoInst *inst; \
int tmpr = 0; \
+ int sReg, dReg; \
\
inst = mono_mempool_alloc0 ((cfg)->mempool, sizeof (MonoInst)); \
if (size > 256) { \
tmpr = mono_regstate_next_int (cfg->rs); \
MONO_EMIT_NEW_ICONST(cfg,tmpr,size); \
+ inst->dreg = dest; \
+ inst->inst_offset = offset; \
+ inst->sreg1 = src; \
+ inst->inst_imm = imm; \
+ inst->sreg2 = tmpr; \
+ } else { \
+ if (s390_is_uimm12(offset)) { \
+ inst->dreg = dest; \
+ inst->inst_offset = offset; \
+ } else { \
+ dReg = mono_regstate_next_int (cfg->rs); \
+ MONO_EMIT_NEW_BIALU_IMM(cfg, OP_ADD_IMM, \
+ dReg, dest, offset); \
+ inst->dreg = dReg; \
+ inst->inst_offset = 0; \
+ } \
+ if (s390_is_uimm12(imm)) { \
+ inst->sreg1 = src; \
+ inst->inst_imm = imm; \
+ } else { \
+ sReg = mono_regstate_next_int (cfg->rs); \
+ MONO_EMIT_NEW_BIALU_IMM(cfg, OP_ADD_IMM, \
+ sReg, src, imm); \
+ inst->sreg1 = sReg; \
+ inst->inst_imm = 0; \
+ } \
} \
inst->opcode = OP_S390_MOVE; \
- inst->dreg = dest; \
- inst->inst_offset = offset; \
- inst->inst_imm = imm; \
- inst->sreg1 = src; \
- inst->sreg2 = tmpr; \
inst->unused = size; \
mono_bblock_add_inst (cfg->cbb, inst); \
} while (0)