RFR: 8320682: [AArch64] C1 compilation fails with "Field too big for insn"
Andrew Haley
aph at openjdk.org
Wed Dec 6 11:29:34 UTC 2023
On Mon, 4 Dec 2023 14:19:10 GMT, Daniel Lundén <duke at openjdk.org> wrote:
> This changeset fixes an issue on aarch64 where addresses for float and double constants were sometimes out of range for PC-relative offsets using `adr`.
>
> Changes:
> - Fix the issue by replacing `adr` with `lea`.
> - Add a regression test.
>
> Thanks to @fisk and @xmas92 for the assistance.
>
> ### Testing
> Tests: tier1, tier2, tier3, tier4, tier5
> Platforms: windows-x64, linux-x64, linux-aarch64, macosx-x64, macosx-aarch64
The PC-relative ldr() instruction is designed for exactly this use case, and its range is +/-1MB. We use this form for constant loads into SIMD and FP registers, in C1 and C2. We could also use it for other constant loads too, and the code is there to do so, but we don't at the present time.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/16951#issuecomment-1842684289
More information about the hotspot-compiler-dev
mailing list