RFR: 8259822: [PPC64] Support the prefixed instruction format added in POWER10

Kazunori Ogata ogatak at openjdk.java.net
Tue Jan 26 19:10:42 UTC 2021


On Thu, 21 Jan 2021 01:17:58 GMT, Corey Ashford <github.com+51754783+CoreyAshford at openjdk.org> wrote:

>> The POWER10 processor, which implements Power ISA 3.1 [1], supports new instruction formats where an instruction takes two 32bit words.  The first word is called prefix, and the instructions with prefix are called prefixed instructions.  With more bits in opcode and operand fields, POWER10 supports larger immediate value in an operand, as well as many new instructions.
>> 
>> This is the first changes to handle prefixed instructions, and this adds support of prefixed addi (= paddi) instruction as an example of prefix usage.  paddi accepts 34bit immediate value, while original addi accepts 16bit value.
>> 
>> [1] https://ibm.ent.box.com/s/hhjfw0x0lrbtyzmiaffnbxh2fuo0fog0
>
> src/hotspot/cpu/ppc/assembler_ppc.hpp line 1533:
> 
>> 1531:      int32_t* p_inst = (int32_t*)p;
>> 1532: 
>> 1533:      if (is_aligned(reinterpret_cast<uintptr_t>(p_inst+1), 64) && is_nop(*p_inst)) {
> 
> This test is a bit confusing.  Shouldn't is_paddi return false if p points at a nop (even if it precedes the paddi)?

"is_<instr>()" are the functions for testing instructions in the generated code and they are usually called in "assert()" or complex combination of if statements.  So if this function returns false when p points at nop, the assertions or the if-conditions need to handle the nop case and the code will become difficult to read.  Since the padding nop is a non-common case, I'd like to hide the existence of nop in this function.

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

PR: https://git.openjdk.java.net/jdk/pull/2095


More information about the hotspot-compiler-dev mailing list