我好不容易用LLVM:如何指定進位標誌算術?
def ADD_reg3 : InstReg3Simple<0b01000, (outs GPR:$Wd), (ins GPR:$Wb, GPR:$Ws),
"add\t$Wb, $Ws, $Wd",
[(set GPR:$Wd, (add GPR:$Wb, GPR:$Ws))]>
{}
大加兩個寄存器!現在我想添加兩個'長'數字。
看來,LLVM是足夠酷,可以自動分裂每個數字使用兩個寄存器。現在,我的全新編譯器抱怨它無法爲較高的單詞選擇'adde'指令。我知道我還需要'addc'變體,而不是'add'。
如何指定addc和adde指令? 我必須首先定義一個進位資源,我該如何在模式中使用它,還是全是隱式的,我可以爲'addc/e'交換'add'嗎?
我的處理器只有ADD和ADDC操作碼。兩者都生成進位,但只有ADDC也使用它。我怎麼能告訴LLVM add和addc應該映射到相同的ADD操作碼(帶進位未用於添加)?
我想讀這件事,但發現易例子停止短多字算術,而現實世界中的代碼是太複雜,我看到發生了什麼事情。
UPDATE:
我發現我可以定義爲「ADDE」(操作碼使用ADDC)就像以上的指令。現在llvm抱怨缺少'addc'。當我將「添加」模式更改爲「addc」時,多字指令可以工作......但是現在,由於缺少「添加」,單字指令不能再被選中!
所以歸結爲:我怎樣才能將'add'映射到'addc',或者同時映射到其他任何東西?