RFR: 8359965: Enable paired pushp and popp instruction usage for APX enabled CPUs

Jatin Bhateja jbhateja at openjdk.org
Tue Jul 1 06:45:42 UTC 2025


On Thu, 19 Jun 2025 05:15:40 GMT, Srinivas Vamsi Parasa <sparasa at openjdk.org> wrote:

> The goal of this PR is to enhance the existing x86 assembly stubs using PUSH and POP instructions with paired PUSHP/POPP instructions which are part of Intel APX technology.
> 
> In Intel APX, the PUSHP and POPP instructions are modern, compact replacements for the legacy PUSH and POP, designed to work seamlessly with the expanded set of 32 general-purpose registers (R0–R31). Unlike their predecessors, they use the new APX (REX2-based) encoding, enabling more uniform and efficient instruction formats. These instructions improve code density, simplify register access, and are optimized for performance on APX-enabled CPUs.
> 
> Pairing PUSHP and POPP in Intel APX provides CPU-level benefits such as more efficient instruction decoding, better stack pointer tracking, and improved register dependency management. Their uniform encoding allows for streamlined execution, reduced pipeline stalls, and potential micro-op fusion, all of which enhance performance and power efficiency. This pairing helps the processor optimize speculative execution and register lifetimes, making code faster and more scalable on modern architectures.

src/hotspot/cpu/x86/macroAssembler_x86.cpp line 800:

> 798: void MacroAssembler::push(Register src, bool is_pair) {
> 799:   if (is_pair && VM_Version::supports_apx_f()) {
> 800:     pushp(src);

What does is_pair signify here ? You are just pushing one register. Do you intend to use has_matching_pop ?

src/hotspot/cpu/x86/macroAssembler_x86.cpp line 807:

> 805: 
> 806: void MacroAssembler::pop(Register dst, bool is_pair) {
> 807:   if (is_pair && VM_Version::supports_apx_f()) {

Same as above, new argument suggestion: please use has_matching_push.
I understand your purpose here is to delegate the responsibility of balancing of PPX pair to the user.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/25889#discussion_r2176508727
PR Review Comment: https://git.openjdk.org/jdk/pull/25889#discussion_r2176511119


More information about the hotspot-compiler-dev mailing list