RFR: 8359965: Enable paired pushp and popp instruction usage for APX enabled CPUs [v2]
Jatin Bhateja
jbhateja at openjdk.org
Mon Jul 14 08:23:46 UTC 2025
On Wed, 2 Jul 2025 23:28:42 GMT, Srinivas Vamsi Parasa <sparasa at openjdk.org> wrote:
>> For a cleaner interface, I think we can also maintain a RAII style APXPushPopPairTracker in the stub snippets using push/pop instruction sequence and wrap the actual assembler call underneath. The idea here is to catch the balancing error upfront as PPX is purely a performance hint. Instructions with this hint have the same functional semantics as those without. PPX hints set by the compiler that violate the balancing rule may turn off the PPX
>> optimization, but they will not affect program semantics..
>>
>>
>> class APXPushPopPairTracker {
>> private:
>> int _counter;
>>
>> public:
>> APXPushPopPairTracker() _counter(0) {
>> }
>>
>> ~APXPushPopPairTracker() {
>> assert(_counter == 0, "Push/pop pair mismatch");
>> }
>>
>> void push(Register reg, bool has_matching_pop) {
>> if (has_matching_pop && VM_Version::supports_apx_f()) {
>> Assembler::pushp(reg);
>> incrementCounter();
>> } else {
>> Assembler::push(reg);
>> }
>> }
>> void pop(Register reg, bool has_matching_push) {
>> if (has_matching_push && VM_Version::supports_apx_f()) {
>> Assembler::popp(reg);
>> decrementCounter();
>> } else {
>> Assembler::pop(reg);
>> }
>> }
>> void incrementCounter() {
>> _counter++;
>> }
>> void decrementCounter() {
>> _counter--;
>> }
>> }
>
> Hi Jatin (@jatin-bhateja) and Vlad (@vpaprotsk),
>
> There's one more issue to be considered. The C++ PushPopTracker code will be run during the stub generation time. There are code bocks which do a single push onto the stack but due to multiple exit paths, there will be multiple pops as illustrated below. Will this reference counting approach not fail in such a scenario as the stub code is generated all at once during the stub generation phase?
>
>
> #begin stack frame
> push(r21)
>
> #exit condition 1
> pop(r21)
>
> # exit condition 2
> pop(r21)
There is no one size fits all soution, idea is to be smart whereever possible, by maintaining a fixed stack of registers populated during push operation we can delegate the responsibility of emitting pop instructions in reverse order to tracker, @vamsi-parasa for now I am ok with maintaining existing implimentation.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/25889#discussion_r2204183436
More information about the hotspot-dev
mailing list