8.109 --integer_literal_pools, --no_integer_literal_pools

Controls whether the compiler places integer and address constants in literal pools.

With the --integer_literal_pools option, when the compiler cannot construct integer and address constants in a single instruction, it often places them in literal pools:

** 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

The --no_integer_literal_pools option instructs the compiler to use sequences of MOVW and MOVT instructions to construct these constants:

** 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-bit integers are constructed with two MOVW instructions and two MOVT instructions.

Note:

You cannot use the --no_integer_literal_pools option with target architectures earlier than v6T2.

Default

The default is --integer_literal_pools.

--execute_only implies --no_integer_literal_pools, unless --integer_literal_pools is explicitly specified.

Note:

Do not use --execute_only in conjunction with --integer_literal_pools. If you do, then the compiler places the literal pool in an unreadable, execute-only code region.
Non-ConfidentialPDF file icon PDF versionARM DUI0472M
Copyright © 2010-2016 ARM Limited or its affiliates. All rights reserved.