[H8-ML(1888)] 3068F Lanマイコンに付属のCコンパイラのバグ(仕様?)
From: wakky@xxxxxxxxxxxxxxxxxxx
Date: 2002年05月30日(木)20時16分50秒
寺脇です。
16bit サイズのビットフィールドを使うと、アドレス計算が
おかしくなるようです。
gcc のバージョンは、
   gcc version 2.95.3 20010315 (release)
で、以下の3種類のオプションで同じような出力がでました。
    h8300-hms-gcc -fomit-frame-pointer -c -O2 -mh -Wall -S initperi.c
    h8300-hms-gcc -fomit-frame-pointer -c -O -mh -Wall -S initperi.c
    h8300-hms-gcc -fomit-frame-pointer -c -mh -Wall -S initperi.c
あまり、凝った定義はしないほうがいいかもしれません。

------ この不具合がでるソースファイル initperi.c ------------
union un_mstpcr {                            /* union MSTPCR */
                unsigned int WORD;           /*  Word Access */
                struct {                     /*  Byte Access */
                       unsigned char H;      /*    MSTPCRH   */
                       unsigned char L;      /*    MSTPCRL   */
                       }     BYTE;           /*              */
                struct {                     /*  Bit  Access */
                       unsigned char B15:1;  /*    DMAC      */
                       unsigned char B14:1;  /*    DTC       */
                       unsigned char B13:1;  /*    TPU       */
                       unsigned char B12:1;  /*    TMR       */
                       unsigned char B11:1;  /*    PPG       */
                       unsigned char B10:1;  /*    D/A       */
                       unsigned char B9 :1;  /*    A/D       */
                       unsigned char    :0;  /*              */
                       unsigned char B7 :1;  /*    SCI2      */
                       unsigned char B6 :1;  /*    SCI1      */
                       unsigned char B5 :1;  /*    SCI0      */
                       }     BIT;            /*              */
};                                           /*              */
#define MSTPCR (*(volatile union un_mstpcr*)0xFFFF3C)/*MSTPCRAddress*/
ttest()
{
    MSTPCR.BIT.B15 = 1 ;
    MSTPCR.BIT.B5 = 0 ;
}
----- 展開されるコード ----------------------------------------
_ttest:
    mov.l   #16777020,er2
    mov.b   @er2,r3l
    or  #128,r3l
    mov.b   r3l,@er2
    mov.b   @16777022,r2l   <------ここがおかしい
    and #-33,r2l
    mov.b   r2l,@16777022
    rts

PS 今日は、これで半日つぶしました(^^;)
--
--------- Computer Artisan ---------------------------
シーエー  寺脇 勝彦
E-mail wakky@xxxxxxxxxxxxxxxxxxx 
URL    http://www.computerartisan.com/

スレッド概略
[1887(R)](起点)
 └[表示中]
   └[1889(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]