Bläddra i källkod

* fixed 64 bit check for "movd xmmreg, mem" and "movd mem, xmmreg" (patch by
Jasper Neumann, mantis #13294)
* moved "reg64, xmmreg" and "xmmreg, reg64" combo's from movd to movq
(movd is always 32 bit)

git-svn-id: trunk@15538 -

Jonas Maebe 15 år sedan
förälder
incheckning
d3976c858b
4 ändrade filer med 53 tillägg och 32 borttagningar
  1. 1 0
      .gitattributes
  2. 16 16
      compiler/i386/i386tab.inc
  3. 16 16
      compiler/x86_64/x8664tab.inc
  4. 20 0
      tests/webtbs/tw13294.pp

+ 1 - 0
.gitattributes

@@ -10338,6 +10338,7 @@ tests/webtbs/tw13210.pp svneol=native#text/plain
 tests/webtbs/tw1323.pp svneol=native#text/plain
 tests/webtbs/tw1327.pp svneol=native#text/plain
 tests/webtbs/tw13281.pp svneol=native#text/plain
+tests/webtbs/tw13294.pp svneol=native#text/plain
 tests/webtbs/tw13307.pp svneol=native#text/plain
 tests/webtbs/tw1331.pp svneol=native#text/plain
 tests/webtbs/tw13313.pp svneol=native#text/plain

+ 16 - 16
compiler/i386/i386tab.inc

@@ -3157,32 +3157,18 @@
     code    : #1#102#211#2#15#126#65;
     flags   : if_willamette or if_sse2
   ),
-  (
-    opcode  : A_MOVD;
-    ops     : 2;
-    optypes : (ot_xmmreg,ot_reg64,ot_none);
-    code    : #1#102#214#2#15#110#72;
-    flags   : if_willamette or if_sse2
-  ),
-  (
-    opcode  : A_MOVD;
-    ops     : 2;
-    optypes : (ot_reg64,ot_xmmreg,ot_none);
-    code    : #1#102#214#2#15#126#65;
-    flags   : if_willamette or if_sse2
-  ),
   (
     opcode  : A_MOVD;
     ops     : 2;
     optypes : (ot_memory,ot_xmmreg,ot_none);
-    code    : #1#102#214#2#15#126#65;
+    code    : #1#102#213#2#15#126#65;
     flags   : if_willamette or if_sse2
   ),
   (
     opcode  : A_MOVD;
     ops     : 2;
     optypes : (ot_xmmreg,ot_memory,ot_none);
-    code    : #1#102#214#2#15#110#72;
+    code    : #1#102#213#2#15#110#72;
     flags   : if_willamette or if_sse2
   ),
   (
@@ -3241,6 +3227,20 @@
     code    : #219#193#2#15#126#72;
     flags   : if_willamette or if_sse2
   ),
+  (
+    opcode  : A_MOVQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_reg64,ot_none);
+    code    : #1#102#214#2#15#110#72;
+    flags   : if_willamette or if_sse2
+  ),
+  (
+    opcode  : A_MOVQ;
+    ops     : 2;
+    optypes : (ot_reg64,ot_xmmreg,ot_none);
+    code    : #1#102#214#2#15#126#65;
+    flags   : if_willamette or if_sse2
+  ),
   (
     opcode  : A_MOVSB;
     ops     : 0;

+ 16 - 16
compiler/x86_64/x8664tab.inc

@@ -3108,32 +3108,18 @@
     code    : #1#102#211#2#15#126#65;
     flags   : if_willamette or if_sse2
   ),
-  (
-    opcode  : A_MOVD;
-    ops     : 2;
-    optypes : (ot_xmmreg,ot_reg64,ot_none);
-    code    : #1#102#214#2#15#110#72;
-    flags   : if_willamette or if_sse2
-  ),
-  (
-    opcode  : A_MOVD;
-    ops     : 2;
-    optypes : (ot_reg64,ot_xmmreg,ot_none);
-    code    : #1#102#214#2#15#126#65;
-    flags   : if_willamette or if_sse2
-  ),
   (
     opcode  : A_MOVD;
     ops     : 2;
     optypes : (ot_memory,ot_xmmreg,ot_none);
-    code    : #1#102#214#2#15#126#65;
+    code    : #1#102#213#2#15#126#65;
     flags   : if_willamette or if_sse2
   ),
   (
     opcode  : A_MOVD;
     ops     : 2;
     optypes : (ot_xmmreg,ot_memory,ot_none);
-    code    : #1#102#214#2#15#110#72;
+    code    : #1#102#213#2#15#110#72;
     flags   : if_willamette or if_sse2
   ),
   (
@@ -3192,6 +3178,20 @@
     code    : #219#193#2#15#126#72;
     flags   : if_willamette or if_sse2
   ),
+  (
+    opcode  : A_MOVQ;
+    ops     : 2;
+    optypes : (ot_xmmreg,ot_reg64,ot_none);
+    code    : #1#102#214#2#15#110#72;
+    flags   : if_willamette or if_sse2
+  ),
+  (
+    opcode  : A_MOVQ;
+    ops     : 2;
+    optypes : (ot_reg64,ot_xmmreg,ot_none);
+    code    : #1#102#214#2#15#126#65;
+    flags   : if_willamette or if_sse2
+  ),
   (
     opcode  : A_MOVSB;
     ops     : 0;

+ 20 - 0
tests/webtbs/tw13294.pp

@@ -0,0 +1,20 @@
+{ %cpu=i386,x86_64 }
+{ %opt=-Cg- }
+
+program movdtest;
+var 
+  a: int64 = 128133443 or (int64(123455) shl 32);
+  b: int64;
+begin
+  asm
+{$ifdef i386}
+      movd a, %xmm0
+      movd %xmm0, b
+{$else}
+      movd a(%rip), %xmm0
+      movd %xmm0, b(%rip)
+{$endif}
+  end;
+  if b<>128133443 then
+    halt(1);
+end.