Skip to content

خلفيّة سياديّة: ربط المحرّك بجداول SoT (table-driven) — توليد ترميز x86-64 من YAML - #321

Merged
SalehKadah merged 2 commits into
devfrom
feat/native-backend-yaml-tables
Jul 30, 2026
Merged

خلفيّة سياديّة: ربط المحرّك بجداول SoT (table-driven) — توليد ترميز x86-64 من YAML#321
SalehKadah merged 2 commits into
devfrom
feat/native-backend-yaml-tables

Conversation

@SalehKadah

Copy link
Copy Markdown
Collaborator

الغرض

تحقيقُ مبدأ «table-driven» (جوهر RFC rfcs #57، بعد م١ #320): مواصفاتُ الترميز (EncSpec) لم تعُد مضمَّنةً في المحرّك، بل تُولَّد من language-truth/backend/x86_64/instructions.yaml (مصدر الحقيقة) إلى هيدر C++ يقرؤه المحرّك بـlookupEncSpec. فيصير x86_variable_encoder.h منطقًا صرفًا، والاختلافُ بين التعليمات بياناتٌ لا كود.

المُضاف

الملفّ الدور
scripts/codegen/gen_backend_encoding.py مولّدٌ يقرأ instructions.yaml (+تحقّق مخطّط) ويُخرج جدول EncSpec (lambda IIFE، C++17) + lookupEncSpec
.../native/generated/x86_64_encoding_generated.h الهيدر المولَّد (٦ صيغ)؛ مُلتزَمٌ في git (نمط go generate)
x.py نطاق codegen backend_encoding_x86_64gen --check حارسُ انجرافٍ (بوّابة «فحص توليد الكود»)
instructions.yaml أُضيفت صيغة mov r32, imm32 (مسار خروج ٤٢)
x86_variable_encoder.h أُزيلت الدوالّ المصنّعة المضمَّنة (بقي encodeVariable)
test_native_backend_m1.cpp يستعمل lookupEncSpec بمنمنمة عربيّة + صيغة

التحقّق

  • ١٠/١٠ PASS — الآن مقودةً بالجدول المولَّد من SoT (المنمنمة العربيّة + الصيغة → lookupEncSpecencodeVariable).
  • البرهان الحيّ قائم: الثنائيّ (المولَّد ترميزُه من YAML) خرج بـ٤٢ على WSL2.
  • حارس الانجراف أخضر: python x.py gen --check — الهيدر المُلتزَم يطابق ما يولّده الـYAML بايتًا ببايت.
  • المخطّط يمرّ: TestBackendTables 16/16 (بعد إضافة mov r32,imm32).
  • أميليا CLEAR: توليدٌ مطابقٌ للـYAML صفًّا بصفّ، بايتات م١ محفوظة، مُخرَجٌ قطعيّ، آمنٌ ضدّ nullptr (ASSERT_TRUE)، + تحصينُ modrm بلا reg/rm.

الأثر

المحرّكُ صار مقودًا بمصدر الحقيقة فعليًّا: إضافةُ تعليمةٍ = صفٌّ في YAML، لا كودُ C++. هذا يمهّد لتوليد جداول ARM64/RISC-V بنفس المولّد، وللكتابة بلغة ص لاحقًا.

🤖 Generated with Claude Code

…86-64 من YAML

تحقيقُ مبدأ «table-driven» في RFC الخلفيّة السياديّة (rfcs #57): مواصفاتُ الترميز
(EncSpec) لم تعُد مضمَّنةً في المحرّك، بل تُولَّد من language-truth/backend/x86_64/
instructions.yaml (مصدر الحقيقة) إلى هيدر C++ يقرؤه المحرّك بـlookupEncSpec. فيصير
x86_variable_encoder.h منطقًا صرفًا، والاختلافُ بين التعليمات بياناتٌ لا كود.

المُضاف:
• scripts/codegen/gen_backend_encoding.py: مولّدٌ يقرأ instructions.yaml (+تحقّق مخطّط)
  ويُخرج جدول EncSpec عبر lambda IIFE (C++17، لا designated inits) + lookupEncSpec.
• compiler/include/backend/native/generated/x86_64_encoding_generated.h: الهيدر المولَّد
  (٦ صيغ)؛ مُلتزَمٌ في git (نمط go generate).
• x.py: نطاق codegen backend_encoding_x86_64 ⇒ `gen --check` حارسُ انجرافٍ يفشل إن انحرف
  المولَّد عن الـYAML (بوّابة CI «فحص توليد الكود»).
• language-truth/backend/x86_64/instructions.yaml: أُضيفت صيغة mov r32,imm32 (خروج ٤٢).
• x86_variable_encoder.h: أُزيلت الدوالّ المصنّعة المضمَّنة (بقي المنطق encodeVariable).
• test_native_backend_m1.cpp: يستعمل lookupEncSpec بمنمنمة عربيّة + صيغة (يُثبت قراءة
  البيانات من SoT).

التحقّق: ١٠/١٠ PASS (مقودةً بالجدول المولَّد) + البرهان الحيّ (خروج ٤٢ على WSL2) قائم +
gen --check أخضر (لا انجراف) + المخطّط يمرّ (16/16). أميليا CLEAR (توليد مطابق صفًّا بصفّ،
بايتات م١ محفوظة، قطعيّ، آمن ضدّ nullptr، + تحصين modrm بلا reg/rm).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

📚 تذكير مزامنة دليل المطوّرين

هذا الـPR يلمس مصادر موثَّقة في دليل المطوّرين. راجع الفصول الآتية وحدّثها إن تغيّر سلوكها، ثم ثبّت البصمات هناك (python scripts/check_sync.py --update):

بندٌ في معيار الإنجاز. تذكيرٌ آليّ — لا يحجب الدمج.

test_domain_table_covers_exactly_the_expected_files يقارن مجموعةَ ملفّات
النطاقات المُغطّاة بالمتوقَّعة حرفيًّا. أُضيف نطاق backend_encoding_x86_64
إلى x.py دون إضافة مخرَجه إلى EXPECTED_OUTPUTS، فاختلّت المجموعتان.
أُضيف الهيدر المولَّد x86_64_encoding_generated.h إلى القائمة المتوقَّعة.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@SalehKadah
SalehKadah merged commit 1f25bd0 into dev Jul 30, 2026
17 checks passed
@SalehKadah
SalehKadah deleted the feat/native-backend-yaml-tables branch July 30, 2026 12:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant