On Tue, 15 Nov 2022 00:25:46 GMT, Sandhya Viswanathan <sviswanat...@openjdk.org> wrote:
>> src/hotspot/cpu/x86/stubGenerator_x86_64_poly.cpp line 387: >> >>> 385: const Register t2 = r14; >>> 386: >>> 387: __ movq(a0, Address(limbs, 0)); >> >> I don't understand how it works. `limbs` comes directly from `c_rarg2` and >> contains raw oop. So, `Address(limbs, 0)` reads object mark word rather than >> the first element from the array. >> >> (Same situation in `poly1305_limbs_out`. And now I'm curious why doesn't >> object header corruption trigger a crash.) > > library_call.cpp takes care of that, it passes the address of 0'th element to > the stub. Ah, got it. Worth elaborating that in the comments. Otherwise, they confuse rather than help: // void processBlocks(byte[] input, int len, int[5] a, int[5] r) const Register input = rdi; //input+offset const Register length = rbx; const Register accumulator = rcx; const Register R = r8; ------------- PR: https://git.openjdk.org/jdk/pull/10582