A.1.3 変数を宣言したサイズでアクセスするコードを生成する

変数を宣言したサイズでアクセスする場合は、__evenaccessの拡張機能を使用します。

__evenaccessの宣言により変数の型のサイズでアクセスすることを保証します。保証対象サイズは、4バイト以下の整数スカラ型(signed char, unsigned char, signed short, unsigned short, signed int, unsigned int, signed long, unsigned long)です。

構造体や共用体単位でアクセスする場合は、__evenaccessの指定は無効です。

構造体または共用体に指定した場合、全てのメンバに__evenaccessを指定したのと同じ効果になります。その場合、4バイト以下の整数スカラ型メンバのアクセスサイズは保証しますが、構造体または共用体単位でのアクセスサイズは保証しません。

【記述例】

Cソースコード

#pragma address A=0xff0178
unsigned long __evenaccess A;
void test(void)
{
      A &= ~0x20;
}

 

出力コード(__evenaccess 非指定時)

_test:
        MOV.L #16712056,R1
        BCLR #5,[R1] ; 1バイトメモリアクセス
        RTS

 

出力コード(__evenaccess 指定時)

_test:
        MOV.L #16712056,R1
        MOV.L [R1],R5 ; 4バイトメモリアクセス
        BCLR #5,R5
        MOV.L R5,[ R1] ; 4バイトメモリアクセス
        RTS