[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