Más contenido relacionado
La actualidad más candente (20)
Similar a 30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば (20)
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
- 16. アセンブラとバイナリ
00000470 <genrand_int31>:
470: 11 00 03 c0 push rbase
474: 11 00 03 e0 push rret
478: 18 00 03 c0 srspr rbase
32bit
47c: 0e e0 03 a0 lih rtmp,0x0
addr
480: 0d 40 47 a0 wl16 rtmp,0x220
484: 20 70 03 e2 movepc rret,8
488: 14 40 03 a0 b rtmp,#al
call
48c: 08 30 00 01 shr r0,0x1
490: 12 00 03 e0 pop rret
494: 12 00 03 c0 pop rbase return
498: 14 40 03 e0 b rret,#al
- 19. 開発規模について
MIST1032SAプロセッサ + ペリフェラル
行数 : 81,000行
使用LE : 101,800LE [in-order: 32,000LE]
開発環境
GCC : 3,100行
binutils(gas, ld) : 1,800行
シミュレータ : 1,500行
Newlib : 1,000行
- 23. 作成の流れ
命令セット仕様策定
プロセッサコアの開発 アセンブラの開発
コアのバグつぶし
周辺機能仕様策定
割り込み・IO・MMU作成 コンパイラ・シミュレータの開発
バグの叩き合い
バグとの戦い
バグと共に(ry
- 27. with Flag 命令とは
典型的な例: ADDC (Add with Carry Flag)
フラグを見に行くのはブランチ系命令だけに。
フラグを書き込む命令は b の直前にある前提。
コンパクトな回路規模で OoO するには:
命令の依存関係をとにかく少なくする必要
- 28. できなくなること
例えば x86 で言うと...
CMP -> MOV -> MOV -> Jxx
CMP のフラグが Jxx まで引き継がれる、はず
OoO する際にフラグへの依存ができる
mist32 では、これを許さない!
Branch の直前に、フラグ変更命令を置く制約
- 38. コンパイラ (gcc) の移植
RTL テンプレートと、C をごりごり。
正直面白くない。
GCC Internals を頑張って読もう。
なぜ LLVM にしなかったのかと一晩(ry
まさかここまで LLVM, clang が進化するとは
先見性の無さ...('A`)
- 40. RTL テンプレート
(define_insn "addsi3"
[(set (match_operand:SI 0 "register_operand" "=r,r")
(plus:SI (match_operand:SI 1 "register_operand" "%0,0")
(match_operand:SI 2 "nonmemory_operand" "r,I")))]
""
"@
addt%0, %2
addt%0, %2"
)