Compute extension implications and mark derived extensions with parentheses - #22
Merged
Merged
Conversation
/proc/cpuinfo はカーネルが列挙した拡張しか報告しないため、M はあるのに Zmmul が出ない、Zba/Zbb/Zbs は揃っているのに B が出ない、といった実際に は存在する拡張が「無い」ものとして扱われていた。 riscfetch-core に implications モジュールを追加し、以下の2方向の関係を ワークリスト方式(while changed)で推移閉包まで解決する: - implication(順方向): M→Zmmul, D→F, F→Zicsr, A→Zalrsc+Zaamo, C→Zca, V→Zve64d→...→Zve32x(ISA manualの最小要件によりD/F/Zicsrまで波及)、 Zfh→Zfhmin、Zvfh→Zvfhmin+Zfhmin、Zdinx→Zfinx、Zvl*の連鎖など - composition(逆方向・略記拡張の構成要素が揃ったら本体も有りとする): Zba+Zbb+Zbs→B、Zaamo+Zalrsc→A、Zkn+Zkr+Zkt→Zk、Zkn/Zks/Zvkn/Zvks/Zce 出典は LLVM mainline の llvm/lib/Target/RISCV/RISCVFeatures.td の Implies フィールド(2026-09-17時点、WebFetchで確認)。rv32/rv64で条件が 変わるものなど裏を取れないものは入れていない。 ExtensionInfo/ExtensionEntry に derived: bool を追加(加算的変更)。 supported の意味は変えず、直接報告されたものは false、含意/合成で導出 したものは true になる。 (#10)
デフォルト表示(--explain 併用時も含む)で、ISA 文字列に直接現れない が含意/合成で導出された拡張を括弧付きで表示する: Ext: I M A F D C V (B) Z-Multiply: (Zmmul) 既存の表示順・カテゴリ分類の中にそのまま混ぜ、別セクションは作らない。 色は括弧付きのものを dim にするが、判別の主手段はあくまで括弧そのもの とし、色だけに依存しない。 --all モードのチェックマーク表示は今回のスコープ外(カーネル報告の有無 のみを表し続ける)。 (#10)
括弧付き表示(導出された拡張)の意味を、日英中3言語の README、 riscfetch-core/SPEC.md(含意・合成テーブルの出典と derived フィールド の仕様)、riscfetch-cli/SPEC.md(表示例・--json 例・--help 例)、実際の --help 出力(long_about)に明記する。 (#10)
riscfetch-core 2.3.0 → 2.4.0、riscfetch (CLI) 2.4.0 → 2.5.0、ワークスペー ス version も 2.5.0 に統一。CLI から core への依存バージョン指定も追従。 CHANGELOG.md に [2.5.0] セクションを追加。 (#10)
Owner
Author
|
Hardware A/B check with the CI artifact from this PR, against the installed v2.4.0 on the same boards. Orange Pi RV2 (SpacemiT K1) — the exact case from the issue: MangoPi MQ-Pro (Allwinner D1, plain Nothing that the kernel did report changed, and everything newly shown is parenthesised. |
ExtensionEntry/ExtensionInfo への derived: bool 追加は、全フィールド公開・ #[non_exhaustive] なしの公開構造体にとって Rust API の破壊的変更(構造体 リテラルでの生成が壊れる)。JSON 消費者にとって加算的であることとは別の 話なので、riscfetch-core を 2.4.0 -> 3.0.0 に、riscfetch-cli の依存も追従 させる(cli 自身と workspace は機能追加のみなので 2.5.0 のまま)。 SPEC.md の Derived Extensions 節も、JSON 出力(加算的)と Rust API(破壊的) を区別する記述に訂正する(issue #10)。
LLVM RISCVFeatures.td の FeatureStdExtZihpm は Implies=[FeatureStdExtZicsr] なので IMPLICATIONS に追加(zihpm を明示するが zicsr を明示しない ISA 文字列のテストも追加)。Zkr は Implies を持たないため追加しない。 COMPOSITIONS の A の行には、A は ISA manual 上 Zaamo+Zalrsc の合成として 定義され、LLVM の独立ビットマスクは hwprobe 用の識別子であって独自の挙動 ではない旨のコメントを添える。 --explain の括弧付き派生ラベルは実際の最長ラベル(Sscounterenw 等 12 文字、 派生の (Zvl16384b) 等 11 文字)に対して幅指定が 10 文字で不足していたため 12 文字に広げる(#10)。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
closes #10
背景
/proc/cpuinfoはカーネルが列挙した拡張しか報告しない。riscfetch はそれをそのまま表示していたため、Zba/Zbb/Zbsが揃っているのにBが出ない、MがあるのにZmmulが出ない、といった実際には利用可能な拡張を「無い」ものとして表示してしまっていた(外部ユーザーからの報告)。設計
riscfetch-coreに新しいimplicationsモジュールを追加し、2種類の関係を1つの仕組みで解決する:Xがあれば依存先も有る。M→Zmmul、D→F、F→Zicsr、A→Zalrsc+Zaamo、C→Zca、V→Zve64d→…→Zve32x(ISA manual の最小要件によりD/F/Zicsrまで波及)、Zfh→Zfhmin、Zvfh→Zvfhmin+Zfhmin、Zdinx→Zfinx、Zvl*の連鎖 などZba+Zbb+Zbs→B、Zaamo+Zalrsc→A、Zkn+Zkr+Zkt→Zk、Zkn/Zks/Zvkn/Zvks/Zce両方向とも
while changedのワークリスト方式で推移閉包まで解決するので、V→Zve32xのような多段の連鎖もカバーし、循環があっても停止する。出典
IMPLICATIONS/COMPOSITIONSテーブルは LLVM mainline のllvm/lib/Target/RISCV/RISCVFeatures.tdの各RISCVExtension定義のImpliesフィールド(2026-09-17 時点、WebFetch で確認)から取った。裏が取れないもの、rv32/rv64 条件付きで安全に表現できないもの(例:Zcfは rv32 限定)は入れていない。誤検出より欠落を選んでいる。各行にコメントで元のFeatureStdExt*定義を付記している。表示(括弧記法)
カーネルが実際に報告した拡張はそのまま表示し、含意/合成で導出した拡張は丸括弧付きで表示する:
既存の表示順・カテゴリ分類にそのまま混ぜ、別セクションは作っていない。括弧付きのものは dim 色にしているが、判別の主手段は色ではなく括弧そのもの。
--explainモードでも同様。--allモード(チェックマーク表示)は今回スコープ外とし、SPEC.md にその旨明記した。derived フィールド
ExtensionInfo/ExtensionEntryにderived: boolを追加(加算的変更、supportedの意味は変えない)。--json(デフォルト・collect_riscv_info/collect_all_info経由)のextensions/z_extensions/s_extensionsにも同じderivedフィールドが additive に付く。ドキュメント
README(en/ja/zh-CN)、
riscfetch-core/SPEC.md(含意・合成テーブルの出典とderivedフィールド仕様の節を新設)、riscfetch-cli/SPEC.md(表示例・--json例・--help例)、実際の--help(long_about)に括弧記法の意味を明記した。版数
riscfetch-core2.3.0 → 3.0.0(セルフレビュー後に修正:ExtensionEntry/ExtensionInfoは全フィールド公開・#[non_exhaustive]なしの公開構造体なので、必須フィールドderived: boolの追加は JSON 消費者には加算的でも Rust API 利用者には破壊的変更にあたるため major を上げた)。riscfetch(CLI) 2.4.0 → 2.5.0、ワークスペース version も 2.5.0(CLI 自身はバイナリで機能追加のみなので minor のまま)。CLI → core の依存バージョン指定も 3.0.0 に追従。Cargo.lock更新済み。CHANGELOG.mdに[2.5.0]セクション追加(core が 3.0.0 になった理由も明記)。テスト
cargo test --workspaceで全 107 件成功(既存 91 件 + 新規 16 件、うち実機 ISA 文字列の回帰テスト、およびZihpm→Zicsr含意追加分を含む)。cargo fmt --all --check/cargo clippy --all-targets -- -D warningsも警告ゼロ。実機相当の検証として、スクラッチの example バイナリで下記2つの実 ISA 文字列を
get_extensions_with_derived/parse_z_extensions_with_category_and_derivedに通し、期待通りの derived 拡張が出ることを確認した(テスト完了後 example は削除済み):Ext (all): I M A F D C (B) V— derived std:["B"]、derived Z:["Zbkc", "Zaamo", "Zalrsc", "Zmmul", "Zvl32b", "Zvl64b", "Zvl128b"]rv64imafdc): derived Z:["Zicsr", "Zca", "Zaamo", "Zalrsc", "Zmmul"]レビュー対応(追加コミット)
riscfetch-coreの semver を上記の通り 3.0.0 に訂正、SPEC.md の「既存コンシューマは影響を受けない」という記述を JSON/Rust API で区別する記述に訂正RISCVFeatures.tdのFeatureStdExtZihpm(Implies=[FeatureStdExtZicsr])に対応するZihpm→ZicsrをIMPLICATIONSに追加(ZkrはImpliesを持たないため対象外)COMPOSITIONSのAに、A は ISA manual 上 Zaamo+Zalrsc の合成として定義され LLVM の独立ビットマスクは hwprobe 用の識別子であって独自の挙動ではない旨のコメントを追加--explainの派生ラベル幅を、実際の最長ラベル(Sscounterenw等 12 文字)に合わせて 10→12 に拡張迷った点
--all)の--jsonが使うExtensionEntry構造体は Issue 本文で名指しされていなかったが、ExtensionInfoだけにderivedを足すと terminal 表示は直っても同じデータを使う default JSON だけ直らず一貫性が壊れるため、ExtensionEntryにも additive にderived: boolを追加した。--all --json(get_all_*_with_statusベース)は「全拡張を supported true/false で列挙する」既存の別モードで、Issue の設計にも記載がなかったため、今回は意図的にスコープ外にした(supportedの意味を変えない、チェックマーク表示も変えない)。SPEC.md にその旨明記済み。🤖 Generated with Claude Code
https://claude.ai/code/session_01EDEpX7TmuaahkgX3CZ3C1z