#include "osecpu_ask.h" DB(0x03,0x81-0x40); DDBE(0); junkApi_fopenRead(R00, P01, 1);関数jitCompilerでPLIMMをコンパイルする際にレジスタの番号をチェックしていないため、構造体Regsのポインタレジスタより高位のメモリ領域を破壊できてしまうことが原因だと思われます。 -- yao 2014-03-31 (月) 14:01:15
たとえばこんな状況: R00に0x12、R01に0x34が入っている。R00とR01はどちらもbit=32。これらを足し合わせて、下位4ビットだけがほしい。 これには2つの書き方がある。 (1) ADD(32, R02, R00, R01); LIMM(4, R3F, 0x0f); AND(4, R02, R02, R3F); (2) PREFIX_2F(0); ADD(4, R02, R00, R01); LIMM(4, R3F, 0x0f); AND(4, R02, R02, R3F); 1のやり方はプレフィクスがいらないけど、ADDは32ビットで演算している。これは必要のない精度の計算だといえる。 無駄な書き方を「強要」しなければいけないとしたら、それは本当に「いい仕様」といえるだろうか? それに対して2は不要な演算は全くない。
コメント | お名前 | NameLink | |