AAPGはRISC-V向けのランダムパタンジェネレータだ。Pythonで記述されており簡単にインストールできる。
pip3 install aapg
以下のコマンドでセットアップできる。
$ aapg setup [INFO] - root : aapg started [INFO] - root : (2.2.6) Automated Assembly Program Generator - aapg [INFO] - root : Command received: setup [INFO] - aapg.env.env_setup : Build setup started [INFO] - root : Setup directory built in /home/msyksphinz/work/riscv/msrh/msrh_master/tests/aapg/work
work/config.yaml
を眺めていく。
priv-mode: mode: m
これはMモードのみを使用するということかな?
isa-instruction-distribution: rel_sys: 0 rel_sys.csr: 0 rel_rv32i.ctrl: 0 rel_rv32i.compute: 1 rel_rv32i.data: 0 rel_rv32i.fence: 0 rel_rv64i.compute: 0 rel_rv64i.data: 0 rel_rv32m: 0 rel_rv64m: 0 rel_rv32a: 0 rel_rv64a: 0 rel_rv32f: 0 rel_rv64f: 0 rel_rv32d: 0 rel_rv64d: 0
rv32の算術演算命令しか使わないということ?
rel_rvc.ctrl: 0 rel_rvc.compute: 0 rel_rvc.sp: 0 rel_rvc.data: 0 rel_rvc.fdata: 0 rel_rv32c.compute: 0 rel_rv32c.ctrl: 0 rel_rv32c.fdata: 0 rel_rv64c.compute: 0 rel_rv64c.data: 0
Compressed命令は使わないということ?
float-rounding: rne: 10 rtz: 10 rdn: 10 rup: 10 rmm: 10
浮動小数点の丸めモードの指定?
branch-control: backward-probability: 0.5 block-size: 7
分岐命令の制御、ブラックサイズのコントロール?
とりあえずここから先はあまり関係なさそうなので、命令を生成してみようじゃないか。
aapg gen
work/asm/out_config_00000.S
が生成された。
aapg gen [INFO] - root : aapg started [INFO] - root : (2.2.6) Automated Assembly Program Generator - aapg [INFO] - root : Command received: gen [INFO] - root : Number of programs to generate: 1 [INFO] - root : Linker script generation started [INFO] - aapg.gen_random_program : work/./config.yaml [INFO] - aapg.gen_random_program : Creating a config file as : work/config.ini [INFO] - aapg.gen_random_program : work/config.ini [INFO] - aapg.gen_random_program : /home/msyksphinz/work/riscv/msrh/msrh_master/tests/aapg/work/config.ini [INFO] - aapg.gen_random_program : Setting up the Makefile [INFO] - root : Linker script generation completed [INFO] - root : Program number: 0 started [INFO] - aapg.gen_random_program : Command [GEN] invoked. Random program generation started [INFO] - aapg.gen_random_program : Config file path: work/config.ini [INFO] - aapg.gen_random_program : Config filename: config.ini [INFO] - aapg.gen_random_program : Output directory selected: /home/msyksphinz/work/riscv/msrh/msrh_master/tests/aapg/work/asm [WARNING] - aapg.gen_random_program : Output directory exists [INFO] - aapg.gen_random_program : Output file path: /home/msyksphinz/work/riscv/msrh/msrh_master/tests/aapg/work/asm/out_config_00000.S [INFO] - aapg.program_generator : Adding pre-program macro [INFO] - aapg.program_generator : Creating Prelude [INFO] - aapg.program_generator : User functions received user-functions i_cache_thrash [INFO] - aapg.gen_random_program : Program generation completed
分岐命令は出ないんだね。そして全命令にラベルが付いてるってことか。
ちなみに1000本ランダムテストを生成するためには以下のようにする。
aapg gen --num_programs 1000