GAME_CCの作者の「ず」さんのリクエストに答えて、先方のブログに回答したのですが
単に省略されただけで、「ず」さんに伝わっていればよいのですが
うまく表示されて無いようなので こちらにも
codegen.cファイルの
関数 void epilogue(){ 内の
for(int i=1; i<odl_n+1; i++){
if(odl[i].opt==0){ //if(ofl[i].opt==0){
continue;
}
for(int j=0; j<odl[i].n; j++){
printf("V_%s\tRMB\t2\t; do loop pseudo array\n",odl[i].label[j]);
}
}
--------------------------------------------------------------------------------
optimize.cファイルの
関数 void optimize_do_loop(){ 内の
if(node_u->kind==ND_SETVAR
&& strcmp(node_u->str,odl[n].var)==0){ // 制御変数への代入がある
odl[n].opt = 0; //ofl[n].opt = 0;
// printf("; break control var '%s':",odl[n].var);
--------------------------------------------------------------------------------
分かりづらい提示で申し訳ないのですが、
コメント「//ofl[n].opt 」が含まれる行が修正箇所です。
アセンブラソース出力の終わりの方に出てくる
V_F_DZ2_8 RMB 2 ; for loop pseudo array
V_D_BI1_2 RMB 2 ; do loop pseudo array
for文とdo文の為の疑似関数のバッファ確保文の オリジナルで言うところの「_D_BI1_」の名を冠した一行が
修正しないと出力されない症状があって見つけました。
for文の方は出ていたので、for文の出力に影響を与えている変数などと対になるdo文側の変数を追いかけて、
私が使っているGeanyエディタだと同一フォルダ内のファイルに対して指定したキーワードが使われている箇所を
検索で弾き出す機能があるのでそれで見つけました。
オリジナルのソースから、削除したり前後の位置を変えたりしているので
diffを取っても参考にならない気がするので申し訳ないです。
ただ、これもバイナリ実行形式じゃなく アセンブラのソースで出す形だから見つけられたのが
大きな利点だと思います。
コメント
コメントを投稿