From everything-riscv
扫描 x86/ARM 代码库并迁移到 RISC-V(含 RVV),实现「扫描→迁移→知识库→验证→(汇编热点)llvm-mca 分析与迭代优化」一体化闭环,也支持各步单独使用。迁移过程中遇到指令/扩展/内建函数/约束必须主动查知识库拿证据;需要验证时由技能自动准备并加载 RISC-V 工具链与 QEMU;验证通过后对手写/RVV 汇编或 intrinsic 热点可用 llvm-mca 做静态性能分析并回归验证(细则见 referens/code_migrate.md)。
How this skill is triggered — by the user, by Claude, or both
Slash command
/everything-riscv:riscv-migrateThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
面向 **x86 或 ARM** 工程:先做 **工程扫描**(产出 `scan_result.json`),再按条目做 **迁移点迁移**。不确定的指令或扩展用 **RISC-V-DOC-RAG MCP 知识库服务** 查文档(对应工具如 `search_core_isa_manuals` / `search_rvv_vector_extensions` 等),不要猜。
README.mdreferens/code_migrate.mdreferens/project_scan.mdresources/arm_toolchain_env.shresources/lib.shresources/llvm_mca_env.shresources/python_venv.shresources/qemu_static_env.shresources/riscv_toolchain_env.shresources/x86_toolchain_env.shscripts/__pycache__/langfuse_hook.cpython-312.pycscripts/__pycache__/query.cpython-312.pycscripts/langfuse_hook.pyscripts/prepare_verify_env.shscripts/query.pyscripts/requirements-mcp.txtscripts/requirements.txtscripts/run_query.shscripts/run_scan.sh面向 x86 或 ARM 工程:先做 工程扫描(产出 scan_result.json),再按条目做 迁移点迁移。不确定的指令或扩展用 RISC-V-DOC-RAG MCP 知识库服务 查文档(对应工具如 search_core_isa_manuals / search_rvv_vector_extensions 等),不要猜。
Zba/V/Zvbb)、intrinsic(如 __riscv_*)、ABI/CSR/特权字段(如 mstatus),必须主动查询再下结论,并在输出里保留证据链字段(file_path/header_path 或等价信息)。scripts/run_scan.sh / scripts/run_query.sh;不要要求用户创建/激活 venv。scan_result.json、riscv_scan、或「扫描待迁移点」。vadd.vv、clmul、vclmul、Zbc/Zvbc 等)。scan_result.json,用于盘点迁移点。llvm-mca 做静态吞吐/瓶颈分析,给出优化建议与回归验证指导(详见阶段 E)。<project_root>/scan_result.json。scan_result.json 已存在:视为扫描已完成,不要再跑扫描脚本,直接读该文件进入阶段 B(除非用户明确要求重新扫描——此时先备份或删除该文件再扫描)。<skill_root>/scripts/run_scan.sh <project_root> -o <project_root>/scan_result.jsonpython3 -m pip install -r <skill_root>/scripts/requirements.txt && python3 <skill_root>/scripts/riscv_scan <project_root> -o <project_root>/scan_result.jsonscripts/requirements.txt 中的依赖;必要时在技能目录重装依赖或换用满足版本要求的 Python。scan_result.json,再进入阶段 B。进度自检:scan_result.json 存在且可读,suggestion_class / missing_class 覆盖当前要处理的迁移范围。
suggestion_class / missing_class 中的条目)对 单个文件或单条条目,严格按顺序执行(细节与编码/编译/测试/llvm-mca 见 referens/code_migrate.md):
*_riscv 后缀的汇编或 intrinsic 实现,保持算法与语义一致;向量源必须用 RVV(汇编或 intrinsic,RVV 1.0),不得把汇编问题退化成纯 C 替代。
qemu-riscv64 -cpu max);不一致则迭代修复 RISC-V 侧逻辑直至一致。llvm-mca 做静态吞吐/瓶颈分析;基于结论做一次或多次小步优化,每轮优化后都必须回到阶段 D 复测并保持输出一致。进度自检:测试通过、对比一致、构建与命名约定满足 referens/code_migrate.md;完成阶段 E 的 llvm-mca 分析并通过回归验证。
当用户问“某指令对应什么 / 是否保留 / 属于哪个扩展 / SEW 限制 / intrinsic 对应的汇编 / profile 约束”等,按如下方式查询并引用输出(不要猜):
search_core_isa_manuals:核心 ISA/汇编/Profile(合并知识库,Milvus spec=core-isa-manuals)
riscv/riscv-isa-manual、riscv-non-isa/riscv-asm-manual、riscv/riscv-profilessearch_rvv_vector_extensions:RVV/向量相关扩展与 vector crypto(合并知识库,Milvus spec=rvv-vector-extensions)
riscv-non-isa/riscv-rvv-intrinsic-doc、riscv/integer-vector-absolute-difference、riscv/riscv-cryptosearch_special_instructions:真正的指令扩展(合并知识库,Milvus spec=special-instructions)
riscv-zabha、riscv-zalasr、riscv-zaamo-zalrsc、riscv-bitmanip、riscv-bfloat16search_docs_tools:工具/指南/性能与优化(合并知识库,Milvus spec=docs-tools)
riscv-performance-events、riscv-optimization-guide<skill_root>/scripts/run_query.sh --list-tools<skill_root>/scripts/run_query.sh -t search_core_isa_manuals -q "mstatus MPP"<skill_root>/scripts/run_query.sh -t search_rvv_vector_extensions -q "__riscv_vsetvl"<skill_root>/scripts/run_query.sh -t search_special_instructions -q "Zba 有哪些指令"<skill_root>/scripts/run_query.sh -t search_docs_tools -q "performance events"file_path 与 header_path(或等价的标题路径信息),作为证据链。file_path/header_path 等),不是运行过程的虚拟环境。若查询失败,优先让问题更具体并重试查询;不要让用户先去“建 venv/装一堆东西”。当用户提出“验证/对比/用 QEMU 跑”时,或迁移阶段完成一轮实质改动后(默认策略要求你主动触发):
<skill_root>/scripts/prepare_verify_env.shqemu-* 从 skill 的 source 资源(<skill_root>/resources/)中部署/解包并加载(已存在则复用),不进行联网下载,也不要求用户手动 source。qemu-riscv64 -cpu max ... 做输出对比。手写/RVV 汇编或 intrinsic 热点,且阶段 D 已通过时执行。详细步骤见 referens/code_migrate.md 的 「第四步(阶段 E)」 一节。
# 1. 准备 llvm-mca(若尚未安装)
bash <skill_root>/resources/llvm_mca_env.sh && source <skill_root>/resources/env.sh
# 2. 快速分析热点汇编(注意:-mcpu 不能用 generic,须选具体型号)
llvm-mca -mtriple=riscv64 -mcpu=zhufeng2 -mattr=+v,+zvbc --all-stats < hot.s
# 3. 深度分析(含瓶颈分析)
llvm-mca -mtriple=riscv64 -mcpu=zhufeng2 -mattr=+v,+zvbc \
--bottleneck-analysis --all-views --timeline --iterations=100 < hot.s
-mcpu 必须指定有调度模型的具体 CPU;generic / generic-rv64 在 RISC-V 上会导致报错。选择优先级:用户 prompt 中明确指定 > zhufeng2(默认) > 目标部署芯片匹配 > sifive-p450(乱序通用基线)/ sifive-u74(顺序通用基线)。详见 referens/code_migrate.md。-mattr 须与工程 -march 一致:用到 Zvbc 就要加 +zvbc,用到 V 扩展就加 +v。// 或 #:LLVM MC 不支持 .text 段内的 /* */ 行尾注释。| 文件 | 内容 |
|---|---|
| referens/project_scan.md | scan_result.json 格式、riscv_scan 行为、扫描项类型 |
| referens/code_migrate.md | 迁移三步、编译/测试/工具链约定、阶段 E(llvm-mca) 详述 |
scripts/riscv_scan:扫描引擎入口(输出 scan_result.json,schema 见 referens/project_scan.md)。scripts/query.py:通过 RISC-V-DOC-RAG MCP 知识库服务查询 ISA/Intrinsic 手册(输出包含 file_path/header_path)。scripts/run_scan.sh:扫描入口(自动安装依赖)。scripts/run_query.sh:查询入口(自动安装依赖)。scripts/prepare_verify_env.sh:准备验证环境(从 resources/ 部署/配置 RISC-V 工具链与 QEMU user-static,尽量不联网下载)。resources/llvm_mca_env.sh:本机无 llvm-mca 时拉取并解压 llvm-mca 工具包,写入 PATH/env.d;阶段 E 性能分析前按需执行。Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub bonn12138/riscv-everything --plugin everything-riscv