Publish the LinxISA 0.57 golden manual - #21
Conversation
Convert one-level, two-level, and microbenchmark kernels to named v0.57 block forms, remove legacy runtime/linker shims, and add freestanding support for the current toolchain. Constraint: This repository must publish on the dedicated feature_0.57 branch requested for benchmark integration.\nRejected: Preserve v0.56 compatibility headers | the benchmark should detect obsolete instruction spellings.\nConfidence: high\nScope-risk: broad\nDirective: Use named TLOAD/TSTORE/TEPL/CUBE blocks and the superproject v0.57 compiler/sysroot.\nTested: representative hashtable compile and disassembly contains TLOAD, TSTORE, TSEL, and TCMP; diff validation.\nNot-tested: Complete all-kernel hardware execution matrix.
Make the one-level four-PE programming model, exact intrinsic allowlist, and source-backed benchmark catalog the deployable project documentation. Add reproducible generation and verification so GitHub Pages cannot publish stale links or unsupported programming surfaces. Constraint: Shared tile-register lowering is an architecture contract and is not yet required from the compiler Rejected: Publish the legacy mixed-architecture catalog | it conflicts with the one-level website contract Confidence: high Scope-risk: broad Directive: Regenerate and run scripts/verify_golden_manual.py whenever intrinsic or benchmark manifests change Tested: 53 make dry-runs; four Linx documentation compile probes; strict MkDocs build; link verifier; Python and JavaScript syntax; independent review Not-tested: Shared tile-register compiler lowering and linked QEMU runtime execution
Tell setup-python which nonstandard requirements file keys the pip cache so the documentation workflow can initialize on clean runners. Constraint: Documentation dependencies live in requirements-docs.txt Confidence: high Scope-risk: narrow Tested: YAML parse and cache-dependency-path assertion Not-tested: GitHub-hosted runner until the pushed PR check reruns
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 65b32fa803
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| $(TARGET): clean $(LINK_SCRIPT) $(COMM_OBJ) $(FREESTANDING_RUNTIME_OBJ) $(OBJ) $(EXTRA_OBJ_FILES) | ||
| @mkdir -p $(shell dirname $@) | ||
| $(LINK) $(CC_LINK) $(OBJ) $(COMM_OBJ) $(EXTRA_OBJ_FILES) -o $@ | ||
| $(LINK) $(CC_LINK) $(OBJ) $(COMM_OBJ) $(FREESTANDING_RUNTIME_OBJ) $(EXTRA_OBJ_FILES) -o $@ |
There was a problem hiding this comment.
Gate freestanding runtime for baremetal links
When baremetal=on, COMM_OBJ is no longer cleared and already contains every common/src/*.c object, including the newly added freestanding_runtime.o; this link line appends $(FREESTANDING_RUNTIME_OBJ) a second time. Any one-level baremetal build therefore invokes the linker with the same object twice, which defines memset/memcpy/memmove twice and fails at link time; keep this extra runtime object only for the hosted/non-baremetal path or exclude it from COMM_OBJ.
Useful? React with 👍 / 👎.
| @@ -0,0 +1,30 @@ | |||
| #include "common/pto_tile.hpp" | |||
There was a problem hiding this comment.
Add a rule before wildcarding the new common C++ file
Placing this new .cpp under test/common/src makes it part of COMM_OBJ, but Makefile.common only has build rules for common .c and .s files. In any two-level baremetal=on build, make stops before compilation with No rule to make target .../common/src/v057_tma_compile.o; either add a common/src%.cpp pattern rule or move this probe out of the wildcarded runtime directory.
Useful? React with 👍 / 👎.
| $(TARGET): clean $(LINK_SCRIPT) $(COMM_OBJ) $(FREESTANDING_RUNTIME_OBJ) $(OBJ) $(EXTRA_OBJ_FILES) | ||
| @mkdir -p $(shell dirname $@) | ||
| $(LINK) $(CC_LINK) $(OBJ) $(COMM_OBJ) $(EXTRA_OBJ_FILES) -o $@ | ||
| $(LINK) $(CC_LINK) $(OBJ) $(COMM_OBJ) $(FREESTANDING_RUNTIME_OBJ) $(EXTRA_OBJ_FILES) -o $@ |
There was a problem hiding this comment.
Gate freestanding runtime for baremetal links
The two-level baremetal path has the same duplication as the one-level Makefile: when baremetal=on, COMM_OBJ already expands the new freestanding_runtime.c, and this link command adds $(FREESTANDING_RUNTIME_OBJ) again. After the common C++ object issue is fixed, baremetal links will still fail with duplicate runtime symbols unless this extra object is limited to the non-baremetal path or removed from COMM_OBJ.
Useful? React with 👍 / 👎.
Summary
Validation
make -nmkdocs build --strict --cleanpython3 scripts/verify_golden_manual.py --site siteKnown boundary
Shared tile-register lowering is an architecture-level contract and is not yet required from the current compiler. Linked QEMU runtime execution was not part of this documentation publication gate.