2004-07-31 Zoltan Varga <vargaz@freemail.hu>
authorZoltan Varga <vargaz@gmail.com>
Sat, 31 Jul 2004 16:39:37 +0000 (16:39 -0000)
committerZoltan Varga <vargaz@gmail.com>
Sat, 31 Jul 2004 16:39:37 +0000 (16:39 -0000)
* inssel.brg: Optimize memset on 64 bit machines.

svn path=/trunk/mono/; revision=31694

mono/mini/ChangeLog
mono/mini/inssel.brg

index c538de91a70f4ec95901fb3687eb24ff103b0d0c..933933beca73c314d6e588f5eebbefe79d97b219 100644 (file)
@@ -1,5 +1,7 @@
 2004-07-31  Zoltan Varga  <vargaz@freemail.hu>
 
+       * inssel.brg: Optimize memset on 64 bit machines.
+
        * mini-amd64.c: Fix some vararg cases.
 
 2004-07-30  Neale Ferguson <Neale.Ferguson@SoftwareAG-usa.com>
index db24f1b287b1dba4f621d2b537aa0d848315ca9f..c4a4f9a446c6cab8375f1820cd22e6cbc63e33a7 100644 (file)
@@ -1863,7 +1863,18 @@ mini_emit_memset (MonoCompile *s, int destreg, int offset, int size, int val, in
 {
        int val_reg = mono_regstate_next_int (s->rs);
 
-       MONO_EMIT_NEW_ICONST (s, val_reg, val);
+       if (sizeof (gpointer) == 8)
+               MONO_EMIT_NEW_I8CONST (s, val_reg, val);
+       else
+               MONO_EMIT_NEW_ICONST (s, val_reg, val);
+
+       if (sizeof (gpointer) == 8) {
+               while (size >= 8) {
+                       MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STOREI8_MEMBASE_REG, destreg, offset, val_reg);
+                       offset += 8;
+                       size -= 8;
+               }
+       }       
 
        while (size >= 4) {
                MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STOREI4_MEMBASE_REG, destreg, offset, val_reg);