RISC-Vの拡張性
RISC-Vの
RISC-Vは組み込みからハイパフォーマンスコンピューティングに至るまで,
基本整数命令と標準拡張は,
I: 基本整数命令
E: レジスタの数を減らしたIのサブセット
M: 整数の乗算除算命令
A: アトミック命令
F: 単精度の浮動小数点演算命令
D: 倍精度の浮動小数点演算命令
Q: 四倍精度の浮動小数点演算命令
L: 十進の浮動小数点演算命令(未定義)
C: 圧縮命令
B: ビット演算命令(未定義)
J: JavaのようなDynamic Translation用命令(未定義)
T: トランザクショナルメモリー用命令(未定義)
P: Packed-SIMD命令
V: ベクタ命令
N: ユーザーレベル割り込み
IMAFDQC以外は
たとえば
今回作ったツールチェインは,rv64imafdc
」
$ riscv64-unknown-elf-gcc -v Using built-in specs. COLLECT_GCC=riscv64-unknown-elf-gcc COLLECT_LTO_WRAPPER=/home/ubuntu/riscv/libexec/gcc/riscv64-unknown-elf/7.2.0/lto-wrapper Target: riscv64-unknown-elf Configured with: /home/ubuntu/riscv-tools/riscv-gnu-toolchain/build/../riscv-gcc/configure --target=riscv64-unknown-elf --prefix=/home/ubuntu/riscv --disable-shared --disable-threads --enable-languages=c,c++ --with-system-zlib --enable-tls --with-newlib --with-sysroot=/home/ubuntu/riscv/riscv64-unknown-elf --with-native-system-header-dir=/include --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libgomp --disable-nls --src=../../riscv-gcc --enable-checking=yes --disable-multilib --with-abi=lp64d --with-arch=rv64imafdc 'CFLAGS_FOR_TARGET=-Os -mcmodel=medlow' Thread model: single gcc version 7.2.0 (GCC)
「C」
命令長は
前述の2つのaddi
を比べてみましょう。
16bit幅の加算命令(s0 = sp + 16): 0x00000000000101a0 <+6>: 00 08 addi s0,sp,16 32bit幅の加算命令(a0 = a5 - 40): 0x00000000000101a4 <+10>: 13 85 87 fd addi a0,a5,-40 # 0x11fd8
RISC-Vの標準ではリトルエンディアンなので,
- 16bitのaddi:0x0800 = 0000 1000 0000 0000
- 32bitのaddi:0xfd878513 = 1111 1101 1000 0111 1000 0101 0001 0011
太字で表示している最下位2ビットを比べてみると,
さらにISA仕様書を見れば他のビットの意味も確認できます。たとえば
16bitのaddi:0x0800
FNC [RD]OP
C.ADDI4SPN 0000 1000 0000 0000
^ ^^^^ ^^^
Non-Zero IMM[5:4|9:6|2|3]
OP = 00
FNC = 000
RD = 000
IMM = 0000010000 = 0x10
OP/
IMMは
RDは
まとめるとdisassembleした結果どおり
32bit版のaddiも同様にパースできます。
32bitのaddi:0xfd878513 [IMM ] [RS1 ]FNC [RD ][OP ] ADDI 1111 1101 1000 0111 1000 0101 0001 0011 OP = 0010011 FNC = 000 RD = 01010 = 10 RS1 = 01111 = 15 IMM = 1111 1101 1000 => 1111 1111 1101 1000 = -0x28 = -40
ADDI命令は符号拡張したIMMをRS1で指定されたレジスタに足して,
IMMは下位12ビットしか記録されていないので32ビット値
「Table 20.
2018年はRISC-Vで遊ぼう
いろいろなところで言われているように半導体プロセスの進化は限界に近づきつつあります。特に微細化による恩恵は,
グラフィックの用途に限定してGPUが進化してきたように,
いわゆる専用プロセッサは開発コストが大きくなりがちです。いろいろな
商用アーキテクチャの場合,
RISC-Vの場合は,
このようにオープン規格であるということは,
2018年の新たな目標として,