• Home
    • View
    • Login
    This page
    • Normal
    • Export PDF
    • Export Word
    • Attachments
    • Page Information

    Loading...
  1. Dashboard
  2. Port: PowerPC/AIX
  3. PowerPC/AIX Port
  4. Architecture of the OpenJDK PPC Port
  5. C2 compiler extensions and new optimizations

Page History

Versions Compared

Old Version 7

changes.mady.by.user Goetz Lindenmaier

Saved on May 13, 2013

compared with

New Version 8

changes.mady.by.user Goetz Lindenmaier

Saved on Oct 01, 2014

  • Previous Change: Difference between versions 6 and 7
  • Next Change: Difference between versions 8 and 9
  • View Page History

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The PPC port adds some minor extensions to the C2 compiler to support the PPC architecture.  We also implemented some new optimizations.

Extend adl/adlc by effect TEMP_DEF.

 

Adl is the language used to express code generation patterns in the C2 compiler of hotspot. Effects are used to specify additional properties of IR nodes that can not be derived from the match rules.  E.g., the USE_DEF effect allows to specify that a register used by a node and a register defined by the node must be identical, as required by two-address assembler instructions.

The new TEMP_DEF effect is similar to USE_DEF, except that a TEMP node will be generated that represents the USE.

With this effect one can express that the def'ed register must be different from the used ones corresponding to ins. Currently this is already possible by specifying effect TEMP for the operand with effect DEF from the match rule.

Introducing this new identifyer makes the code more readable and allows to specify the effect for nodes without match rules.

An example is an optimized encode node, if the base of the compressed heap is 35G aligned, i.e., the shifted narrow oop can be merged with the base by an or instruction.

On PPC we can shift and or with a single instruction, so we can implement Decode with these instructions:

mov Rdst = Rbase
rldimi Rdst = Rdst || (Rsrc << 3)

As the move is off the critical path, this is superior to do a shift and an add. Unfortunately we must guarantee that Rdst != Rsrc. which we do with a TEMP_DEF effect:

instruct decodeN(iRegPdst dst, iRegNsrc src) %{
    match(Set dst (DecodeN src));
    effect(TEMP_DEF dst);

ImplicitNullChecks on operating systems where the zero page is not read protected.

...

Overview
Content Tools
ThemeBuilder

Terms of Use
• License: GPLv2
• Privacy • Trademarks • Contact Us

Powered by a free Atlassian Confluence Open Source Project License granted to https://www.atlassian.com/software/views/opensource-community-additional-license-offer. Evaluate Confluence today.

  • Kolekti ThemeBuilder Powered by Atlassian Confluence 8.5.23
  • Kolekti ThemeBuilder printed.by.atlassian.confluence
  • Report a bug
  • Atlassian News
Atlassian
Kolekti ThemeBuilder EngineAtlassian Confluence
{"serverDuration": 222, "requestCorrelationId": "004097dc2e3fa4cd"}