From bbabb77ec975fefb8c4a81c64e9f09173d005559 Mon Sep 17 00:00:00 2001 From: florian Date: Wed, 6 Nov 2013 21:11:08 +0000 Subject: [PATCH] * disable 32 bit operation optimization for powerpc64 git-svn-id: trunk@25979 - --- compiler/fpcdefs.inc | 1 + compiler/ncnv.pas | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/compiler/fpcdefs.inc b/compiler/fpcdefs.inc index 6edf2ba97a..9621f6a360 100644 --- a/compiler/fpcdefs.inc +++ b/compiler/fpcdefs.inc @@ -136,6 +136,7 @@ {$define cpurox} {$define cpurefshaveindexreg} {$define fpc_compiler_has_fixup_jmps} + {$define cpuno32bitops} {$endif powerpc64} {$ifdef arm} diff --git a/compiler/ncnv.pas b/compiler/ncnv.pas index 109d5d5c9a..dca4668e73 100644 --- a/compiler/ncnv.pas +++ b/compiler/ncnv.pas @@ -2437,6 +2437,11 @@ implementation result:=typecheck_call_helper(convtype); end; +{ some code generators for 64 bit CPUs might not support 32 bit operations, so we can + disable the following optimization in fpcdefs.inc. Currently the only CPU for which + this applies is powerpc64 +} +{$ifdef CPUNO32BITOPS} { checks whether we can safely remove 64 bit typeconversions in case range and overflow checking are off, and in case the result of this node tree is downcasted again to a @@ -2553,12 +2558,14 @@ implementation end; end; end; - +{$endif CPUNO32BITOPS} function ttypeconvnode.simplify(forinline : boolean): tnode; var hp: tnode; +{$ifdef CPUNO32BITOPS} foundsint: boolean; +{$endif CPUNO32BITOPS} begin result := nil; { Constant folding and other node transitions to @@ -2732,7 +2739,7 @@ implementation end; end; end; - +{$ifdef CPUNO32BITOPS} { must be done before code below, because we need the typeconversions for ordconstn's as well } case convtype of @@ -2751,6 +2758,7 @@ implementation end; end; end; +{$endif CPUNO32BITOPS} end;