return 2;
return 0;
}
+
+ // #7438
+ public static int test_0_ldelema_2_64bit () {
+ bool[,] test = new bool[201,201];
+ int x,y;
+ for(x=-100;x<100;x++) for(y=-100;y<100;y++){
+ test[x+100,y+100] = true;
+ }
+ return 0;
+ }
}
int realidx1_reg = alloc_preg (cfg);
int realidx2_reg = alloc_preg (cfg);
int sum_reg = alloc_preg (cfg);
- int index1, index2;
+ int index1, index2, tmpreg;
MonoInst *ins;
guint32 size;
index1 = index_ins1->dreg;
index2 = index_ins2->dreg;
+#if SIZEOF_REGISTER == 8
+ /* The array reg is 64 bits but the index reg is only 32 */
+ if (COMPILE_LLVM (cfg)) {
+ /* Not needed */
+ } else {
+ tmpreg = alloc_preg (cfg);
+ MONO_EMIT_NEW_UNALU (cfg, OP_SEXT_I4, tmpreg, index1);
+ index1 = tmpreg;
+ tmpreg = alloc_preg (cfg);
+ MONO_EMIT_NEW_UNALU (cfg, OP_SEXT_I4, tmpreg, index2);
+ index2 = tmpreg;
+ }
+#else
+ // FIXME: Do we need to do something here for i8 indexes, like in ldelema_1_ins ?
+#endif
+
/* range checking */
MONO_EMIT_NEW_LOAD_MEMBASE (cfg, bounds_reg,
arr->dreg, G_STRUCT_OFFSET (MonoArray, bounds));