1 /*
   2  * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
   3  * Copyright 2012, 2013 SAP AG. All rights reserved.
   4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   5  *
   6  * This code is free software; you can redistribute it and/or modify it
   7  * under the terms of the GNU General Public License version 2 only, as
   8  * published by the Free Software Foundation.
   9  *
  10  * This code is distributed in the hope that it will be useful, but WITHOUT
  11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  13  * version 2 for more details (a copy is included in the LICENSE file that
  14  * accompanied this code).
  15  *
  16  * You should have received a copy of the GNU General Public License version
  17  * 2 along with this work; if not, write to the Free Software Foundation,
  18  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  19  *
  20  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  21  * or visit www.oracle.com if you need additional information or have any
  22  * questions.
  23  *
  24  */
  25 
  26 #ifndef CPU_PPC_VM_FRAME_PPC_HPP
  27 #define CPU_PPC_VM_FRAME_PPC_HPP
  28 
  29 #include "runtime/synchronizer.hpp"
  30 #include "utilities/top.hpp"
  31 
  32 #ifndef CC_INTERP
  33 #error "CC_INTERP must be defined on PPC64"
  34 #endif
  35 
  36   //  C frame layout on PPC-64.
  37   //
  38   //  In this figure the stack grows upwards, while memory grows
  39   //  downwards. See "64-bit PowerPC ELF ABI Supplement Version 1.7",
  40   //  IBM Corp. (2003-10-29)
  41   //  (http://math-atlas.sourceforge.net/devel/assembly/PPC-elf64abi-1.7.pdf).
  42   //
  43   //  Square brackets denote stack regions possibly larger
  44   //  than a single 64 bit slot.
  45   //
  46   //  STACK:
  47   //    0       [C_FRAME]               <-- SP after prolog (mod 16 = 0)
  48   //            [C_FRAME]               <-- SP before prolog
  49   //            ...
  50   //            [C_FRAME]
  51   //
  52   //  C_FRAME:
  53   //    0       [ABI_112]
  54   //    112     CARG_9: outgoing arg 9 (arg_1 ... arg_8 via gpr_3 ... gpr_{10})
  55   //            ...
  56   //    40+M*8  CARG_M: outgoing arg M (M is the maximum of outgoing args taken over all call sites in the procedure)
  57   //            local 1
  58   //            ...
  59   //            local N
  60   //            spill slot for vector reg (16 bytes aligned)
  61   //            ...
  62   //            spill slot for vector reg
  63   //            alignment       (4 or 12 bytes)
  64   //    V       SR_VRSAVE
  65   //    V+4     spill slot for GR
  66   //    ...     ...
  67   //            spill slot for GR
  68   //            spill slot for FR
  69   //            ...
  70   //            spill slot for FR
  71   //
  72   //  ABI_48:
  73   //    0       caller's SP
  74   //    8       space for condition register (CR) for next call
  75   //    16      space for link register (LR) for next call
  76   //    24      reserved
  77   //    32      reserved
  78   //    40      space for TOC (=R2) register for next call
  79   //
  80   //  ABI_112:
  81   //    0       [ABI_48]
  82   //    48      CARG_1: spill slot for outgoing arg 1. used by next callee.
  83   //    ...     ...
  84   //    104     CARG_8: spill slot for outgoing arg 8. used by next callee.
  85   //
  86 
  87  public:
  88 
  89   // C frame layout
  90 
  91   enum {
  92     // stack alignment
  93     alignment_in_bytes = 16,
  94     // log_2(16*8 bits) = 7.
  95     log_2_of_alignment_in_bits = 7
  96   };
  97 
  98   // ABI_48:
  99   struct abi_48 {
 100     uint64_t callers_sp;
 101     uint64_t cr;                                  //_16
 102     uint64_t lr;
 103     uint64_t reserved1;                           //_16
 104     uint64_t reserved2;
 105     uint64_t toc;                                 //_16
 106     // nothing to add here!
 107     // aligned to frame::alignment_in_bytes (16)
 108   };
 109 
 110   enum {
 111     abi_48_size = sizeof(abi_48)
 112   };
 113 
 114   struct abi_112 : abi_48 {
 115     uint64_t carg_1;
 116     uint64_t carg_2;                              //_16
 117     uint64_t carg_3;
 118     uint64_t carg_4;                              //_16
 119     uint64_t carg_5;
 120     uint64_t carg_6;                              //_16
 121     uint64_t carg_7;
 122     uint64_t carg_8;                              //_16
 123     // aligned to frame::alignment_in_bytes (16)
 124   };
 125 
 126   enum {
 127     abi_112_size = sizeof(abi_112)
 128   };
 129 
 130   #define _abi(_component) \
 131           (offset_of(frame::abi_112, _component))
 132 
 133   struct abi_112_spill : abi_112 {
 134     // additional spill slots
 135     uint64_t spill_ret;
 136     uint64_t spill_fret;                          //_16
 137     // aligned to frame::alignment_in_bytes (16)
 138   };
 139 
 140   enum {
 141     abi_112_spill_size = sizeof(abi_112_spill)
 142   };
 143 
 144   #define _abi_112_spill(_component) \
 145           (offset_of(frame::abi_112_spill, _component))
 146 
 147   // non-volatile GPRs:
 148 
 149   struct spill_nonvolatiles {
 150     uint64_t r14;
 151     uint64_t r15;                                 //_16
 152     uint64_t r16;
 153     uint64_t r17;                                 //_16
 154     uint64_t r18;
 155     uint64_t r19;                                 //_16
 156     uint64_t r20;
 157     uint64_t r21;                                 //_16
 158     uint64_t r22;
 159     uint64_t r23;                                 //_16
 160     uint64_t r24;
 161     uint64_t r25;                                 //_16
 162     uint64_t r26;
 163     uint64_t r27;                                 //_16
 164     uint64_t r28;
 165     uint64_t r29;                                 //_16
 166     uint64_t r30;
 167     uint64_t r31;                                 //_16
 168 
 169     double f14;
 170     double f15;
 171     double f16;
 172     double f17;
 173     double f18;
 174     double f19;
 175     double f20;
 176     double f21;
 177     double f22;
 178     double f23;
 179     double f24;
 180     double f25;
 181     double f26;
 182     double f27;
 183     double f28;
 184     double f29;
 185     double f30;
 186     double f31;
 187 
 188     // aligned to frame::alignment_in_bytes (16)
 189   };
 190 
 191   enum {
 192     spill_nonvolatiles_size = sizeof(spill_nonvolatiles)
 193   };
 194 
 195   #define _spill_nonvolatiles_neg(_component) \
 196      (int)(-frame::spill_nonvolatiles_size + offset_of(frame::spill_nonvolatiles, _component))
 197 
 198   //  Frame layout for the Java interpreter on PPC64.
 199   //
 200   //  This frame layout provides a C-like frame for every Java frame.
 201   //
 202   //  In these figures the stack grows upwards, while memory grows
 203   //  downwards. Square brackets denote regions possibly larger than
 204   //  single 64 bit slots.
 205   //
 206   //  STACK (no JNI, no compiled code, no library calls,
 207   //         interpreter-loop is active):
 208   //    0       [InterpretMethod]
 209   //            [TOP_IJAVA_FRAME]
 210   //            [PARENT_IJAVA_FRAME]
 211   //            ...
 212   //            [PARENT_IJAVA_FRAME]
 213   //            [ENTRY_FRAME]
 214   //            [C_FRAME]
 215   //            ...
 216   //            [C_FRAME]
 217   //
 218   //  TOP_IJAVA_FRAME:
 219   //    0       [TOP_IJAVA_FRAME_ABI]
 220   //            alignment (optional)
 221   //            [operand stack]
 222   //            [monitors] (optional)
 223   //            [cInterpreter object]
 224   //            result, locals, and arguments are in parent frame!
 225   //
 226   //  PARENT_IJAVA_FRAME:
 227   //    0       [PARENT_IJAVA_FRAME_ABI]
 228   //            alignment (optional)
 229   //            [callee's Java result]
 230   //            [callee's locals w/o arguments]
 231   //            [outgoing arguments]
 232   //            [used part of operand stack w/o arguments]
 233   //            [monitors] (optional)
 234   //            [cInterpreter object]
 235   //
 236   //  ENTRY_FRAME:
 237   //    0       [PARENT_IJAVA_FRAME_ABI]
 238   //            alignment (optional)
 239   //            [callee's Java result]
 240   //            [callee's locals w/o arguments]
 241   //            [outgoing arguments]
 242   //            [ENTRY_FRAME_LOCALS]
 243   //
 244   //  PARENT_IJAVA_FRAME_ABI:
 245   //    0       [ABI_48]
 246   //            top_frame_sp
 247   //            initial_caller_sp
 248   //
 249   //  TOP_IJAVA_FRAME_ABI:
 250   //    0       [PARENT_IJAVA_FRAME_ABI]
 251   //            carg_3_unused
 252   //            carg_4_unused
 253   //            carg_5_unused
 254   //            carg_6_unused
 255   //            carg_7_unused
 256   //            frame_manager_lr
 257   //
 258 
 259   // PARENT_IJAVA_FRAME_ABI
 260 
 261   struct parent_ijava_frame_abi : abi_48 {
 262     // SOE registers.
 263     // C2i adapters spill their top-frame stack-pointer here.
 264     uint64_t top_frame_sp;                        //      carg_1
 265     // Sp of calling compiled frame before it was resized by the c2i
 266     // adapter or sp of call stub. Does not contain a valid value for
 267     // non-initial frames.
 268     uint64_t initial_caller_sp;                   //      carg_2
 269     // aligned to frame::alignment_in_bytes (16)
 270   };
 271 
 272   enum {
 273     parent_ijava_frame_abi_size = sizeof(parent_ijava_frame_abi)
 274   };
 275 
 276   #define _parent_ijava_frame_abi(_component) \
 277           (offset_of(frame::parent_ijava_frame_abi, _component))
 278 
 279   // TOP_IJAVA_FRAME_ABI
 280 
 281   struct top_ijava_frame_abi : parent_ijava_frame_abi {
 282     uint64_t carg_3_unused;                       //      carg_3
 283     uint64_t card_4_unused;                       //_16   carg_4
 284     uint64_t carg_5_unused;                       //      carg_5
 285     uint64_t carg_6_unused;                       //_16   carg_6
 286     uint64_t carg_7_unused;                       //      carg_7
 287     // Use arg8 for storing frame_manager_lr. The size of
 288     // top_ijava_frame_abi must match abi_112.
 289     uint64_t frame_manager_lr;                    //_16   carg_8
 290     // nothing to add here!
 291     // aligned to frame::alignment_in_bytes (16)
 292   };
 293 
 294   enum {
 295     top_ijava_frame_abi_size = sizeof(top_ijava_frame_abi)
 296   };
 297 
 298   #define _top_ijava_frame_abi(_component) \
 299           (offset_of(frame::top_ijava_frame_abi, _component))
 300 
 301   // ENTRY_FRAME
 302 
 303   struct entry_frame_locals {
 304     uint64_t call_wrapper_address;
 305     uint64_t result_address;                      //_16
 306     uint64_t result_type;
 307     uint64_t arguments_tos_address;               //_16
 308     // aligned to frame::alignment_in_bytes (16)
 309     uint64_t r[spill_nonvolatiles_size/sizeof(uint64_t)];
 310   };
 311 
 312   enum {
 313     entry_frame_locals_size = sizeof(entry_frame_locals)
 314   };
 315 
 316   #define _entry_frame_locals_neg(_component) \
 317     (int)(-frame::entry_frame_locals_size + offset_of(frame::entry_frame_locals, _component))
 318 
 319 
 320   //  Frame layout for JIT generated methods
 321   //
 322   //  In these figures the stack grows upwards, while memory grows
 323   //  downwards. Square brackets denote regions possibly larger than single
 324   //  64 bit slots.
 325   //
 326   //  STACK (interpreted Java calls JIT generated Java):
 327   //          [JIT_FRAME]                                <-- SP (mod 16 = 0)
 328   //          [TOP_IJAVA_FRAME]
 329   //         ...
 330   //
 331   //  JIT_FRAME (is a C frame according to PPC-64 ABI):
 332   //          [out_preserve]
 333   //          [out_args]
 334   //          [spills]
 335   //          [pad_1]
 336   //          [monitor] (optional)
 337   //       ...
 338   //          [monitor] (optional)
 339   //          [pad_2]
 340   //          [in_preserve] added / removed by prolog / epilog
 341   //
 342 
 343   // JIT_ABI (TOP and PARENT)
 344 
 345   struct jit_abi {
 346     uint64_t callers_sp;
 347     uint64_t cr;
 348     uint64_t lr;
 349     uint64_t toc;
 350     // Nothing to add here!
 351     // NOT ALIGNED to frame::alignment_in_bytes (16).
 352   };
 353 
 354   struct jit_out_preserve : jit_abi {
 355     // Nothing to add here!
 356   };
 357 
 358   struct jit_in_preserve {
 359     // Nothing to add here!
 360   };
 361 
 362   enum {
 363     jit_out_preserve_size = sizeof(jit_out_preserve),
 364     jit_in_preserve_size  = sizeof(jit_in_preserve)
 365   };
 366 
 367   struct jit_monitor {
 368     uint64_t monitor[1];
 369   };
 370 
 371   enum {
 372     jit_monitor_size = sizeof(jit_monitor),
 373   };
 374 
 375  private:
 376 
 377   //  STACK:
 378   //            ...
 379   //            [THIS_FRAME]             <-- this._sp (stack pointer for this frame)
 380   //            [CALLER_FRAME]           <-- this.fp() (_sp of caller's frame)
 381   //            ...
 382   //
 383 
 384   // frame pointer for this frame
 385   intptr_t* _fp;
 386 
 387   // The frame's stack pointer before it has been extended by a c2i adapter;
 388   // needed by deoptimization
 389   intptr_t* _unextended_sp;
 390   void adjust_unextended_sp();
 391 
 392  public:
 393 
 394   // Accessors for fields
 395   intptr_t* fp() const { return _fp; }
 396 
 397   // Accessors for ABIs
 398   inline abi_48* own_abi()     const { return (abi_48*) _sp; }
 399   inline abi_48* callers_abi() const { return (abi_48*) _fp; }
 400 
 401  private:
 402 
 403   // Find codeblob and set deopt_state.
 404   inline void find_codeblob_and_set_pc_and_deopt_state(address pc);
 405 
 406  public:
 407 
 408   // Constructors
 409   inline frame(intptr_t* sp);
 410   frame(intptr_t* sp, address pc);
 411   inline frame(intptr_t* sp, address pc, intptr_t* unextended_sp);
 412 
 413  private:
 414 
 415   intptr_t* compiled_sender_sp(CodeBlob* cb) const;
 416   address*  compiled_sender_pc_addr(CodeBlob* cb) const;
 417   address*  sender_pc_addr(void) const;
 418 
 419  public:
 420 
 421 #ifdef CC_INTERP
 422   // Additional interface for interpreter frames:
 423   inline interpreterState get_interpreterState() const;
 424 #endif
 425 
 426   // Size of a monitor in bytes.
 427   static int interpreter_frame_monitor_size_in_bytes();
 428 
 429   // The size of a cInterpreter object.
 430   static inline int interpreter_frame_cinterpreterstate_size_in_bytes();
 431 
 432  private:
 433 
 434   // PPC port: permgen stuff
 435   ConstantPoolCache** interpreter_frame_cpoolcache_addr() const;
 436 
 437  public:
 438 
 439   // Additional interface for entry frames:
 440   inline entry_frame_locals* get_entry_frame_locals() const {
 441     return (entry_frame_locals*) (((address) fp()) - entry_frame_locals_size);
 442   }
 443 
 444   enum {
 445     // normal return address is 1 bundle past PC
 446     pc_return_offset = 0
 447   };
 448 
 449 #endif // CPU_PPC_VM_FRAME_PPC_HPP