projects
/
mono.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge pull request #992 from ludovic-henry/ludovic-counters-pr1
[mono.git]
/
mono
/
mini
/
mini-codegen.c
diff --git
a/mono/mini/mini-codegen.c
b/mono/mini/mini-codegen.c
index 7c0a3c66ccf2549461cc75c5fa021be2a19d365a..6e5bf2f8586b331670c76f02325d0cb7585f3d95 100644
(file)
--- a/
mono/mini/mini-codegen.c
+++ b/
mono/mini/mini-codegen.c
@@
-101,6
+101,7
@@
static const int regbank_move_ops [] = {
#define regmask(reg) (((regmask_t)1) << (reg))
#define regmask(reg) (((regmask_t)1) << (reg))
+#ifdef MONO_ARCH_USE_SHARED_FP_SIMD_BANK
static const regmask_t regbank_callee_saved_regs [] = {
MONO_ARCH_CALLEE_SAVED_REGS,
MONO_ARCH_CALLEE_SAVED_FREGS,
static const regmask_t regbank_callee_saved_regs [] = {
MONO_ARCH_CALLEE_SAVED_REGS,
MONO_ARCH_CALLEE_SAVED_FREGS,
@@
-108,6
+109,7
@@
static const regmask_t regbank_callee_saved_regs [] = {
MONO_ARCH_CALLEE_SAVED_REGS,
MONO_ARCH_CALLEE_SAVED_XREGS,
};
MONO_ARCH_CALLEE_SAVED_REGS,
MONO_ARCH_CALLEE_SAVED_XREGS,
};
+#endif
static const regmask_t regbank_callee_regs [] = {
MONO_ARCH_CALLEE_REGS,
static const regmask_t regbank_callee_regs [] = {
MONO_ARCH_CALLEE_REGS,
@@
-453,9
+455,22
@@
mono_print_ins_index (int i, MonoInst *ins)
else
printf (" %s", mono_inst_name (ins->opcode));
if (spec == MONO_ARCH_CPU_SPEC) {
else
printf (" %s", mono_inst_name (ins->opcode));
if (spec == MONO_ARCH_CPU_SPEC) {
+ gboolean dest_base = FALSE;
+ switch (ins->opcode) {
+ case OP_STOREV_MEMBASE:
+ dest_base = TRUE;
+ break;
+ default:
+ break;
+ }
+
/* This is a lowered opcode */
/* This is a lowered opcode */
- if (ins->dreg != -1)
- printf (" R%d <-", ins->dreg);
+ if (ins->dreg != -1) {
+ if (dest_base)
+ printf (" [R%d + 0x%lx] <-", ins->dreg, (long)ins->inst_offset);
+ else
+ printf (" R%d <-", ins->dreg);
+ }
if (ins->sreg1 != -1)
printf (" R%d", ins->sreg1);
if (ins->sreg2 != -1)
if (ins->sreg1 != -1)
printf (" R%d", ins->sreg1);
if (ins->sreg2 != -1)
@@
-1050,8
+1065,9
@@
assign_reg (MonoCompile *cfg, MonoRegState *rs, int reg, int hreg, int bank)
else {
g_assert (reg >= MONO_MAX_IREGS);
g_assert (hreg < MONO_MAX_IREGS);
else {
g_assert (reg >= MONO_MAX_IREGS);
g_assert (hreg < MONO_MAX_IREGS);
-#if
ndef TARGET_ARM
+#if
!defined(TARGET_ARM) && !defined(TARGET_ARM64)
/* this seems to trigger a gcc compilation bug sometime (hreg is 0) */
/* this seems to trigger a gcc compilation bug sometime (hreg is 0) */
+ /* On arm64, rgctx_reg is a global hreg, and it is used to pass an argument */
g_assert (! is_global_ireg (hreg));
#endif
g_assert (! is_global_ireg (hreg));
#endif
@@
-1109,7
+1125,7
@@
mono_local_regalloc (MonoCompile *cfg, MonoBasicBlock *bb)
desc_to_fixed_reg_inited = TRUE;
/* Validate the cpu description against the info in mini-ops.h */
desc_to_fixed_reg_inited = TRUE;
/* Validate the cpu description against the info in mini-ops.h */
-#if defined(TARGET_AMD64) || defined(TARGET_X86) || defined(TARGET_ARM)
+#if defined(TARGET_AMD64) || defined(TARGET_X86) || defined(TARGET_ARM)
|| defined(TARGET_ARM64)
for (i = OP_LOAD; i < OP_LAST; ++i) {
const char *ispec;
for (i = OP_LOAD; i < OP_LAST; ++i) {
const char *ispec;
@@
-2337,6
+2353,8
@@
mono_opcode_to_cond (int opcode)
case OP_CMOV_IEQ:
case OP_CMOV_LEQ:
return CMP_EQ;
case OP_CMOV_IEQ:
case OP_CMOV_LEQ:
return CMP_EQ;
+ case OP_FCNEQ:
+ case OP_ICNEQ:
case OP_IBNE_UN:
case OP_LBNE_UN:
case OP_FBNE_UN:
case OP_IBNE_UN:
case OP_LBNE_UN:
case OP_FBNE_UN:
@@
-2345,12
+2363,16
@@
mono_opcode_to_cond (int opcode)
case OP_CMOV_INE_UN:
case OP_CMOV_LNE_UN:
return CMP_NE;
case OP_CMOV_INE_UN:
case OP_CMOV_LNE_UN:
return CMP_NE;
+ case OP_FCLE:
+ case OP_ICLE:
case OP_IBLE:
case OP_LBLE:
case OP_FBLE:
case OP_CMOV_ILE:
case OP_CMOV_LLE:
return CMP_LE;
case OP_IBLE:
case OP_LBLE:
case OP_FBLE:
case OP_CMOV_ILE:
case OP_CMOV_LLE:
return CMP_LE;
+ case OP_FCGE:
+ case OP_ICGE:
case OP_IBGE:
case OP_LBGE:
case OP_FBGE:
case OP_IBGE:
case OP_LBGE:
case OP_FBGE:
@@
-2382,6
+2404,7
@@
mono_opcode_to_cond (int opcode)
case OP_CMOV_LGT:
return CMP_GT;
case OP_CMOV_LGT:
return CMP_GT;
+ case OP_ICLE_UN:
case OP_IBLE_UN:
case OP_LBLE_UN:
case OP_FBLE_UN:
case OP_IBLE_UN:
case OP_LBLE_UN:
case OP_FBLE_UN:
@@
-2390,6
+2413,8
@@
mono_opcode_to_cond (int opcode)
case OP_CMOV_ILE_UN:
case OP_CMOV_LLE_UN:
return CMP_LE_UN;
case OP_CMOV_ILE_UN:
case OP_CMOV_LLE_UN:
return CMP_LE_UN;
+
+ case OP_ICGE_UN:
case OP_IBGE_UN:
case OP_LBGE_UN:
case OP_FBGE_UN:
case OP_IBGE_UN:
case OP_LBGE_UN:
case OP_FBGE_UN: