[prev in list] [next in list] [prev in thread] [next in thread]
List: mono-patches
Subject: [Mono-patches] r47858 - trunk/mono/mono/mini
From: "Zoltan Varga (vargaz AT freemail.hu)" <zoltan () mono-cvs ! ximian ! com>
Date: 2005-07-30 15:48:28
Message-ID: 20050730154828.CE2BA9472C () mono-cvs ! ximian ! com
[Download RAW message or body]
Author: zoltan
Date: 2005-07-30 11:48:28 -0400 (Sat, 30 Jul 2005)
New Revision: 47858
Modified:
trunk/mono/mono/mini/inssel.brg
Log:
2005-07-30 Zoltan Varga <vargaz@freemail.hu>
* inssel.brg (mini_emit_memset): Add support for unaligned access.
Modified: trunk/mono/mono/mini/inssel.brg
===================================================================
--- trunk/mono/mono/mini/inssel.brg 2005-07-30 15:48:14 UTC (rev 47857)
+++ trunk/mono/mono/mini/inssel.brg 2005-07-30 15:48:28 UTC (rev 47858)
@@ -1818,6 +1818,42 @@
MONO_EMIT_NEW_COND_EXC (s, EQ, "InvalidCastException");
}
+static int
+size_to_load_u_membase (int size)
+{
+ switch (size) {
+ case 1:
+ return OP_LOADU1_MEMBASE;
+ case 2:
+ return OP_LOADU2_MEMBASE;
+ case 4:
+ return OP_LOADU4_MEMBASE;
+ case 8:
+ return OP_LOADI8_MEMBASE;
+ default:
+ g_assert_not_reached ();
+ return -1;
+ }
+}
+
+static int
+size_to_store_membase_reg (int size)
+{
+ switch (size) {
+ case 1:
+ return OP_STOREI1_MEMBASE_REG;
+ case 2:
+ return OP_STOREI2_MEMBASE_REG;
+ case 4:
+ return OP_STOREI4_MEMBASE_REG;
+ case 8:
+ return OP_STOREI8_MEMBASE_REG;
+ default:
+ g_assert_not_reached ();
+ return -1;
+ }
+}
+
void
mini_emit_memcpy (MonoCompile *s, int destreg, int doffset, int srcreg, int soffset, \
int size, int align) {
@@ -1864,7 +1900,7 @@
}
void
-mini_emit_memset (MonoCompile *s, int destreg, int offset, int size, int val, int \
alignl) +mini_emit_memset (MonoCompile *s, int destreg, int offset, int size, int \
val, int align) {
int val_reg = mono_regstate_next_int (s->rs);
@@ -1873,13 +1909,21 @@
else
MONO_EMIT_NEW_ICONST (s, val_reg, val);
+ /* FIXME: consider alignment for archs that need it. */
+#if !NO_UNALIGNED_ACCESS
if (sizeof (gpointer) == 8) {
+ if (offset % 8) {
+ MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STOREI4_MEMBASE_REG, destreg, offset, \
val_reg); + offset += 4;
+ size -= 4;
+ }
while (size >= 8) {
MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STOREI8_MEMBASE_REG, destreg, offset, \
val_reg); offset += 8;
size -= 8;
}
}
+#endif
while (size >= 4) {
MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STOREI4_MEMBASE_REG, destreg, offset, val_reg);
_______________________________________________
Mono-patches maillist - Mono-patches@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-patches
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic