mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-05-30 23:02:35 +02:00
* fixed optimisation from r25067 for the generic case where a signed value
is converted to a larger unsigned value (e.g. OS_S16 -> OS_32) git-svn-id: trunk@28251 -
This commit is contained in:
parent
d5895a4d98
commit
2c7a1b4e91
@ -120,12 +120,12 @@ interface
|
||||
{ On targets without 8/16 bit register components, 8/16-bit operations
|
||||
always adjust high bits of result, see 'maybeadjustresult' method in
|
||||
respective cgcpu.pas. Therefore 8/16-bit locations are valid as larger
|
||||
ones (except OS_S8->OS_16 which still needs high 16 bits cleared). }
|
||||
ones (except signed->unsigned, which still needs high bits cleared). }
|
||||
else if (left.location.loc in [LOC_REGISTER,LOC_CREGISTER]) and
|
||||
(tcgsize2size[(reg_cgsize(left.location.register))]=sizeof(aint)) and
|
||||
(ressize>leftsize) and
|
||||
(newsize in [OS_32,OS_S32,OS_16,OS_S16]) and
|
||||
not ((newsize=OS_16) and (def_cgsize(left.resultdef)=OS_S8)) then
|
||||
(tcgsize2size[(reg_cgsize(left.location.register))]=sizeof(aint)) and
|
||||
(ressize>leftsize) and
|
||||
(newsize in [OS_32,OS_S32,OS_16,OS_S16]) and
|
||||
(not is_signed(left.resultdef) or is_signed(resultdef)) then
|
||||
location.size:=newsize
|
||||
{$endif}
|
||||
else
|
||||
|
Loading…
Reference in New Issue
Block a user