[Lazarus] UTF8LengthFast returning incorrect results on AARCH64 (MacOS)
Bart
bartjunk64 at gmail.com
Tue Dec 28 13:53:36 CET 2021
On Tue, Dec 28, 2021 at 1:09 PM Juha Manninen via lazarus
<lazarus at lists.lazarus-ide.org> wrote:
> I confess I didn't remember what PopCnt does. I checked from the net.
> FPC implements it as internproc.
> function PopCnt(Const AValue : QWord): QWord;[internproc:fpc_in_popcnt_x];
> I guess it translates to one x86_64 instruction.
> Is it implemented for all CPUs? I found this:
> https://gitlab.com/freepascal.org/fpc/source/-/issues/38729
I just tested PopCnt vs Multiplication on win32 and win64.
The version with PopCnt is appr. 3 times slower on both 32 and 64 bit!
C:\Users\Bart\LazarusProjecten\bugs\Utf8\ulenfast>fpc ulen.lpr
Free Pascal Compiler version 3.3.1 [2021/12/08] for i386
Copyright (c) 1993-2021 by Florian Klaempfl and others
Target OS: Win32 for i386
C:\Users\Bart\LazarusProjecten\bugs\Utf8\ulenfast>ulen
Unsigned version with multiplication: 1344
Unsigned version with PopCnt : 3563
C:\Users\Bart\LazarusProjecten\bugs\Utf8\ulenfast>fpc ulen.lpr -Px86_64
Free Pascal Compiler version 3.3.1 [2021/12/08] for x86_64
Copyright (c) 1993-2021 by Florian Klaempfl and others
Target OS: Win64 for x64
C:\Users\Bart\LazarusProjecten\bugs\Utf8\ulenfast>ulen
Unsigned version with multiplication: 656
Unsigned version with PopCnt : 3797
It looks like PopCnt on these platforms at least calls the generic
version (/rtl/inc/generic.inc).
--
Bart
More information about the lazarus
mailing list