[jdk11u-dev] RFR: 8248238: Implementation: JEP 388: Windows AArch64 Support [v3]

Vladimir Kempik vkempik at openjdk.java.net
Thu Sep 2 22:13:26 UTC 2021


On Tue, 31 Aug 2021 13:18:50 GMT, Reka Kovacs <github.com+25946952+rnkovacs at openjdk.org> wrote:

>> Main commit of the Windows/AArch64 port.
>> 
>> Also fixes [JDK-8272181](https://bugs.openjdk.java.net/browse/JDK-8272181) by adding [`src/hotspot/os_cpu/windows_aarch64/pauth_windows_aarch64.inline.hpp`](https://github.com/openjdk/jdk11u-dev/pull/301/files#diff-235302dc4618158c4f75771ebbb6f0e4beeee5daf0a537b03ee4253a711268c6), which is needed for a successful Windows-AArch64 build.
>> 
>> Depends on #274 and #299.
>
> Reka Kovacs has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains one commit:
> 
>   Backport 9604ee82690f89320614b37bfef4178abc869777

So it's
void MacroAssembler::stop(const char* msg) {
 address ip = pc();
 pusha();
 movptr(c_rarg0, (uintptr_t)(address)msg);
 movptr(c_rarg1, (uintptr_t)(address)ip);
 mov(c_rarg2, sp);
 mov(c_rarg3, CAST_FROM_FN_PTR(address, MacroAssembler::debug64));
 blr(c_rarg3);
 hlt(0);
}
where pusha is :

void MacroAssembler::pusha() {
  push(0x7fffffff, sp);
}

where push is:

// Push lots of registers in the bit set supplied.  Don't push sp.
// Return the number of words pushed
int MacroAssembler::push(unsigned int bitset, Register stack) {
  int words_pushed = 0;

  // Scan bitset to accumulate register pairs
  unsigned char regs[32];
  int count = 0;
  for (int reg = 0; reg <= 30; reg++) {
    if (1 & bitset)
      regs[count++] = reg;
    bitset >>= 1;
  }
...

@theRealAph could you please suggest, do we need to change the mask in pusha for win-arm64/mac-arm64 to not save r18 by pusha ?

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

PR: https://git.openjdk.java.net/jdk11u-dev/pull/301


More information about the jdk-updates-dev mailing list