diff options
author | jonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2010-07-18 21:24:52 +0000 |
---|---|---|
committer | jonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2010-07-18 21:24:52 +0000 |
commit | c54d09115613e0816660b7cb273b7c0310e395d1 (patch) | |
tree | 67ce6ffc1a38fee31202bf413d2a7b3975e28fbb | |
parent | 56b98a61ce0471553e3cee0b2c9eb5ba8aaf0597 (diff) | |
download | fpc-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.pas | 7 |
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 |