From 2c7a1b4e91b25b4c9b02ad2c35c44a404ef9e8e0 Mon Sep 17 00:00:00 2001 From: Jonas Maebe Date: Wed, 23 Jul 2014 14:06:06 +0000 Subject: [PATCH] * 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 - --- compiler/ncgcnv.pas | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/compiler/ncgcnv.pas b/compiler/ncgcnv.pas index d179cb5f17..da7dcc6293 100644 --- a/compiler/ncgcnv.pas +++ b/compiler/ncgcnv.pas @@ -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