RFR (M): 8144748: Move assembler/macroAssembler inline function definitions to corresponding inline.hpp files

Mikael Vidstedt mikael.vidstedt at oracle.com
Fri Dec 4 20:23:01 UTC 2015


Please review this change which moves a large-ish number of function 
definitions/bodies from assembler_sparc.hpp and macroAssembler_sparc.hpp 
to the corresponding assembler_sparc.inline.hpp and 
macroAssembler_sparc.inline.hpp files.

Bug: https://bugs.openjdk.java.net/browse/JDK-8144748
Webrev: http://cr.openjdk.java.net/~mikael/webrevs/8144748/webrev.00/webrev/


* Background

The specific problem which triggered this change was the following 
pattern in assembler_sparc.hpp:

class Assembler : ... {
...
    inline void emit_int32(int);
    inline void emit_data(int x) { emit_data(x); }
...
}

If assembler_sparc.hpp is ever included directly without including 
assembler_sparc.inline.hpp this will lead to a use without definition, 
since emit_int32 is only defined in assembler_sparc.inline.hpp. The same 
pattern is true for almost all of the inline functions in 
assembler_sparc/macroAssembler_sparc.

In general, inline functions (apart from trivial ones) should be defined 
in the inline.hpp file and any .cpp file actually making use of them 
should include the inline.hpp file instead. In this specific case, for 
whatever reason, it seems to be working well with Solaris Studio, but 
GCC is generating an error.


* About the change

The change here is very mechanical:

for every relevant function F:
* add "inline" keyword if needed
* copy function to inline.hpp - trying to place it in the Right Place(tm)
* add class prefix (Assembler:: or MacroAssembler::)
* remove potential default parameter values
* remove function body from .hpp file

In a few cases I took the liberty of updating the indentation where it 
seemed off.

Btw, does anybody know why ret & retl are only inlined in PRODUCT builds?

Cheers,
Mikael



More information about the hotspot-compiler-dev mailing list