* 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 -
This commit is contained in:
Jonas Maebe 2010-07-09 21:16:48 +00:00
parent 36e4f3d38b
commit d3976c858b
4 changed files with 53 additions and 32 deletions

1
.gitattributes vendored
View File

@ -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

View File

@ -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;

View File

@ -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
tests/webtbs/tw13294.pp Normal file
View File

@ -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.