# VAX Digital Equipment Corporation(DEC)が1970年代に設計したメモリメモリ型の汎用レジスタアーキテクチャ。最大3つのメモリオペランドを1命令で扱える(2,2)/(3,3)形式を持ち、変位・即値・レジスタ間接・インデックス・直接/絶対・メモリ間接・オートインクリメント/デクリメント・スケールドという当時最も豊富なアドレッシングモード集合を持つ。本書付録Aは、アドレッシングモード使用頻度の実測(TeX・spice・gcc)にVAXを用いており、変位・即値の2方式が使用全体の大部分を占め、両者だけで75〜99%のアドレッシングモード使用をカバーできるという計測結果を導く基準アーキテクチャとして扱われる(Source: [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Appendix A Instruction Set Principles]] §A.3)。 ## CALLS命令: 「解決策」であって「プリミティブ」ではない設計の代表例 VAXの手続き呼び出し命令CALLSは、コンパイラ writer への設計原則(規則性の提供・プリミティブの提供・コンパイル時定数の静的束縛)にことごとく反する例として、付録A「誤謬と落とし穴」で名指しで批判される。CALLSはスタックのアライメント調整・引数カウントのプッシュ・呼び出し先が指定するレジスタ保存マスクの解釈・戻りアドレスとスタックポインタのプッシュ・条件コードのクリア・ステータス情報のプッシュという8段階の処理を1命令で行うが、実際の大多数の呼び出しはこれほどの汎用性を必要とせず、より単純なリンク規約で十分高速化できる。レジスタ保存マスクはコンパイル時に確定しているにもかかわらず実行時に解釈される点も、「コンパイル時に既知の値は静的に命令へ束縛すべき」という原則への違反として挙げられる。VAX設計者自身も、戻りアドレスをスタックにプッシュして手続きへジャンプするだけの単純な命令JSBを別に用意していたが、大半のVAXコンパイラは(標準化のため)より低速なCALLSを使い続けた(Source: [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Appendix A Instruction Set Principles]] §A.8, §A.10)。 ## 「完璧なアーキテクチャは設計できない」の事例 付録A「誤謬と落とし穴」は、1975年のVAX設計者がコードサイズ効率を過大評価し、5年後にデコード・パイプライン化の重要性が増すことを過小評価した例を、いかなるアーキテクチャ設計も当時の技術的前提の範囲でしか正しくありえないことの実例として挙げる(Source: [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Appendix A Instruction Set Principles]] §A.10)。 ## 出典 - [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Appendix A Instruction Set Principles]] §A.3, §A.8, §A.10