この項では、下記のキーワードの使用方法について説明します。
__evenaccess <型指定子> <変数名>
<型指定子> __evenaccess <変数名>
|
宣言または定義したサイズで変数をアクセスします。
変数の型のサイズでアクセスすることを保証します。
保証対象サイズは、4バイト以下の整数スカラ型(signed char, unsigned char, signed short, unsigned short, signed int, unsigned int, signed long, unsigned long)です。
#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
|
構造体や共用体単位でアクセスする場合は、__evenaccessの指定は無効です。
構造体または共用体に指定した場合、全てのメンバに__evenaccessを指定したのと同じ効果になります。その場合、4バイト以下の整数スカラ型メンバのアクセスサイズは保証しますが、構造体または共用体単位でのアクセスサイズは保証しません。