mORMot2 DailyLecture quotidienne des commits upstream

Le parsing numérique SSSE3 arrive sous Delphi et FPC, avec des corrections de limites

Le changement principal est un chemin assembleur x86-64 partagé pour GetExtended et GetNumericVariantFromJson sur les cibles Delphi et FPC compatibles SSSE3, avec des fallbacks scalaires et une matrice de régression élargie. Des corrections ultérieures réparent le parsing de MIN_INT64 avec fraction et la cohérence FP80. Le reporting de version macOS prend aussi en charge Golden Gate, mais sa première correspondance de kernel est corrigée plus tard dans cette même édition ; les utilisateurs en production doivent donc viser la build 2.4.16897 plutôt qu’une build intermédiaire.

En bref

  • Passez à la build 2.4.16897 ; la série assembleur numérique reçoit des corrections MIN_INT64 et FP80 avant le head final.
  • GetExtended et GetNumericVariantFromJson utilisent désormais l’assembleur SSSE3 sur les cibles Delphi Win64 et FPC Win64/Linux x86-64 compatibles.
  • La build 2.4.16888 corrige le parsing de -9223372036854775808.0 dans les chemins Pascal et assembleur x86-64.
  • Le chemin FP80 dédié conserve la précision de mantisse 64 bits et la build 2.4.16891 harmonise les résultats signés hors plage.
  • MacKernel et les métadonnées Golden Gate sont des ajouts publics ; les builds 2.4.16892–2.4.16895 utilisent une correspondance Darwin incorrecte corrigée en 16896.
  • GetInteger et GetCardinal consomment maintenant deux chiffres par boucle sans changer leurs signatures publiques.

Conseil de mise à jour

Utilisez la build 2.4.16897 comme un ensemble. Ne vous arrêtez pas sur 2.4.16866–2.4.16890 : l’assembleur numérique fusionné et les chemins Pascal/FP80 reçoivent des corrections de limites et de cohérence jusqu’à 16891. Les déploiements macOS doivent aussi éviter 2.4.16892–2.4.16895, car le premier ajustement MacKernel mappe incorrectement les versions Darwin récentes jusqu’à 16896. Relancez les tests de type numérique JSON, Currency, minimum Int64, longues mantisses, débordement signé et FP80 sur chaque backend Delphi/FPC livré.

Build2.4.16865 → 2.4.16897
Commits24
Lignes+6602 -2528
Lecture6 min

21 sur 21 entrées · 24 commits upstream

Sujets
# Entrée Catégorie Unités
1 Élevée Le parsing FP80 reçoit un chemin de précision dédié Sous TSYNEXTENDED80, GetExtended applique l’échelle avec la mantisse complète de 64 bits au lieu du trimming propre au binary64, tandis que GetNumericVariantFromJson utilise des règles de division exacte et de plage adaptées à FP80 avant de renvoyer un variant Double. Correctifs mormot.core.text+1 a91f18f1+67-25

core: proper FP80 version of GetExtended() and GetNumericVariantFromJson()

Impact

Les cibles FPC et autres où TSynExtended=FP80 évitent les hypothèses binary64 pouvant modifier les bits faibles des longues mantisses ; les cibles binary64 conservent leur chemin spécialisé.

Arnaud Bouchez · 07:52 UTC · voir le commit sur GitHub →

2 Élevée Le parsing numérique portable rejette les valeurs vides et préserve les décimales limites GetExtended rejette un signe ou des espaces sans chiffre et supprime les zéros décimaux finaux neutres avant la conversion de Clinger ; GetNumericVariantFromJson corrige la gestion de zéro, MIN_INT64, du minimum Currency et des limites fractionnaires. Correctifs mormot.core.text+1 b9ba681e+59-9

core: fix empty numbers, padded decimals and negative fraction boundaries

Impact

Les chemins portables Delphi et FPC n’acceptent plus un texte numérique vide et ne perdent plus en exactitude sur les décimales complétées ; les variants numériques JSON conservent le type et la valeur attendus aux limites signées.

Mike · 23:39 UTC · voir le commit sur GitHub →

3 Élevée MIN_INT64 avec un suffixe fractionnaire est correctement analysé Les chemins Pascal et x86-64 de GetNumericVariantFromJson cessent d’accumuler les chiffres fractionnaires lorsque la sentinelle MIN_INT64 est définie, et la suite de régression ajoute -9223372036854775808.0. Correctifs mormot.core.base.asmx64+1 dfe52ae7+14-10

core: fixed GetNumericVariantFromJson('-9223372036854775808.0') parsing

Impact

Un JSON contenant le minimum signé 64 bits suivi de .0 ne corrompt plus le chemin de mantisse et ne renvoie plus une mauvaise valeur Double sous Delphi ou FPC.

Arnaud Bouchez · 13:26 UTC · voir le commit sur GitHub →

4 Élevée MacKernel ignore désormais Darwin 26 dans le bon sens MacKernel remplace l’incrément des valeurs supérieures à 25 par un décrément des valeurs supérieures à 26, et les tests vérifient les valeurs MACOS_NUM et MACOS_NAME obtenues jusqu’aux fallbacks futurs. Correctifs mormot.core.os 944abc0c+13-10

core: fixed MacKernel() logic

Impact

Le reporting de macOS 26, 27 et 28 n’indexe plus incorrectement les tableaux de versions marketing. Cela affecte OSVersionName, OSVersionShort et les sorties de monitoring sous macOS.

API publique

  • MacKernelbehaviour-changed — Les versions Darwin supérieures à 26 sont maintenant mappées en décrémentant le slot kernel absent.

Arnaud Bouchez · 18:17 UTC · voir le commit sur GitHub →

5 Moyenne Les erreurs de plage FP80 préservent le signe analysé Lorsque le chemin FP80 dédié de GetExtended rejette une magnitude d’exposant supérieure ou égale à 5120, il applique maintenant fNeg au résultat partiel avant de renvoyer l’erreur. Correctifs mormot.core.text 92faab04+5-3

core: ensure GetExtended() FP80 is consistent

Impact

Les chemins FP80 et binary64 s’accordent maintenant sur le signe de la valeur partielle renvoyée avec une erreur hors plage ; cela concerne surtout les appelants permissifs ou de diagnostic qui inspectent la valeur malgré err=1.

Arnaud Bouchez · 14:43 UTC · voir le commit sur GitHub →

6 Moyenne Le reporting macOS Golden Gate est ajouté derrière MacKernel MACOS_NUM et MACOS_NAME sont étendus jusqu’à Golden Gate, et une nouvelle fonction publique MacKernel centralise la correspondance de Darwin utsrelease[2] vers ces tableaux pour OSVersionName et OSVersionShort. Nouveautés mormot.core.os+1 3e5e799c+33-21

core: properly detect MacOS Golden Gate

Impact

Les services et outils de monitoring macOS peuvent afficher Golden Gate par son nom marketing, mais cette première correspondance est incorrecte pour les nouvelles valeurs Darwin et doit être associée à la build 16896.

API publique

  • MacKerneladded — Helper public mappant TOperatingSystemVersion.utsrelease[2] vers un index MACOS_NAME.
  • MACOS_NUMbehaviour-changed — La borne supérieure passe à 27 et ajoute macOS 28 après Golden Gate.
  • MACOS_NAMEbehaviour-changed — La borne supérieure passe à 27 avec Golden Gate puis un fallback Next.

Arnaud Bouchez · 18:00 UTC · voir le commit sur GitHub →

7 Moyenne X64CpuFeatures expose la disponibilité de SSSE3 L’ensemble public TX64CpuFeatures reçoit cpuSSSE3 avant cpuAVX, et l’initialisation l’inclut lorsque cfSSE3 et cfSSSE3 sont tous deux présents. Nouveautés mormot.core.base 73b03207+6-3

core: new cpuSSSE3 flag in X64CpuFeatures

Impact

Le code peut sélectionner spécifiquement SSSE3, mais l’ajout du premier membre d’énumération décale les ordinaux et positions de bits de cpuAVX, cpuAVX2 et cpuHaswell dans les masques bruts persistés.

À regarder

Recherchez les valeurs Ord(TX64CpuFeature) persistées ou les bitmasks TX64CpuFeatures sérialisés avant la mise à niveau.

API publique

  • TX64CpuFeature.cpuSSSE3added — Ajouté comme premier bit TX64CpuFeatures avant cpuAVX.

Arnaud Bouchez · 09:42 UTC · voir le commit sur GitHub →

8 Moyenne Les entrées numériques longues et rares restent dans l’assembleur L’implémentation x86-64 ajoute une continuation assembleur scalaire pour les longues mantisses, les exposants et les CPU sans SSSE3, et partage une table NumericSimdData explicitement alignée entre les deux parseurs. Performance mormot.core.text+1 af7922d5+831-280

core: keep numeric parsing in ASM and share aligned SSSE3 data

Impact

Davantage d’entrées x86-64 évitent une transition vers Pascal tout en conservant le curseur JSON, les erreurs, Currency et la sémantique d’arrondi. NumericSimdData devient un point de test publié sous ASMX64.

À regarder

Utilisez la build finale, car des commits ultérieurs refactorisent et corrigent ce nouveau chemin assembleur.

API publique

  • NumericSimdDataadded — Publié uniquement sous ASMX64 comme point d’entrée du stockage aligné utilisé par les tests du parseur.

Mike · 02:54 UTC · voir le commit sur GitHub →

9 Moyenne Delphi Win64 reçoit un chemin rapide SSSE3 pour les nombres courants GetExtended et GetNumericVariantFromJson reçoivent un assembleur Delphi Win64 qui réduit jusqu’à 15 chiffres avec SSSE3, vérifie les limites de page de 4 Kio et revient au Pascal pour les grammaires longues ou rares. Performance mormot.core.text+1 56417260+617-0

core: accelerate Delphi Win64 number parsing with SSSE3

Impact

Les CPU Delphi Win64 compatibles peuvent analyser les entiers, fractions et exposants courts courants avec moins d’opérations scalaires, tout en conservant les signatures publiques et le fallback Pascal.

À regarder

Mesurez et retestez la build finale sur le plus ancien CPU Win64 compatible SSSE3 que vous prenez en charge.

Mike · 23:40 UTC · voir le commit sur GitHub →

10 Moyenne La mise à l’échelle flottante Pascal supprime du travail redondant GetExtended simplifie la validation des exposants, l’indexation des puissances de dix et les tests du chemin de Clinger, et remplace les boucles répétées d’échelle FP80 par deux tables compactes de puissances. Performance mormot.core.text af318893+74-57

core: optimized GetExtended() pascal code

Impact

Le parsing portable Delphi/FPC exécute moins de branches et d’opérations d’index ; les signatures publiques et la syntaxe acceptée ne changent pas.

Arnaud Bouchez · 09:39 UTC · voir le commit sur GitHub →

11 Moyenne Les entiers d’un ou deux chiffres contournent la réduction SIMD générale L’assembleur x86-64 partagé réutilise les chiffres déjà calculés dans xmm0 pour les résultats entiers d’un ou deux chiffres de GetExtended et GetNumericVariantFromJson, avec des stockages dédiés pour le signe et varInteger. Performance mormot.core.base.asmx64 102fa3d9+43-11

core: optimized #582 asm for 1 and 2 digits

Impact

Les tokens numériques très courts utilisent moins d’instructions de shuffle et de multiplication sur le chemin assembleur x86-64 ; les tests confirment les valeurs varInteger exactes et les pointeurs de fin.

Arnaud · 23:23 UTC · PR #582 · voir le commit sur GitHub →

12 Moyenne GetInteger et GetCardinal consomment les chiffres par paires Les boucles portables GetInteger et GetCardinal analysent maintenant deux chiffres par itération lorsqu’ils sont disponibles, puis un dernier chiffre si nécessaire, sans changer les règles de signe ou de terminaison. Performance mormot.core.base d1bf6356+35-15

core: rewritten GetInteger/GetCardinal

Impact

Les helpers JSON et texte Delphi/FPC qui appellent ces routines exécutent moins d’itérations ; les signatures et résultats documentés ne changent pas.

Arnaud Bouchez · 14:41 UTC · voir le commit sur GitHub →

13 Moyenne FPC Win64 et Linux rejoignent le chemin de parsing SSSE3 Le parseur x86-64 adapte le passage des arguments et la syntaxe d’alignement à FPC et à l’ABI System V, et ajoute un traitement assembleur sûr des NaN/Inf signés et des préfixes incomplets. Compilateur & plateforme mormot.core.text+1 9d219b99+100-26

core: support SSSE3 number parsing on FPC Win64 and Linux

Impact

Les builds FPC x86-64 sous Windows et Linux peuvent utiliser la même accélération SSSE3 sans modifier les appelants ; les entrées sans SSSE3 ou inhabituelles gardent un comportement de fallback équivalent.

À regarder

Exécutez la suite de conversions numériques sous FPC Win64 et Linux x86-64 avant déploiement.

Mike · 00:53 UTC · voir le commit sur GitHub →

14 Faible Les builds BSD évitent les avertissements de conversion de zéro vers TThreadID TMultiLightLock.Init, Done et UnLock convertissent explicitement zéro en TThreadID lors de la remise à zéro de ThreadID. Compilateur & plateforme mormot.core.os 9bffea66+5-5

core: fixed compilation warning on BSD

Impact

La compilation BSD/FPC est plus propre ; le comportement de verrouillage généré et les API publiques ne changent pas.

Arnaud Bouchez · 18:01 UTC · voir le commit sur GitHub →

15 Faible Les deux parseurs numériques x86-64 passent dans un include partagé Les corps assembleur et constantes quittent mormot.core.text et mormot.core.variants pour mormot.core.base.asmx64.inc, tandis que les implémentations Pascal restent dans leurs unités d’origine. Sous le capot mormot.core.base+3 e86c5f33+1217-1203

core: moved #582 x86_64 asm to mormot.core.base.asmx64.inc

Impact

Aucun changement pour les appelants ; la consolidation supprime le code d’intégration dupliqué et centralise les corrections ultérieures pour Delphi et FPC x86-64.

Arnaud Bouchez · 12:55 UTC · PR #582 · voir le commit sur GitHub →

16 Faible L’assembleur GetExtended est réorganisé pour l’intégration FPC L’assembleur x86-64 de GetExtended est réorganisé mécaniquement autour de labels, constantes et directives de compilateur partagés, sans changement fonctionnel prévu. Sous le capot mormot.core.text b082ba10+380-381

core: refactored #582 x64 asm

Impact

Aucun changement d’API applicative ni de comportement n’est annoncé ; la réorganisation prépare une implémentation commune à Delphi et FPC.

Arnaud Bouchez · 09:43 UTC · PR #582 · voir le commit sur GitHub →

17 Faible L’assembleur numérique JSON est réorganisé pour FPC L’assembleur GetNumericVariantFromJson est réorganisé pour une intégration compilateur plus propre, sans changement prévu du curseur, de VType, de la valeur ou des erreurs. Sous le capot mormot.core.text+1 2201a7b9+348-364

core: refactored GetNumericVariantFromJson() x64 asm

Impact

Le code applicatif ne voit aucun changement d’API publique ; il s’agit d’un travail interne avant le déplacement de l’implémentation vers un include partagé.

Arnaud Bouchez · 11:36 UTC · voir le commit sur GitHub →

18 Faible Les boucles par paires de chiffres sont simplifiées sans changement sémantique GetInteger et GetCardinal remplacent les blocs else imbriqués par continue et un chemin partagé pour le dernier chiffre unique. Sous le capot mormot.core.base 8924ade8+10-14

core: minor GetInteger/GetCardinal refactoring

Impact

Aucun changement fonctionnel, d’API ou de comportement backend ; cela raccourcit seulement les boucles réécrites.

Arnaud Bouchez · 18:01 UTC · voir le commit sur GitHub →

19 Faible Les régressions numériques distinguent désormais FP80 de binary64 TTestCoreBase.NumericalConversions est réorganisé et enrichi de contrôles bit à bit propres aux backends pour TSynExtended, les variants JSON, Currency et les longues entrées décimales. Tests 4fb42e12+110-66

tests: enhanced TTestCoreBase.NumericalConversions

Impact

Aucun changement d’API applicative ; les différences de précision propres aux backends sont maintenant testées explicitement au lieu de partager les attentes binary64.

Arnaud Bouchez · 13:27 UTC · voir le commit sur GitHub →

20 Faible Les tests de conversion numérique ajoutent des cas d’arrondi et de limites signées TTestCoreBase.NumericalConversions ajoute des vérifications bit à bit pour l’arrondi décimal, les valeurs négatives et les entrées limites après le merge du parseur. Tests 81fff99f+17-5

tests: some tests

Impact

Aucun changement de code applicatif ni d’API publique ; la suite élargie rend visibles les régressions du parseur selon les compilateurs.

Arnaud Bouchez · 06:28 UTC · voir le commit sur GitHub →

21 Faible Les limites kernel-vers-nom macOS reçoivent des tests directs TTestCoreBase teste MacKernel autour des bornes basses, de Darwin 24–25, du slot 26 absent et des valeurs futures. Tests 870336b8+16-2

test: cover OSX kernel number to Apple Corp marketing "logic"

Impact

Aucun changement de code applicatif ; les tests révèlent que la logique initiale d’offset mappe mal les nouvelles versions Darwin.

Arnaud Bouchez · 18:03 UTC · voir le commit sur GitHub →

Activité upstream commits par jour · 60 derniers jours
Commits977
Jours actifs44/60
Plus chargé2026-09-30
Pic60
2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 26 commits2026-08-28: 11 commits2026-08-29: 10 commits2026-08-30: 1 commit2026-08-31: 23 commits2026-09-01: 0 commits2026-09-02: 20 commits2026-09-03: 29 commits2026-09-04: 35 commits2026-09-05: 13 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 23 commits2026-09-09: 10 commits2026-09-10: 17 commits2026-09-11: 23 commits2026-09-12: 14 commits2026-09-13: 9 commits2026-09-14: 7 commits2026-09-15: 4 commits2026-09-16: 24 commits2026-09-17: 26 commits2026-09-18: 21 commits2026-09-19: 59 commits2026-09-20: 13 commits2026-09-21: 5 commits2026-09-22: 34 commits2026-09-23: 17 commits2026-09-24: 57 commits2026-09-25: 22 commits2026-09-26: 26 commits2026-09-27: 0 commits2026-09-28: 2 commits2026-09-29: 19 commits2026-09-30: 60 commits2026-10-01: 26 commits2026-10-02: 30 commits2026-10-03: 32 commits2026-10-04: 15 commits2026-10-05: 1 commit2026-10-06: 26 commits2026-10-07: 37 commits2026-10-08: 27 commits2026-10-09: 35 commits2026-10-10: 33 commits2026-10-11: 9 commits2026-10-12: 11 commits2026-10-13: 35 commits
2026-08-152026-10-13