こんにちは。NoMaYです。ウェブで調べ物をしていて気付いたのですが、RenesasさんはLLVM(今はGCCと並ぶ著名なフリーコンパイラ)にRL78をPortingしようとしているのかも、、、[llvm-dev] New LLVM backend for Renesas RL78 MCUSebastian 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
こんにちは。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, axxor c, 0xA5xor b, 0xA5ret
> レジスタバンク0以外が使われていた場合には、設計者の意図通りには動作しないです。
RL78版の gcc の出力するコードではバンク 1 と 2 のレジスタはメモリにマップされてる汎用レジスタという扱いで、レジスタバンクは 0 固定で動作するという前提でしたが似たような感じで RL78 の特徴が活きない想定なのでは?