* fix tsubscriptnode to handle left.location being an fpu or mm register as well.

git-svn-id: trunk@26642 -
This commit is contained in:
florian 2014-02-01 13:08:21 +00:00
parent 77967432ef
commit cd6f4d4469
2 changed files with 13 additions and 3 deletions

View File

@ -407,8 +407,12 @@ implementation
LOC_CONSTANT,
LOC_REGISTER,
LOC_CREGISTER,
{ if a floating point value is casted into a record, it
can happen that we get here an fpu or mm register }
LOC_MMREGISTER,
LOC_FPUREGISTER:
LOC_FPUREGISTER,
LOC_CMMREGISTER,
LOC_CFPUREGISTER:
begin
{ in case the result is not something that can be put
into an integer register (e.g.
@ -423,12 +427,12 @@ implementation
memory as well }
((left.location.size in [OS_PAIR,OS_SPAIR]) and
(vs.fieldoffset div sizeof(aword)<>(vs.fieldoffset+vs.getsize-1) div sizeof(aword))) or
(location.loc in [LOC_MMREGISTER,LOC_FPUREGISTER,
(location.loc in [LOC_MMREGISTER,LOC_FPUREGISTER,LOC_CMMREGISTER,LOC_CFPUREGISTER,
{ actually, we should be able to "subscript" a constant, but this would require some code
which enables dumping and reading constants from a temporary memory buffer. This
must be done a CPU dependent way, so it is not easy and probably not worth the effort (FK)
}
LOC_CONSTANT]) then
LOC_CONSTANT]) then
hlcg.location_force_mem(current_asmdata.CurrAsmList,location,left.resultdef)
else
begin

View File

@ -800,6 +800,12 @@ implementation
else
begin
case left.expectloc of
{ if a floating point value is casted into a record, it
can happen that we get here an fpu or mm register }
LOC_CMMREGISTER,
LOC_CFPUREGISTER,
LOC_MMREGISTER,
LOC_FPUREGISTER,
LOC_CONSTANT,
LOC_REGISTER,
LOC_SUBSETREG: