よく分からない挙動を見つけたのでバグか仕様か教えてください。
#include "osecpu_ask.h"
#define L_func LOCAL(0)
LOCALLABELS(1);
#define func(x) P31 = x; CALL(L_func)
// main
do {
VPtr p:P01;
junkApi_malloc(p, T_VPTR, 1);
// PSMEM0(P28, T_VPTR, p);
func(p);
R23 += 0x23;
}
beginFunc(L_func);
do {
R20 += 0x20;
PLMEM0(P21, T_VPTR, P31);
R22 += 0x22;
}
endFunc();
上に貼り付けたプログラムをosecpu074dで実行すると、R20=0x20、P21=null、R22=0x22、R23=0x23と期待通りの結果を得ました。
ここでPSMEM0の行を有効にして実行すると、P21=P28だけが変化すると期待していますが、P21=P28のほかにP22=0も変化してしまいます。
どうやらPSMEM0の行が有効ならば、PLMEM0以降の命令は実行されずにfuncから帰るようです。
かなり不可解な挙動なのでこれはバグではないでしょうか? -- yao 2013-09-12 (木) 22:42