ぼくのかんがえたさいきょうCPU オペランド簡略化

 可変長8bit単位の命令フォーマットのうち、オペランド部分を変更。 ぼくのかんがえたさいきょうCPU 8bit可変長命令フォーマット続き ぼくのかんがえたさいきょうCPU 8bit可変長命令フォーマット オペコードは 0xxxxxxx で始まり、オペランドは 1xxxxxxx で始まる。  オペランドは以下の2種類…
トラックバック:0
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU レジスタを覗く窓

 ぼくのかんがえたさいきょうCPUは最大長で32768バイトの汎用レジスタを定義しているが仮に実現したとして演算器をどうするか。もうなんかドリフのコント「もし汎用レジスタが異常に長かったら」みたいなタイトルになってきてるが。  レジスタの領域をチップ内に持つのはそう難しくないだろうが、32Kバイト長と32Kバイト長を入力として演算…
トラックバック:0
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU シフト命令のシフト量

 ぼくのかんがえたさいきょうCPUは最大長で32768バイトの汎用レジスタを定義しているが実現性はさておきどんな問題が起こるか。  シフト命令のシフト量が最大262144になってしまう。18bit必要だ。こんなものバレルシフタで作ったらとんでもないことになってしまうし分割して複数サイクルでシフトするにしてもそもそもそんなにシフト量…
トラックバック:0
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU:eval

 ぼくのかんがえたさいきょうCPUは最大長で32768バイトの汎用レジスタを定義しているが実現性はさておきこれをどう活用するか。  レジスタに命令列を入れて実行させるEVAL命令というのはどうか。  EVAL レジスタ番号,実行ステップ数  この命令に当たると、レジスタ番号で指定された汎用レジスタの内容をフェッチする直…
トラックバック:0
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU レジスタ番号と定数

 演算に定数をつかうときは 1. レジスタに即値を代入する または 2. 即値をオペランドに指定する という感じになるのだけれども、1, はいったん即値を代入する操作が必要になり、2.はオペランドのフォーマットが長くなってしまう。ではどうしようか。  64本の汎用レジスタを使うことを考えると、これを表現するためには6bitあればよ…
トラックバック:0
コメント:0

続きを読むread more

iAPX432の命令とアドレッシング・モード

 前回の続き。 CHAPTER 3 DATA MANIPULATION 3.4命令  命令はオペレータとオペランドの組み合わせでオペランドは最大3つ。命令列はハードウェアで認識されるメモリ上のInstruction Segments内にある。命令は可変長ビット(バイトじゃないよ!)で現在の実装では32bit単位で読み込…
トラックバック:0
コメント:0

続きを読むread more

竹下世界塔のCPUアーキ理解2017 (スライド)

 気がつけば2006年からCPUアーキテクチャについて色々調べては考えていたのだった。ということで現在までの私自身の理解をスライドにしてみました。こんなパワポ資料を作るのも十年ぶりだろうか。Keynoteだけど。 https://speakerdeck.com/houmei/2017-cpu-architeciture …
トラックバック:0
コメント:0

続きを読むread more

割り込みの分類

 割り込みはパイプラインのどのステージで起こるかの続き。  TRONCHIPでは割り込みをEITという言葉で整理している。EITとは ・Exception (例外) ・Interrupt (割り込み) ・Trap (トラップ) で、Exceptionはハードウェア障害など深刻度が大きい割り込み、Interruptは外部信号…
トラックバック:0
コメント:0

続きを読むread more

SPARC64系のFMAについて

 きっかけは次の記事を読んで、SPARC64でのFMA(Fused Multiply Add : 積和演算)の実装がSPARC64VIという記述に「いやSPARC64IIIからあったはず」と思ったので確認してみようと思ったこと。 FMA (Fused Multiply-Add) について色んな観点でまとめてみた(小清水さんとコンピ…
トラックバック:0
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU: 2017.06 1バイト命令・バリア・プリフィックス

 命令拡張の余地がなくなった場合に、従来未定義だった命令から始めることで続く命令列に機能を追加できる。これをプリフィックス命令という。プリフィックス命令は次の命令に対する1回だけの指示と考えることもできる。プリフィックス命令は短いほどよいので1バイト命令フォーマットから空いているところを探す。今回はメモリ操作命令の1バイトフォーマットを…
トラックバック:0
コメント:0

続きを読むread more

SIMDのマルチレイヤー表現

 ぼくのかんがえたさいきょうCPUは今のところレジスタの幅が32KBで四倍精度浮動小数点をSIMDで扱うと同時に2048個も扱える。が、ここまでのサイズがあると同種のデータだけ扱うのではなく構造体やタグも付加したい。ではどうやって表現しようか? 関連: ぼくのかんがえたさいきょうCPU エンディアンとタグ付きデータの扱い ぼく…
トラックバック:0
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU: 2017.06 算術演算命令

 算術演算命令はデータを数として扱い、四則演算を行う。整数型や浮動小数点型はソースレジスタRaの形式に合わせて変換され、Rdに保存される。演算結果はRaと同じレジスタ幅、レーン構成になる。 概要と基本フォーマット  変換に関するルールは次のとおり。 データと型 CO1: 00nn_xxxx A1: 0001_at…
トラックバック:0
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU: 2017.05 分岐条件

 ほとんどのプロセッサは4bitの16パターンで分岐の条件を決めている。2の補数を用いた符号ありの整数演算と符号なしの整数演算の条件は以下のフラグを使う。 Z ... 演算結果がゼロ N ... 演算結果がマイナス (最上位ビットが1) V ... 演算結果が2の補数の範囲外 オーバーフロー C ... 演算結果が符号なしの…
トラックバック:2
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU: 2017.05 SIMD補足

・SIMDロード/ストアについて アドレッシングモード計算のうちRaがベクタなら、Rb(ベクタ/スカラ)や即値(スカラ)を加算し、複数の実効アドレスを生成する。 Raの各レーンが実効アドレスサイズに拡張された後、Rbや即値を加算、それぞれのレーン用の実効アドレスを得る。 →LEA命令の場合、各レーンが実効アドレスのサイズになる。 …
トラックバック:1
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU: 2017.05 データと型

 汎用レジスタで扱うデータのサイズや型について定義する。メモリ操作命令ではレジスタのサイズだけを扱い中身(型)は無視する。汎用レジスタ間の算術演算でのみ型を扱う。演算の結果、データのサイズが変わってしまっては扱いにこまるので、演算結果は2つある引数のうち最初の引数に合わせることにする。 ・用語など定義 レジスタのサイズ 2^(n…
トラックバック:1
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU: 2017.05 論理演算命令

 論理演算命令は汎用レジスタどうしでAND,ORなどの論理演算を行う。論理演算はbitごとに行われるものでデータ幅が変わっても論理演算の結果は変化しない。データ幅が変わることで結果が変わるシフト、ローテートやPOPCなどは別扱いにする。 概要と基本フォーマット CO1: 00nn_xxxx L1: 0010_log[3:…
トラックバック:1
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU: 2017.05 分岐命令

 分岐命令は条件により命令の流れを変える。相対アドレスによる分岐、1命令スキップ、Conditional Moveを行う。 概要と基本フォーマット ・基本は1バイト命令。CO1:J1フォーマットを使用。 CO1: 00_nnxxxx J1: 0000_cond cond: 分岐条件 前命令の結果から判断。 …
トラックバック:1
コメント:0

続きを読むread more