RFR: 8288300: AArch64: Remove the assertion in fmovs/fmovd(FloatRegister, FloatRegister)

Hao Sun haosun at openjdk.java.net
Wed Jun 15 04:17:00 UTC 2022


The assertion, i.e. src and dst must be different registers, was
introduced years ago. But I don't think it's needed.

This limitation was added in [1]. Frankly speaking, I don't know the
reason. But I guess the assertion is probably used for debugging,
raising one warning of fmovs/fmovd usage in the scenario of moving
element at index zero from one **vector** register, to one float-point
scalar register. If the "src" vector register and the "dst" float-point
scalar register are the same one, it introduces a side-effect, i.e. the
higher bits are cleared to zeros[2].

If so, I argue that
1) the assembler should align with the ISA.
2) compiler developers should be aware of the side-effect when they want
to use fmovs/fmovd, and they should guarantee "dst != src" if they like
to higher bits untouched, e.g., [3].

Hence, I think we can remove this unnecessary assertion.

[1] http://hg.openjdk.java.net/aarch64-port/jdk8/hotspot/rev/9baee4e65ac5
[2] https://developer.arm.com/documentation/ddi0596/2021-12/SIMD-FP-Instructions/FMOV--register---Floating-point-Move-register-without-conversion-?lang=en
[3] https://github.com/openjdk/jdk/blob/master/src/hotspot/cpu/aarch64/aarch64_sve.ad#L4899

-------------

Commit messages:
 - 8288300: AArch64: Remove the assertion in fmovs/fmovd(FloatRegister, FloatRegister)

Changes: https://git.openjdk.org/jdk/pull/9163/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=9163&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8288300
  Stats: 22 lines in 1 file changed: 0 ins; 14 del; 8 mod
  Patch: https://git.openjdk.org/jdk/pull/9163.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/9163/head:pull/9163

PR: https://git.openjdk.org/jdk/pull/9163


More information about the hotspot-compiler-dev mailing list