summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2010-07-18 21:24:52 +0000
committerjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2010-07-18 21:24:52 +0000
commitc54d09115613e0816660b7cb273b7c0310e395d1 (patch)
tree67ce6ffc1a38fee31202bf413d2a7b3975e28fbb
parent56b98a61ce0471553e3cee0b2c9eb5ba8aaf0597 (diff)
downloadfpc-c54d09115613e0816660b7cb273b7c0310e395d1.tar.gz
* fixed copy-paste error in r15600
* fixed spilling error after r15600 the same register appears twice in an instruction (it was spilled once in that case) git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@15601 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--compiler/x86/rgx86.pas7
1 files changed, 5 insertions, 2 deletions
diff --git a/compiler/x86/rgx86.pas b/compiler/x86/rgx86.pas
index e0b556bfd2..9a77ac8345 100644
--- a/compiler/x86/rgx86.pas
+++ b/compiler/x86/rgx86.pas
@@ -124,7 +124,7 @@ implementation
1 :
begin
if (oper[0]^.typ=top_reg) and
- (getregtype(oper[n+0]^.reg)=regtype) then
+ (getregtype(oper[0]^.reg)=regtype) then
begin
if get_alias(getsupreg(oper[0]^.reg))<>orgreg then
internalerror(200410101);
@@ -143,7 +143,10 @@ implementation
if ops=3 then
n:=1;
if (oper[n+0]^.typ=top_reg) and
- (oper[n+1]^.typ=top_reg) then
+ (oper[n+1]^.typ=top_reg) and
+ ((getregtype(oper[n+0]^.reg)<>regtype) or
+ (getregtype(oper[n+1]^.reg)<>regtype) or
+ (get_alias(getsupreg(oper[n+0]^.reg))<>get_alias(getsupreg(oper[n+1]^.reg)))) then
begin
if (getregtype(oper[n+0]^.reg)=regtype) and
(get_alias(getsupreg(oper[n+0]^.reg))=orgreg) then