AR# 51984

EDK MicroBlaze : ハーフワード反転の MicroBlaze 命令による保存についての説明

説明

SHR 命令を使用すると、エンディアンが入れ替わり、もう一方のハーフワードに結果が保存されます (もとのハーフワードの隣のワード)。


これは予期動作ですか。

コードの抜粋


  typedef union
  {
    struct
   {
        unsigned short int16e;
        unsigned short int16f;
   } structure;
   unsigned int tab[1];
  } structTest_t;

    structTest_t lit2big;
 lit2big.structure.int16e= 0xf055;
 lit2big.structure.int16f= 0xf066;
shr(&lit2big.structure.int16e, 0xad0b);
// print it:
int16e = F055 <- wanted to swap and assign there but didn't
int16f = BAD <- this other got swapped
 

ソリューション

(UG081) によると、これは予期動作です。
------------------------
If the R bit is set, a halfword reversed memory location is used and the two bytes in the halfword are reversed, storing data with the opposite endianness of the endianness defined by C_ENDIANNESS and the E bit (if virtual protected mode is enabled).
(訳 : R ビットが設定されていると場合、ハーフワード反転したメモリ ロケーションが使用され、またこのハーフワードにある 2 バイトが反転されて、C_ENDIANNESS および E ビットで定義されているエンディアンとは逆のエンディアンでデータが保存されます (仮想保護モードが有効になっている場合)。)------------------------
この「ハーフワード反転したメモリ ロケーションが使用される」というのは予期動作です。

C_USE_REORDER_INSTR = 1 という設定が使用されていることを確認してください。これはデフォルトでそうなるので、デフォルトで使用すべきものです。

これが 0 になっている場合は、バイト反転なしで保存されます。
AR# 51984
日付 10/02/2014
ステータス アクティブ
種類 一般
IP