products/Sources/formale Sprachen/JAVA/openjdk-20-36_src/src/hotspot/cpu/ppc image not shown  

Quellcode-Bibliothek

© Kompilation durch diese Firma

[Weder Korrektheit noch Funktionsfähigkeit der Software werden zugesichert.]

Datei: register_ppc.hpp   Sprache: C

/*
 * Copyright (c) 2000, 2022, Oracle and/or its affiliates. All rights reserved.
 * Copyright (c) 2012, 2022 SAP SE. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 *
 */


#ifndef CPU_PPC_REGISTER_PPC_HPP
#define CPU_PPC_REGISTER_PPC_HPP

#include "asm/register.hpp"

// forward declaration
class VMRegImpl;
typedef VMRegImpl* VMReg;

//  PPC64 registers
//
//  See "64-bit PowerPC ELF ABI Supplement 1.7", IBM Corp. (2003-10-29).
//  (http://math-atlas.sourceforge.net/devel/assembly/PPC-elf64abi-1.7.pdf)
//
//  r0        Register used in function prologs (volatile)
//  r1        Stack pointer (nonvolatile)
//  r2        TOC pointer (volatile)
//  r3        Parameter and return value (volatile)
//  r4-r10    Function parameters (volatile)
//  r11       Register used in calls by pointer and as an environment pointer for languages which require one (volatile)
//  r12       Register used for exception handling and glink code (volatile)
//  r13       Reserved for use as system thread ID
//  r14-r31   Local variables (nonvolatile)
//
//  f0        Scratch register (volatile)
//  f1-f4     Floating point parameters and return value (volatile)
//  f5-f13    Floating point parameters (volatile)
//  f14-f31   Floating point values (nonvolatile)
//
//  LR        Link register for return address (volatile)
//  CTR       Loop counter (volatile)
//  XER       Fixed point exception register (volatile)
//  FPSCR     Floating point status and control register (volatile)
//
//  CR0-CR1   Condition code fields (volatile)
//  CR2-CR4   Condition code fields (nonvolatile)
//  CR5-CR7   Condition code fields (volatile)
//
//  ----------------------------------------------
//  On processors with the VMX feature:
//  v0-v1     Volatile scratch registers
//  v2-v13    Volatile vector parameters registers
//  v14-v19   Volatile scratch registers
//  v20-v31   Non-volatile registers
//  vrsave    Non-volatile 32-bit register
//
//  ----------------------------------------------
//  On processors with VSX feature:
//  vs0-31    Alias for f0-f31 (64 bit, see above)
//  vs32-63   Alias for v0-31 (128 bit, see above)


// The implementation of integer registers for the Power architecture
class Register {
  int _encoding;
 public:
  enum {
    number_of_registers = 32
  };

  constexpr Register(int encoding = -1) : _encoding(encoding) {}
  bool operator==(const Register rhs) const { return _encoding == rhs._encoding; }
  bool operator!=(const Register rhs) const { return _encoding != rhs._encoding; }
  const Register* operator->() const { return this; }

  // general construction
  inline constexpr friend Register as_Register(int encoding);

  // accessors
  int encoding() const { assert(is_valid(), "invalid register"); return _encoding; }
  inline VMReg as_VMReg() const;
  Register successor() const { return Register(encoding() + 1); }

  // testers
  bool is_valid()       const { return ( 0 <= _encoding && _encoding <  number_of_registers); }
  bool is_volatile()    const { return ( 0 <= _encoding && _encoding <= 13 ); }
  bool is_nonvolatile() const { return (14 <= _encoding && _encoding <= 31 ); }

  const char* name() const;
};

inline constexpr Register as_Register(int encoding) {
  assert(encoding >= -1 && encoding < 32, "bad register encoding");
  return Register(encoding);
}

// The integer registers of the PPC architecture
constexpr Register noreg = as_Register(-1);

constexpr Register  R0 = as_Register( 0);
constexpr Register  R1 = as_Register( 1);
constexpr Register  R2 = as_Register( 2);
constexpr Register  R3 = as_Register( 3);
constexpr Register  R4 = as_Register( 4);
constexpr Register  R5 = as_Register( 5);
constexpr Register  R6 = as_Register( 6);
constexpr Register  R7 = as_Register( 7);
constexpr Register  R8 = as_Register( 8);
constexpr Register  R9 = as_Register( 9);
constexpr Register R10 = as_Register(10);
constexpr Register R11 = as_Register(11);
constexpr Register R12 = as_Register(12);
constexpr Register R13 = as_Register(13);
constexpr Register R14 = as_Register(14);
constexpr Register R15 = as_Register(15);
constexpr Register R16 = as_Register(16);
constexpr Register R17 = as_Register(17);
constexpr Register R18 = as_Register(18);
constexpr Register R19 = as_Register(19);
constexpr Register R20 = as_Register(20);
constexpr Register R21 = as_Register(21);
constexpr Register R22 = as_Register(22);
constexpr Register R23 = as_Register(23);
constexpr Register R24 = as_Register(24);
constexpr Register R25 = as_Register(25);
constexpr Register R26 = as_Register(26);
constexpr Register R27 = as_Register(27);
constexpr Register R28 = as_Register(28);
constexpr Register R29 = as_Register(29);
constexpr Register R30 = as_Register(30);
constexpr Register R31 = as_Register(31);


// The implementation of condition register(s) for the PPC architecture
class ConditionRegister {
  int _encoding;
 public:
  enum {
    number_of_registers = 8
  };

  constexpr ConditionRegister(int encoding = -1) : _encoding(encoding) {}
  bool operator==(const ConditionRegister rhs) const { return _encoding == rhs._encoding; }
  bool operator!=(const ConditionRegister rhs) const { return _encoding != rhs._encoding; }
  const ConditionRegister* operator->() const { return this; }

  // construction.
  inline constexpr friend ConditionRegister as_ConditionRegister(int encoding);

  // accessors
  int encoding() const { assert(is_valid(), "invalid register"); return _encoding; }
  inline VMReg as_VMReg() const;

  // testers
  bool is_valid()       const { return (0 <= _encoding && _encoding <  number_of_registers); }
  bool is_nonvolatile() const { return (2 <= _encoding && _encoding <= 4 );  }

  const char* name() const;
};

inline constexpr ConditionRegister as_ConditionRegister(int encoding) {
  assert(encoding >= 0 && encoding < 8, "bad condition register encoding");
  return ConditionRegister(encoding);
}

constexpr ConditionRegister CCR0 = as_ConditionRegister(0);
constexpr ConditionRegister CCR1 = as_ConditionRegister(1);
constexpr ConditionRegister CCR2 = as_ConditionRegister(2);
constexpr ConditionRegister CCR3 = as_ConditionRegister(3);
constexpr ConditionRegister CCR4 = as_ConditionRegister(4);
constexpr ConditionRegister CCR5 = as_ConditionRegister(5);
constexpr ConditionRegister CCR6 = as_ConditionRegister(6);
constexpr ConditionRegister CCR7 = as_ConditionRegister(7);


class VectorSRegister;

// The implementation of float registers for the PPC architecture
class FloatRegister {
  int _encoding;
 public:
  enum {
    number_of_registers = 32
  };

  constexpr FloatRegister(int encoding = -1) : _encoding(encoding) {}
  bool operator==(const FloatRegister rhs) const { return _encoding == rhs._encoding; }
  bool operator!=(const FloatRegister rhs) const { return _encoding != rhs._encoding; }
  const FloatRegister* operator->() const { return this; }

  // construction
  inline constexpr friend FloatRegister as_FloatRegister(int encoding);

  // accessors
  int encoding() const { assert(is_valid(), "invalid register"); return _encoding; }
  inline VMReg as_VMReg() const;
  FloatRegister successor() const { return FloatRegister(encoding() + 1); }

  // testers
  bool is_valid() const { return (0 <= _encoding && _encoding < number_of_registers); }

  const char* name() const;

  // convert to VSR
  VectorSRegister to_vsr() const;
};

inline constexpr FloatRegister as_FloatRegister(int encoding) {
  assert(encoding >= -1 && encoding < 32, "bad float register encoding");
  return FloatRegister(encoding);
}

// The float registers of the PPC architecture
constexpr FloatRegister fnoreg = as_FloatRegister(-1);

constexpr FloatRegister  F0 = as_FloatRegister( 0);
constexpr FloatRegister  F1 = as_FloatRegister( 1);
constexpr FloatRegister  F2 = as_FloatRegister( 2);
constexpr FloatRegister  F3 = as_FloatRegister( 3);
constexpr FloatRegister  F4 = as_FloatRegister( 4);
constexpr FloatRegister  F5 = as_FloatRegister( 5);
constexpr FloatRegister  F6 = as_FloatRegister( 6);
constexpr FloatRegister  F7 = as_FloatRegister( 7);
constexpr FloatRegister  F8 = as_FloatRegister( 8);
constexpr FloatRegister  F9 = as_FloatRegister( 9);
constexpr FloatRegister F10 = as_FloatRegister(10);
constexpr FloatRegister F11 = as_FloatRegister(11);
constexpr FloatRegister F12 = as_FloatRegister(12);
constexpr FloatRegister F13 = as_FloatRegister(13);
constexpr FloatRegister F14 = as_FloatRegister(14);
constexpr FloatRegister F15 = as_FloatRegister(15);
constexpr FloatRegister F16 = as_FloatRegister(16);
constexpr FloatRegister F17 = as_FloatRegister(17);
constexpr FloatRegister F18 = as_FloatRegister(18);
constexpr FloatRegister F19 = as_FloatRegister(19);
constexpr FloatRegister F20 = as_FloatRegister(20);
constexpr FloatRegister F21 = as_FloatRegister(21);
constexpr FloatRegister F22 = as_FloatRegister(22);
constexpr FloatRegister F23 = as_FloatRegister(23);
constexpr FloatRegister F24 = as_FloatRegister(24);
constexpr FloatRegister F25 = as_FloatRegister(25);
constexpr FloatRegister F26 = as_FloatRegister(26);
constexpr FloatRegister F27 = as_FloatRegister(27);
constexpr FloatRegister F28 = as_FloatRegister(28);
constexpr FloatRegister F29 = as_FloatRegister(29);
constexpr FloatRegister F30 = as_FloatRegister(30);
constexpr FloatRegister F31 = as_FloatRegister(31);


// The implementation of special registers for the Power architecture (LR, CTR and friends)
class SpecialRegister {
  int _encoding;
 public:
  enum {
    number_of_registers = 6
  };

  constexpr SpecialRegister(int encoding = -1) : _encoding(encoding) {}
  bool operator==(const SpecialRegister rhs) const { return _encoding == rhs._encoding; }
  bool operator!=(const SpecialRegister rhs) const { return _encoding != rhs._encoding; }
  const SpecialRegister* operator->() const { return this; }

  // construction
  inline constexpr friend SpecialRegister as_SpecialRegister(int encoding);

  // accessors
  int encoding() const { assert(is_valid(), "invalid register"); return _encoding; }
  inline VMReg as_VMReg() const;

  // testers
  bool is_valid() const { return (0 <= _encoding && _encoding < number_of_registers); }

  const char* name() const;
};

inline constexpr SpecialRegister as_SpecialRegister(int encoding) {
  return SpecialRegister(encoding);
}

// The special registers of the PPC architecture
constexpr SpecialRegister SR_XER     = as_SpecialRegister(0);
constexpr SpecialRegister SR_LR      = as_SpecialRegister(1);
constexpr SpecialRegister SR_CTR     = as_SpecialRegister(2);
constexpr SpecialRegister SR_VRSAVE  = as_SpecialRegister(3);
constexpr SpecialRegister SR_SPEFSCR = as_SpecialRegister(4);
constexpr SpecialRegister SR_PPR     = as_SpecialRegister(5);


// The implementation of vector registers for the Power architecture
class VectorRegister {
  int _encoding;
 public:
  enum {
    number_of_registers = 32
  };

  constexpr VectorRegister(int encoding = -1) : _encoding(encoding) {}
  bool operator==(const VectorRegister rhs) const { return _encoding == rhs._encoding; }
  bool operator!=(const VectorRegister rhs) const { return _encoding != rhs._encoding; }
  const VectorRegister* operator->() const { return this; }

  // construction
  inline constexpr friend VectorRegister as_VectorRegister(int encoding);

  // accessors
  int encoding()  const { assert(is_valid(), "invalid register"); return _encoding; }

  // testers
  bool is_valid() const { return (0 <= _encoding && _encoding < number_of_registers); }

  const char* name() const;

  // convert to VSR
  VectorSRegister to_vsr() const;
};

inline constexpr VectorRegister as_VectorRegister(int encoding) {
  return VectorRegister(encoding);
}

// The Vector registers of the Power architecture
constexpr VectorRegister vnoreg = as_VectorRegister(-1);

constexpr VectorRegister  VR0 = as_VectorRegister( 0);
constexpr VectorRegister  VR1 = as_VectorRegister( 1);
constexpr VectorRegister  VR2 = as_VectorRegister( 2);
constexpr VectorRegister  VR3 = as_VectorRegister( 3);
constexpr VectorRegister  VR4 = as_VectorRegister( 4);
constexpr VectorRegister  VR5 = as_VectorRegister( 5);
constexpr VectorRegister  VR6 = as_VectorRegister( 6);
constexpr VectorRegister  VR7 = as_VectorRegister( 7);
constexpr VectorRegister  VR8 = as_VectorRegister( 8);
constexpr VectorRegister  VR9 = as_VectorRegister( 9);
constexpr VectorRegister VR10 = as_VectorRegister(10);
constexpr VectorRegister VR11 = as_VectorRegister(11);
constexpr VectorRegister VR12 = as_VectorRegister(12);
constexpr VectorRegister VR13 = as_VectorRegister(13);
constexpr VectorRegister VR14 = as_VectorRegister(14);
constexpr VectorRegister VR15 = as_VectorRegister(15);
constexpr VectorRegister VR16 = as_VectorRegister(16);
constexpr VectorRegister VR17 = as_VectorRegister(17);
constexpr VectorRegister VR18 = as_VectorRegister(18);
constexpr VectorRegister VR19 = as_VectorRegister(19);
constexpr VectorRegister VR20 = as_VectorRegister(20);
constexpr VectorRegister VR21 = as_VectorRegister(21);
constexpr VectorRegister VR22 = as_VectorRegister(22);
constexpr VectorRegister VR23 = as_VectorRegister(23);
constexpr VectorRegister VR24 = as_VectorRegister(24);
constexpr VectorRegister VR25 = as_VectorRegister(25);
constexpr VectorRegister VR26 = as_VectorRegister(26);
constexpr VectorRegister VR27 = as_VectorRegister(27);
constexpr VectorRegister VR28 = as_VectorRegister(28);
constexpr VectorRegister VR29 = as_VectorRegister(29);
constexpr VectorRegister VR30 = as_VectorRegister(30);
constexpr VectorRegister VR31 = as_VectorRegister(31);


// The implementation of Vector-Scalar (VSX) registers on POWER architecture.
class VectorSRegister {
  int _encoding;
 public:
  enum {
    number_of_registers = 64
  };

  constexpr VectorSRegister(int encoding = -1) : _encoding(encoding) {}
  bool operator==(const VectorSRegister rhs) const { return _encoding == rhs._encoding; }
  bool operator!=(const VectorSRegister rhs) const { return _encoding != rhs._encoding; }
  const VectorSRegister* operator->() const { return this; }

  // construction
  inline constexpr friend VectorSRegister as_VectorSRegister(int encoding);

  // accessors
  int encoding() const { assert(is_valid(), "invalid register"); return _encoding; }
  inline VMReg as_VMReg() const;

  // testers
  bool is_valid() const { return (0 <= _encoding && _encoding < number_of_registers); }

  const char* name() const;

  // convert to VR
  VectorRegister to_vr() const;
};

inline constexpr VectorSRegister as_VectorSRegister(int encoding) {
  return VectorSRegister(encoding);
}

// The Vector-Scalar (VSX) registers of the POWER architecture.
constexpr VectorSRegister vsnoreg = as_VectorSRegister(-1);

constexpr VectorSRegister  VSR0 = as_VectorSRegister( 0);
constexpr VectorSRegister  VSR1 = as_VectorSRegister( 1);
constexpr VectorSRegister  VSR2 = as_VectorSRegister( 2);
constexpr VectorSRegister  VSR3 = as_VectorSRegister( 3);
constexpr VectorSRegister  VSR4 = as_VectorSRegister( 4);
constexpr VectorSRegister  VSR5 = as_VectorSRegister( 5);
constexpr VectorSRegister  VSR6 = as_VectorSRegister( 6);
constexpr VectorSRegister  VSR7 = as_VectorSRegister( 7);
constexpr VectorSRegister  VSR8 = as_VectorSRegister( 8);
constexpr VectorSRegister  VSR9 = as_VectorSRegister( 9);
constexpr VectorSRegister VSR10 = as_VectorSRegister(10);
constexpr VectorSRegister VSR11 = as_VectorSRegister(11);
constexpr VectorSRegister VSR12 = as_VectorSRegister(12);
constexpr VectorSRegister VSR13 = as_VectorSRegister(13);
constexpr VectorSRegister VSR14 = as_VectorSRegister(14);
constexpr VectorSRegister VSR15 = as_VectorSRegister(15);
constexpr VectorSRegister VSR16 = as_VectorSRegister(16);
constexpr VectorSRegister VSR17 = as_VectorSRegister(17);
constexpr VectorSRegister VSR18 = as_VectorSRegister(18);
constexpr VectorSRegister VSR19 = as_VectorSRegister(19);
constexpr VectorSRegister VSR20 = as_VectorSRegister(20);
constexpr VectorSRegister VSR21 = as_VectorSRegister(21);
constexpr VectorSRegister VSR22 = as_VectorSRegister(22);
constexpr VectorSRegister VSR23 = as_VectorSRegister(23);
constexpr VectorSRegister VSR24 = as_VectorSRegister(24);
constexpr VectorSRegister VSR25 = as_VectorSRegister(25);
constexpr VectorSRegister VSR26 = as_VectorSRegister(26);
constexpr VectorSRegister VSR27 = as_VectorSRegister(27);
constexpr VectorSRegister VSR28 = as_VectorSRegister(28);
constexpr VectorSRegister VSR29 = as_VectorSRegister(29);
constexpr VectorSRegister VSR30 = as_VectorSRegister(30);
constexpr VectorSRegister VSR31 = as_VectorSRegister(31);
constexpr VectorSRegister VSR32 = as_VectorSRegister(32);
constexpr VectorSRegister VSR33 = as_VectorSRegister(33);
constexpr VectorSRegister VSR34 = as_VectorSRegister(34);
constexpr VectorSRegister VSR35 = as_VectorSRegister(35);
constexpr VectorSRegister VSR36 = as_VectorSRegister(36);
constexpr VectorSRegister VSR37 = as_VectorSRegister(37);
constexpr VectorSRegister VSR38 = as_VectorSRegister(38);
constexpr VectorSRegister VSR39 = as_VectorSRegister(39);
constexpr VectorSRegister VSR40 = as_VectorSRegister(40);
constexpr VectorSRegister VSR41 = as_VectorSRegister(41);
constexpr VectorSRegister VSR42 = as_VectorSRegister(42);
constexpr VectorSRegister VSR43 = as_VectorSRegister(43);
constexpr VectorSRegister VSR44 = as_VectorSRegister(44);
constexpr VectorSRegister VSR45 = as_VectorSRegister(45);
constexpr VectorSRegister VSR46 = as_VectorSRegister(46);
constexpr VectorSRegister VSR47 = as_VectorSRegister(47);
constexpr VectorSRegister VSR48 = as_VectorSRegister(48);
constexpr VectorSRegister VSR49 = as_VectorSRegister(49);
constexpr VectorSRegister VSR50 = as_VectorSRegister(50);
constexpr VectorSRegister VSR51 = as_VectorSRegister(51);
constexpr VectorSRegister VSR52 = as_VectorSRegister(52);
constexpr VectorSRegister VSR53 = as_VectorSRegister(53);
constexpr VectorSRegister VSR54 = as_VectorSRegister(54);
constexpr VectorSRegister VSR55 = as_VectorSRegister(55);
constexpr VectorSRegister VSR56 = as_VectorSRegister(56);
constexpr VectorSRegister VSR57 = as_VectorSRegister(57);
constexpr VectorSRegister VSR58 = as_VectorSRegister(58);
constexpr VectorSRegister VSR59 = as_VectorSRegister(59);
constexpr VectorSRegister VSR60 = as_VectorSRegister(60);
constexpr VectorSRegister VSR61 = as_VectorSRegister(61);
constexpr VectorSRegister VSR62 = as_VectorSRegister(62);
constexpr VectorSRegister VSR63 = as_VectorSRegister(63);


// Need to know the total number of registers of all sorts for SharedInfo.
// Define a class that exports it.
class ConcreteRegisterImpl : public AbstractRegisterImpl {
 public:
  enum {
    max_gpr = Register::number_of_registers * 2,
    max_fpr = max_gpr + FloatRegister::number_of_registers * 2,
    max_vsr = max_fpr + VectorSRegister::number_of_registers,
    max_cnd = max_vsr + ConditionRegister::number_of_registers,
    max_spr = max_cnd + SpecialRegister::number_of_registers,
    // This number must be large enough to cover REG_COUNT (defined by c2) registers.
    // There is no requirement that any ordering here matches any ordering c2 gives
    // it's optoregs.
    number_of_registers = max_spr
  };
};

// Common register declarations used in assembler code.
constexpr Register R0_SCRATCH = R0;  // volatile
constexpr Register R1_SP      = R1;  // non-volatile
constexpr Register R2_TOC     = R2;  // volatile
constexpr Register R3_RET     = R3;  // volatile
constexpr Register R3_ARG1    = R3;  // volatile
constexpr Register R4_ARG2    = R4;  // volatile
constexpr Register R5_ARG3    = R5;  // volatile
constexpr Register R6_ARG4    = R6;  // volatile
constexpr Register R7_ARG5    = R7;  // volatile
constexpr Register R8_ARG6    = R8;  // volatile
constexpr Register R9_ARG7    = R9;  // volatile
constexpr Register R10_ARG8   = R10; // volatile
constexpr FloatRegister F0_SCRATCH = F0;  // volatile
constexpr FloatRegister F1_RET     = F1;  // volatile
constexpr FloatRegister F1_ARG1    = F1;  // volatile
constexpr FloatRegister F2_ARG2    = F2;  // volatile
constexpr FloatRegister F3_ARG3    = F3;  // volatile
constexpr FloatRegister F4_ARG4    = F4;  // volatile
constexpr FloatRegister F5_ARG5    = F5;  // volatile
constexpr FloatRegister F6_ARG6    = F6;  // volatile
constexpr FloatRegister F7_ARG7    = F7;  // volatile
constexpr FloatRegister F8_ARG8    = F8;  // volatile
constexpr FloatRegister F9_ARG9    = F9;  // volatile
constexpr FloatRegister F10_ARG10  = F10; // volatile
constexpr FloatRegister F11_ARG11  = F11; // volatile
constexpr FloatRegister F12_ARG12  = F12; // volatile
constexpr FloatRegister F13_ARG13  = F13; // volatile

// Register declarations to be used in frame manager assembly code.
// Use only non-volatile registers in order to keep values across C-calls.
constexpr Register R14_bcp       = R14;
constexpr Register R15_esp       = R15;      // slot below top of expression stack for ld/st with update
constexpr FloatRegister F15_ftos = F15;
constexpr Register R16_thread    = R16;      // address of current thread
constexpr Register R17_tos       = R17;      // The interpreter's top of (expression) stack cache register
constexpr Register R18_locals    = R18;      // address of first param slot (receiver).
constexpr Register R19_method    = R19;      // address of current method

// Temporary registers to be used within frame manager. We can use
// the non-volatiles because the call stub has saved them.
// Use only non-volatile registers in order to keep values across C-calls.
constexpr Register R21_tmp1 = R21;
constexpr Register R22_tmp2 = R22;
constexpr Register R23_tmp3 = R23;
constexpr Register R24_tmp4 = R24;
constexpr Register R25_tmp5 = R25;
constexpr Register R26_tmp6 = R26;
constexpr Register R27_tmp7 = R27;
constexpr Register R28_tmp8 = R28;
constexpr Register R29_tmp9 = R29;
constexpr Register R24_dispatch_addr     = R24;
constexpr Register R25_templateTableBase = R25;
constexpr Register R26_monitor           = R26;
constexpr Register R27_constPoolCache    = R27;
constexpr Register R28_mdx               = R28;

constexpr Register R19_inline_cache_reg = R19;
constexpr Register R21_sender_SP = R21;
constexpr Register R23_method_handle = R23;
constexpr Register R29_TOC = R29;

// Scratch registers are volatile.
constexpr Register R11_scratch1 = R11;
constexpr Register R12_scratch2 = R12;

#endif // CPU_PPC_REGISTER_PPC_HPP

¤ Dauer der Verarbeitung: 0.5 Sekunden  (vorverarbeitet)  ¤





Download des
Quellennavigators
Download des
sprechenden Kalenders

in der Quellcodebibliothek suchen




Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.


Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.


Bot Zugriff