8.108 --integer_literal_pools, --no_integer_literal_pools

コンパイラが、整数とアドレス定数をリテラルプールに配置するかどうかを 制御します。

--integer_literal_pools オプションを使用すると、 コンパイラが整数定数とアドレス定数を 1 つの命令に構成できない場合、 これらの定数をリテラルプールに配置することがあります。
** Section #1 '.text' (SHT_PROGBITS) [SHF_ALLOC + SHF_EXECINSTR]
    Size   : 12 bytes (alignment 4)
    Address: 0x00000000
			
    $a
    .text
    f
        0x00000000:    e59f0000    ....    LDR      r0,[pc,#0] ; [0x8] = 0xdeadbeef
        0x00000004:    e12fff1e    ../.    BX       lr
    $d
        0x00000008:    deadbeef    ....    DCD    3735928559
--no_integer_literal_pools オプションは、 MOVW 命令と MOVT 命令のシーケンスを使用してこれらの定数を構成するように コンパイラに指示します。
** Section #1 '.text' (SHT_PROGBITS) [SHF_ALLOC + SHF_EXECINSTR]
    Size   : 12 bytes (alignment 4)
    Address: 0x00000000
			
    $a
    .text
    f
        0x00000000:    e30b0eef    ....    MOV      r0,#0xbeef
        0x00000004:    e34d0ead    ..M.    MOVT     r0,#0xdead
        0x00000008:    e12fff1e    ../.    BX       lr
64 ビット整数は、2 つの MOVW 命令と 2 つの MOVT 命令で構成されています。

v6T2 より前のターゲットアーキテクチャに関しては、--no_integer_literal_pools オプションを使用できません。

デフォルト

デフォルトは --integer_literal_pools です。
--integer_literal_pools を明示的に指定しなかった場合、--execute_only--no_integer_literal_pools を意味します。

--execute_only--integer_literal_pools と組み合わせて使用しないで下さい。組み合わせて使用すると、コンパイラはリテラルプールを読み取り不能の実行専用コード領域に配置してしまいます。
関連する概念
4.21 リテラルプールに対するコンパイラサポート
関連する参考文書
8.178 --string_literal_pools、--no_string_literal_pools
8.18 --branch_tables、--no_branch_tables
8.82 --float_literal_pools、--no_float_literal_pools
8.77 --execute_only
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.