8.82 --float_literal_pools、--no_float_literal_pools

コンパイラが、浮動小数点とベクタ定数をリテラルプールに配置するかどうかを 制御します。

--float_literal_pools オプションでは、ソースコードに浮動小数点定数またはベクタ定数がありハードウェアサポートが利用可能な場合、コンパイラは VFP 命令または NEON 命令を使用してリテラルプールからそれらの定数をロードするコードを生成します。
** Section #1 '.text' (SHT_PROGBITS) [SHF_ALLOC + SHF_EXECINSTR]
    Size   : 12 bytes (alignment 4)
    Address: 0x00000000

    $a
    .text
    main
        0x00000000:    ed9f0a00    ....    VLDR     s0,[pc,#0] ; [0x8] = 0x42280000
        0x00000004:    eafffffe    ....    B        f
    $d
        0x00000008:    42280000    ..(B    DCD    1109917696
--no_float_literal_pools オプションを使用すると、 コンパイラは、主要な命令セットロードを使用して定数をロードするコードを生成し、 浮動小数点数やベクタに変換します。
** Section #1 '.text' (SHT_PROGBITS) [SHF_ALLOC + SHF_EXECINSTR]
    Size   : 16 bytes (alignment 4)
    Address: 0x00000000

    $a
    .text
    main
        0x00000000:    e59f0004    ....    LDR      r0,[pc,#4] ; [0xc] = 0x42280000
        0x00000004:    ee000a10    ....    VMOV     s0,r0
        0x00000008:    eafffffe    ....    B        f
    $d
        0x0000000c:    42280000    ..(B    DCD    1109917696
--no_integer_literal_pools オプションも指定した場合、 コンパイラは、 MOVW および MOVT 命令のシーケンスを使用して、定数を構成します。
このオプションは、整数ベクタも制御します。

デフォルト

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

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