Raspberry Pi 用のベア メタル コードを書いているところ、Windows の ARM クロス アセンブラーから予期しない警告が表示されます。警告の原因となった命令は次のとおりです。
stmdb sp!,{r0-r14}^
と
ldmia sp!,{r0-r14}^
警告は次のとおりです。
警告: ベース レジスタの書き戻しは予測不能です
「^」修飾子はプロセッサにレジスタのユーザーモードのコピーを保存するように指示しますが、命令が実行されたときにプロセッサがどのモードになるかがわからず、そのようには見えないため、これはある程度理解できます。それを伝える方法になります。私は、次の場合に同じ警告が表示されることをもう少し心配していました。
stmdb sp!,{r0-r9,sl,fp,ip,lr}^
と:
ldmia sp!,{r0-r9,sl,fp,ip,lr}^
spレジスタを明示的に保存していないという事実にもかかわらず。
私の懸念は、約 15 年前に多くのアセンブラ コーディングを行っていたにもかかわらず、ARM コードは私にとって新しいものであり、何かを誤解している可能性があることです。また、警告を安全に無視できる場合、それらを抑制する方法はありますか?