mORMot and Open Source friends
Check-in [962c8e03cc]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:{6324} another fix for IsValidUtf8Avx2() on Win64 - wrong conditional was used ;)
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 962c8e03ccf0d54944a471e372b7dbae801c9057
User & Date: ab 2021-09-15 06:36:14
Context
2021-09-23
19:22
{6325} let TSQLDBPostgresConnection handle 'host:port' as ServerName - backport of https://github.com/synopse/mORMot2/commit/0972493b35efe169e9372d245f793074b23999b5 check-in: 6b8d504b46 user: ab tags: trunk
2021-09-15
06:36
{6324} another fix for IsValidUtf8Avx2() on Win64 - wrong conditional was used ;) check-in: 962c8e03cc user: ab tags: trunk
2021-09-14
15:52
{6323} fixed IsValidUtf8Avx2() on Win64 check-in: 7db5063372 user: ab tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to SynTable.pas.

9139
9140
9141
9142
9143
9144
9145
9146
9147
9148
9149
9150
9151
9152
9153
9154
9155
9156
....
9215
9216
9217
9218
9219
9220
9221
9222
9223
9224
9225
9226
9227
9228
9229
9230
9231
9232
// adapted from https://github.com/simdjson/simdjson - Apache License 2.0
function IsValidUtf8LenAvx2(source: PUtf8Char; sourcelen: PtrInt): boolean;
  {$ifdef FPC}nostackframe; assembler; asm {$else} asm .noframe {$endif FPC}
        test    source, source
        jz      @ok
        test    sourcelen, sourcelen
        jle     @ok
        {$ifdef WIN64ABI} // Win64 ABI doesn't consider rsi/rdi as volatile
        push    rsi
        push    rdi
        {$endif WIN64ABI}
        push    rbp
        mov     r8, source
        mov     rdx, sourcelen
        mov     rsi, r8
        mov     ecx, 64
        mov     rax, rsi
        mov     rdi, rdx
................................................................................
        test    eax, eax
        jne     @last
@ended: vpor    ymm5, ymm5, ymm4
@final: vptest  ymm5, ymm5
        sete    al
        vzeroupper
        leave      // mov rsp,rbp + pop rbp
        {$ifdef WIN64ABI}
        pop     rdi
        pop     rsi
        {$endif WIN64ABI}
        ret
@ok:    mov     al, 1
        ret
@small: vpxor   xmm4, xmm4, xmm4
        xor     esi, esi
        vmovdqa ymm3, ymm4
        vmovdqa ymm5, ymm4






|


|







 







|


|







9139
9140
9141
9142
9143
9144
9145
9146
9147
9148
9149
9150
9151
9152
9153
9154
9155
9156
....
9215
9216
9217
9218
9219
9220
9221
9222
9223
9224
9225
9226
9227
9228
9229
9230
9231
9232
// adapted from https://github.com/simdjson/simdjson - Apache License 2.0
function IsValidUtf8LenAvx2(source: PUtf8Char; sourcelen: PtrInt): boolean;
  {$ifdef FPC}nostackframe; assembler; asm {$else} asm .noframe {$endif FPC}
        test    source, source
        jz      @ok
        test    sourcelen, sourcelen
        jle     @ok
        {$ifdef win64} // this ABI doesn't consider rsi/rdi as volatile
        push    rsi
        push    rdi
        {$endif}
        push    rbp
        mov     r8, source
        mov     rdx, sourcelen
        mov     rsi, r8
        mov     ecx, 64
        mov     rax, rsi
        mov     rdi, rdx
................................................................................
        test    eax, eax
        jne     @last
@ended: vpor    ymm5, ymm5, ymm4
@final: vptest  ymm5, ymm5
        sete    al
        vzeroupper
        leave      // mov rsp,rbp + pop rbp
        {$ifdef win64}
        pop     rdi
        pop     rsi
        {$endif}
        ret
@ok:    mov     al, 1
        ret
@small: vpxor   xmm4, xmm4, xmm4
        xor     esi, esi
        vmovdqa ymm3, ymm4
        vmovdqa ymm5, ymm4

Changes to SynopseCommit.inc.

1
'1.18.6323'
|
1
'1.18.6324'