1.4.5. 例 2 - パック構造体

この例では、ARMv6 と ARMv6 より前のアーキテクチャ用にコンパイルを実行したときに、パック構造体に対して異なる命令が生成されることを示します。

__packed struct{
    char ch;
    short sh;
    int i;
} foo;

signed char unpack()
{
    return (signed char)foo.i;
}

ARMv6 より前のアーキテクチャのコンパイル

--cpu 5 を使用してコンパイルすると、以下のようなコードが生成されます。

unpack PROC
       LDR      r0,|L1.24|
       PUSH     {r4,lr}
       BL       __aeabi_uread4
       LSL      r0,r0,#24
       ASR      r0,r0,#24
       POP      {r4,pc}
|L1.24|
       DCD      ||.data$0|| + 3
       ENDP

ARMv6 アーキテクチャのコンパイル

--cpu 6 を使用してコンパイルすると、以下のようなコードが生成されます。

unpack PROC
        LDR      r0,|L1.16|
        LDR      r0,[r0,#3]
        SXTB     r0,r0
    BX   lr
|L1.16|
        DCD      ||.data$0||
        ENDP
Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0203GJ
Non-Confidential