short
以下は、配列blk
から ARMR
レジスタにいくつかの値をロードするために C およびインライン アセンブリで記述したコードの一部です。
...
short *blk;
... //blk memory allocation and initialization
short tmp0, tmp1, tmp2;
asm volatile (
"ldrh %[tmp0], [%0]\n\t"
"ldrh %[tmp1], [%1]\n\t"
"ldrh %[tmp2], [%2]\n\t"
: [tmp0] "=r" (tmp0), [tmp1] "=r" (tmp1), [tmp2] "=r" (tmp2)
: "m" (blk[0]) , "m" (blk[8]), "m" (blk[8*2])
:
);
arm gcc 4.6 からこのエラー メッセージが表示されます
/tmp/ccDEBLCN.s:266: Error: ARM register expected -- `ldrh r3,[[r5,#0]]'
GCC は line について不平を言ってldrh %[tmp2], [%2]
いますが、その理由がわかりません。私はLDRH
指示を見て、私の指示テンプレートが正しいように思えます。
Load memory halfword [15:0] from register address + 5-bit immediate offset
LDRH <Rd>, [<Rn>, #<immed_5> * 2]
ところで、これは私がこれをコンパイルするために使用しているコマンドです:
arm-none-linux-gnueabi-gcc -O2 -march=armv7-a -mthumb