RISC-V トレースフォーマットの勉強。続き。
1章ずつ、翻訳ではなく日本語でサマライズしていく形式で進めていく。
5. トレースエンコーダの出力パケット
5.7 Format 1 パケット
このパケットには分岐命令の情報が含まれている。また、分岐命令の情報を通知しなければならないときにもこのパケットが使用される(例えば分岐マップがfullである場合など)。
5.7.1 Format 1 updiscon フィールド
5.7.2 Format 1 branch__map field
分岐マップがフルになったことが通知されても、ほとんど場合にはアドレスを通知する必要がない。これはbranchesを0に設定することを意味する。この場合の例外は、最後の分岐が推論不可能なジャンプを行った場合である。この場合はbranchesは31が設定される。
パケット Format 1 : アドレス・分岐マップ
- format
- ビット幅:2
- 01(diff-delta) 分岐情報とアドレスの差分が含まれる。
- branches
- ビット幅:2
- branch__mapの有効なビット数を示す。
- branch__map
- ビット幅:branchesフィールで決定される。
- 分岐がTaken・Not Takenであることを示す。各ビットにつき:
- 0 : 分岐がTaken
- 1 : 分岐がNot Taken
- address
- ビット幅:
iaddress_width_p - iaddress_lsb_p
- 命令アドレスの差分
- ビット幅:
- notify
- ビット幅:1
- updiscon
- ビット幅:1
- irreport
- ビット幅:1
- irdepth
- ビット幅:
return_stack_size_p + (re turn_stack_size_p > 0 ? 1 : 0) + call_counter_size_p
- ビット幅:
パケット Format 1 : アドレスなし・分岐マップ
format
- ビット幅:2
- 01(diff-delta) 分岐情報とアドレスの差分が含まれる。
branches
- ビット幅:2
- branch__mapの有効なビット数を示す。
branch__map
- ビット幅:branchesフィールで決定される。
- 分岐がTaken・Not Takenであることを示す。各ビットにつき:
- 0 : 分岐がTaken
- 1 : 分岐がNot Taken
5.8 Format 0 パケット
効率的にパケットを拡張するためのフォーマット。
- 正しく予測できた分岐の数を通知するための拡張。
- キャッシュインデックスのジャンプターゲットを通知するための拡張。
分岐予測がサポートされ有効である場合、2つの選択肢があり得る:
- フル分岐マップを出力する(フォーマット1を使用する)
- 正しく予測できた分岐の数を通知する。
パケットフォーマット0、サブフォーマット0、アドレスなし、分岐数
- format
- ビット幅:2
- 00 (opt-ext): 効率的な拡張のためのオプションフォーマット。
- subformat
- ビット幅:xxx
- 0:正しく分岐予測できた回数
- branch_count
- ビット幅:32
- 正しく予測できた分岐の数-31
- branch_fmt
- ビット幅:2
- 00(アドレスなし):パケットにはアドレス情報が含まれず、最後に正しく予測した分岐の、次の分岐命令は失敗している。