LLVMにRenesas RL78をPortingしようとしているのかな?

こんにちは。NoMaYです。

ウェブで調べ物をしていて気付いたのですが、RenesasさんはLLVM(今はGCCと並ぶ著名なフリーコンパイラ)にRL78をPortingしようとしているのかも、、、

[llvm-dev] New LLVM backend for Renesas RL78 MCU
Sebastian Perta via llvm-dev llvm-dev at lists.llvm.org
Wed Apr 1 10:26:05 PDT 2020
lists.llvm.org/pipermail/llvm-dev/2020-April/140546.html
 

Parents
  • こんにちは。NoMaYです。

    別スレッドのFreeRTOSのRTOSDemoプログラムをデバッグしていて気付いたのですけど、FreeRTOSのスタックオーバーフローチェックでスタックに書いたシグニチャ(0xA5)が壊れていないかどうかをチェックしている箇所で以下のコードが生成されていました。このコードは、レジスタバンク0以外が使われていた場合には、設計者の意図通りには動作しないです。LLVM-RL78の開発者は、昨日のビット操作命令の必要性が分かっていないことに加え、レジスタバンクがどういうものかということも分かっていないと思われるのです、、、

    生成されていたコード:

    00005938 _OUTLINED_FUNCTION_15:
        5938: 12                            movw bc, ax
        5939: 7a fa a5                      xor 0xffefa, #165
        593c: 7a fb a5                      xor 0xffefb, #165
        593f: d7                            ret

     
    意図としていたものと思われるコード(なお命令セットとして2つめと3つめの命令は存在しません):

    movw bc, ax
    xor  c, 0xA5
    xor  b, 0xA5
    ret

     

  • > レジスタバンク0以外が使われていた場合には、設計者の意図通りには動作しないです。

    RL78版の gcc の出力するコードではバンク 1 と 2 のレジスタはメモリにマップされてる汎用レジスタという扱いで、レジスタバンクは 0 固定で動作するという前提でしたが似たような感じで RL78 の特徴が活きない想定なのでは?

Reply
  • > レジスタバンク0以外が使われていた場合には、設計者の意図通りには動作しないです。

    RL78版の gcc の出力するコードではバンク 1 と 2 のレジスタはメモリにマップされてる汎用レジスタという扱いで、レジスタバンクは 0 固定で動作するという前提でしたが似たような感じで RL78 の特徴が活きない想定なのでは?

Children
No Data