diff options
author | sergei <sergei@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2014-06-17 18:45:11 +0000 |
---|---|---|
committer | sergei <sergei@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2014-06-17 18:45:11 +0000 |
commit | 2feee21c9dbab0f1abe65e55744fb0f49742c5d5 (patch) | |
tree | 61f76d77477128866cc1cfcf5bcdaee862006e0b /compiler/ninl.pas | |
parent | 78109c479ce78586e1d46b300b3694d1537e11a2 (diff) | |
download | fpc-2feee21c9dbab0f1abe65e55744fb0f49742c5d5.tar.gz |
* On 64-bit targets, handle abs(int64) internally, using the same code as for abs(longint), i.e. without branching. Both generic and x86-specific pass 2 code is already suitable for different operand sizes, only type checking needs removal of excessive conversions to 32 bits.
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@27989 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'compiler/ninl.pas')
-rw-r--r-- | compiler/ninl.pas | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/compiler/ninl.pas b/compiler/ninl.pas index f4138e874d..1185675d9f 100644 --- a/compiler/ninl.pas +++ b/compiler/ninl.pas @@ -2412,9 +2412,9 @@ implementation if left.nodetype=ordconstn then begin if tordconstnode(left).value<0 then - result:=cordconstnode.create((-tordconstnode(left).value),s32inttype,false) + result:=cordconstnode.create((-tordconstnode(left).value),resultdef,false) else - result:=cordconstnode.create((tordconstnode(left).value),s32inttype,false); + result:=cordconstnode.create((tordconstnode(left).value),resultdef,false); end end; in_sqr_real : @@ -3139,8 +3139,7 @@ implementation in_abs_long: begin set_varstate(left,vs_read,[vsf_must_be_valid]); - inserttypeconv(left,s32inttype); - resultdef:=s32inttype; + resultdef:=left.resultdef; end; in_abs_real, |