<aside> ⚠️ 本文所使用的 QEMU 版本為:v4.2.0

</aside>

延續 Part 1 一文,本文將繼續介紹 Decodetree 中的 PatternsPattern Groups 語法。


Patterns

Pattern 實際定義了一個指令的 decode 方式。Decodetree 會根據 Patterns 的定義,來動態產生出對應的 switch-case decode 判斷式。

pat_def      := identifier ( pat_elt )+
pat_elt      := fixedbit_elt | field_elt | field_ref | args_ref | fmt_ref | const_elt
fmt_ref      := '@' identifier
const_elt    := identifier '=' number

其語法由使用者所定義的 identifier,隨後緊接著一個以上的 pat_elt

由於 Pattern 實際定義了一個指令的 decode 方式,因此 所有的 bitsarguments (如果有參考 args_ref 的話) 都必須明確的被定義,如果在搭配了所有的 pat_elt 後還有未定義的 bits 或是 arguments 的話,Decodetree 便會報錯。

此外,Pattern 所產生出來的 decoder,最後還會呼叫對應的 translator function

Examples

addl_i   010000 ..... ..... .... 0000000 ..... @opi

定義了 addl_i 這個指令的 Pattern,其中:

最後 addl_i 的 decoder 還會呼叫 trans_addl_i() 這個 translator function