Today's Bug

プログラム

Yo! Ho! Everybody! What’s up today?今日は俺様の COOOOL で MARVELOUS な bug を報告しちゃうぜ! yo chki now.

void hoge() {
    a.WORD = *(unsigned long *)BUS_ADDRESS & 0xFFFF ;
}

32bitでバスリードして、下16bitマスクかけて、16bit のレジスタに入れたかったんだ。だけど、コンパイルしたら最適化の結果、見事に16bitリードにされてました OTZ

こういう時は、こうすると良いみたい。

void hoge() {
    unsigned long data_tmp ;

    data_tmp = *(unsigned long *)BUS_ADDRESS ;
    a.WORD = data_tmp & 0xFFFF ;
}