osecpu_0001
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* OSECPUに関するメモ(番外版) #1
-(by K, 2013.05.19)
** 機能密度追及に関するメモ
-(0) このメモをOSECPUのサイトに書かない最大の理由は、OSEC...
-(1) ver.0.39に採用予定の「P01にデータセクションの先頭ア...
r1 最初の String リソースへの参照
--の真似以外の何物でもない。この設計は秀逸だと思う。
--情けないことにこの設計の秀逸さを理解できるようになった...
--そもそもPxxレジスタはアプリ起動時にはNULLを入れておくく...
-(2) OSECPUのフロントエンド命令セットにはループ命令がある...
--命令コード6以下は、4bitでエンコードできる。7以上は8bit...
-(3) ver.0.39でのフロントエンドバイトコード一覧(一部)
--4: プリフィクス(44はCNDプリフィクス)[旧6]
--5: 関数呼び出し[変わらず]
--6: forループスタート[旧3C]
--7: forループエンド[旧3D]
--0D: サブプリフィクス(データタイプオーバーライド用)[新...
--2E: データ記述[旧4]
-(4) OSECPUがうまくいった理由
--僕はOSECPUはうまく行っていると思う。どうしてうまく行っ...
--そもそもアセンブラもフロントエンドコードを直接出力する...
--そしてフロントエンドコードの設計・実装にあっては、用意...
--OSECPU-ASKAはコード生成するときに、このフレーズ(命令の...
--バックエンドがサポートする命令の種類やフォーマットの種...
---たとえば加算命令は一つしかない。x86のように、ADDとINC...
** フロントエンドコードの仕様 (ver.0.39以降)
--特記のないものは、バックエンドと同じである
-0: NOP
-1: LB ラベル定義
--「1」プリフィクス4が付かない場合は、引数を持たない。こ...
--「4-1-s」プリフィクス4が付いていた場合、一つの符号付き...
-2: LIMM Rxxへの定数代入
--「2-u-x」プリフィクス4が付かない場合、符号なし整数でレ...
--「4-2-...」プリフィクス4が付いていた場合の動作は未定義。
-3: PLIMM Pxxへのラベル値代入
--「3-s」プリフィクス4が付かない場合、P3Fが指定されたとみ...
--「4-3-u-s」プリフィクス4が付いていた場合、符号なし整数...
-4: プリフィクス
--「4-」さまざまな命令の前について、出現頻度の低い形式で...
--「4-4-u」このプリフィクスが連続した場合、CNDプリフィク...
-5: 関数呼び出し
--これはバックエンドにはない機能で、頻出する関数呼び出し...
--「5-s-...」プリフィクス4が付かない場合、sは関数番号でこ...
--「4-5-s-...」プリフィクス4が付いていた場合、この形式で...
(例)
4-5-2-x : drawPoint(mod:x, x:R00, y:R01, c:R02);
4-5-3-x : drawLine(mod:x, x0:R00, y0:R01, x1:R02, y1:R03...
---この「4-5-s-...」形式は、典型的な呼び出し方が頻出する...
-6: forループ開始
--これはバックエンドにはない機能で、頻出するforループを短...
--「6-u-x-x」プリフィクス4が付かない場合、レジスタ番号が...
//--「4-6-u-x-x-x」プリフィクス4が付いていた場合、さらに...
//それとも無限ループ表現用にするべきか?
-07: forループ終了
--「07」プリフィクス4が付かない場合、単純にforループ範囲...
---関数末尾の「07」は省略してもよい。対応の不一致が解消さ...
--「4-07」未定義
-08: LMEM メモリからのRxxへのロード
-09: SMEM メモリへのRxxのストア
-0A: PLMEM メモリからのPxxへのロード
-0B: PSMEM メモリへのRxxのストア
-0C: LEA
-0D: 型推論をキャンセルするためのプリフィクス
--ポインタ系の命令にはtyp32のフィールドがあるが、これを極...
--typ32フィールドを持たない命令にこのプリフィクスを付ける...
-0E: PADD
-0F: PDIF
-10: OR
-11: XOR
-12: AND
-13: ?
-14: ADD
-15: SUB
-16: MUL
-17: CP
-18: SHL
-19: SAR
-1A: DIV
-1B: MOD
-1C:
-1D:
-1E: PCP
-1F:
-20: CMPE
-21: CMPNE
-22: CMPL
-23: CMPGE
-24: CMPLE
-25: CMPG
-26: TSTZ
-27: TSTNZ
-28: PCMPE
-29: PCMPNE
-2A: PCMPL
-2B: PCMPGE
-2C: PCMPLE
-2D: PCMPG
-2E: データ記述
-2F: 拡張用
-30: talloc(旧F4)
-31: tfree(旧F5)
-32: malloc(旧F6)
-33: mfree(旧F7)
-34: データ記述(旧F0)
-35: セキュリティ制御
-36: CMPR (in range)(未実装)
-37: CMPNR (not in range)(未実装)
-38: PALMEM
-39: PASMEM
-3A: PAPLMEM
-3B: PAPSMEM
-3C: beginFunc(ENTER)
-3D: endFunc(LEAVE)
-3E: CALL
-3F: PCALL
-x:拡張符号付き整数:
--(-0xf)以上: そのままの値を意味する
--(-0x4f)から(-0x10): R3FからR00を意味する
--(-0x58)から(-0x50): 0x10000,0x8000,0x4000,0x2000,0x100...
--(-0x60)以下: -0x10以下を意味するので、+0x50をして補正...
--このようなエンコードになっているのは・・・
---一つのフィールドで定数もしくはレジスタを表せるようにし...
---2のべきの定数はフラグを立てるときなどに出現頻度が高い...
---(-16)以下の定数は出現頻度が低い
--ということを配慮した結果による
終了行:
* OSECPUに関するメモ(番外版) #1
-(by K, 2013.05.19)
** 機能密度追及に関するメモ
-(0) このメモをOSECPUのサイトに書かない最大の理由は、OSEC...
-(1) ver.0.39に採用予定の「P01にデータセクションの先頭ア...
r1 最初の String リソースへの参照
--の真似以外の何物でもない。この設計は秀逸だと思う。
--情けないことにこの設計の秀逸さを理解できるようになった...
--そもそもPxxレジスタはアプリ起動時にはNULLを入れておくく...
-(2) OSECPUのフロントエンド命令セットにはループ命令がある...
--命令コード6以下は、4bitでエンコードできる。7以上は8bit...
-(3) ver.0.39でのフロントエンドバイトコード一覧(一部)
--4: プリフィクス(44はCNDプリフィクス)[旧6]
--5: 関数呼び出し[変わらず]
--6: forループスタート[旧3C]
--7: forループエンド[旧3D]
--0D: サブプリフィクス(データタイプオーバーライド用)[新...
--2E: データ記述[旧4]
-(4) OSECPUがうまくいった理由
--僕はOSECPUはうまく行っていると思う。どうしてうまく行っ...
--そもそもアセンブラもフロントエンドコードを直接出力する...
--そしてフロントエンドコードの設計・実装にあっては、用意...
--OSECPU-ASKAはコード生成するときに、このフレーズ(命令の...
--バックエンドがサポートする命令の種類やフォーマットの種...
---たとえば加算命令は一つしかない。x86のように、ADDとINC...
** フロントエンドコードの仕様 (ver.0.39以降)
--特記のないものは、バックエンドと同じである
-0: NOP
-1: LB ラベル定義
--「1」プリフィクス4が付かない場合は、引数を持たない。こ...
--「4-1-s」プリフィクス4が付いていた場合、一つの符号付き...
-2: LIMM Rxxへの定数代入
--「2-u-x」プリフィクス4が付かない場合、符号なし整数でレ...
--「4-2-...」プリフィクス4が付いていた場合の動作は未定義。
-3: PLIMM Pxxへのラベル値代入
--「3-s」プリフィクス4が付かない場合、P3Fが指定されたとみ...
--「4-3-u-s」プリフィクス4が付いていた場合、符号なし整数...
-4: プリフィクス
--「4-」さまざまな命令の前について、出現頻度の低い形式で...
--「4-4-u」このプリフィクスが連続した場合、CNDプリフィク...
-5: 関数呼び出し
--これはバックエンドにはない機能で、頻出する関数呼び出し...
--「5-s-...」プリフィクス4が付かない場合、sは関数番号でこ...
--「4-5-s-...」プリフィクス4が付いていた場合、この形式で...
(例)
4-5-2-x : drawPoint(mod:x, x:R00, y:R01, c:R02);
4-5-3-x : drawLine(mod:x, x0:R00, y0:R01, x1:R02, y1:R03...
---この「4-5-s-...」形式は、典型的な呼び出し方が頻出する...
-6: forループ開始
--これはバックエンドにはない機能で、頻出するforループを短...
--「6-u-x-x」プリフィクス4が付かない場合、レジスタ番号が...
//--「4-6-u-x-x-x」プリフィクス4が付いていた場合、さらに...
//それとも無限ループ表現用にするべきか?
-07: forループ終了
--「07」プリフィクス4が付かない場合、単純にforループ範囲...
---関数末尾の「07」は省略してもよい。対応の不一致が解消さ...
--「4-07」未定義
-08: LMEM メモリからのRxxへのロード
-09: SMEM メモリへのRxxのストア
-0A: PLMEM メモリからのPxxへのロード
-0B: PSMEM メモリへのRxxのストア
-0C: LEA
-0D: 型推論をキャンセルするためのプリフィクス
--ポインタ系の命令にはtyp32のフィールドがあるが、これを極...
--typ32フィールドを持たない命令にこのプリフィクスを付ける...
-0E: PADD
-0F: PDIF
-10: OR
-11: XOR
-12: AND
-13: ?
-14: ADD
-15: SUB
-16: MUL
-17: CP
-18: SHL
-19: SAR
-1A: DIV
-1B: MOD
-1C:
-1D:
-1E: PCP
-1F:
-20: CMPE
-21: CMPNE
-22: CMPL
-23: CMPGE
-24: CMPLE
-25: CMPG
-26: TSTZ
-27: TSTNZ
-28: PCMPE
-29: PCMPNE
-2A: PCMPL
-2B: PCMPGE
-2C: PCMPLE
-2D: PCMPG
-2E: データ記述
-2F: 拡張用
-30: talloc(旧F4)
-31: tfree(旧F5)
-32: malloc(旧F6)
-33: mfree(旧F7)
-34: データ記述(旧F0)
-35: セキュリティ制御
-36: CMPR (in range)(未実装)
-37: CMPNR (not in range)(未実装)
-38: PALMEM
-39: PASMEM
-3A: PAPLMEM
-3B: PAPSMEM
-3C: beginFunc(ENTER)
-3D: endFunc(LEAVE)
-3E: CALL
-3F: PCALL
-x:拡張符号付き整数:
--(-0xf)以上: そのままの値を意味する
--(-0x4f)から(-0x10): R3FからR00を意味する
--(-0x58)から(-0x50): 0x10000,0x8000,0x4000,0x2000,0x100...
--(-0x60)以下: -0x10以下を意味するので、+0x50をして補正...
--このようなエンコードになっているのは・・・
---一つのフィールドで定数もしくはレジスタを表せるようにし...
---2のべきの定数はフラグを立てるときなどに出現頻度が高い...
---(-16)以下の定数は出現頻度が低い
--ということを配慮した結果による
ページ名: