src/hotspot/cpu/sparc/vm_version_sparc.hpp
author lucy
Mon, 18 Nov 2019 17:11:06 +0100
changeset 59122 5d73255c2d52
parent 53244 9807daeb47c4
permissions -rw-r--r--
8233787: Break cycle in vm_version* includes Reviewed-by: kbarrett, mdoerr
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
53244
9807daeb47c4 8216167: Update include guards to reflect correct directories
coleenp
parents: 52904
diff changeset
     2
 * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     4
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
489c9b5090e2 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
489c9b5090e2 Initial load
duke
parents:
diff changeset
     7
 * published by the Free Software Foundation.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     8
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
489c9b5090e2 Initial load
duke
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
489c9b5090e2 Initial load
duke
parents:
diff changeset
    13
 * accompanied this code).
489c9b5090e2 Initial load
duke
parents:
diff changeset
    14
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
489c9b5090e2 Initial load
duke
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    18
 *
5547
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 2255
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 2255
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 2255
diff changeset
    21
 * questions.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    22
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    23
 */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    24
53244
9807daeb47c4 8216167: Update include guards to reflect correct directories
coleenp
parents: 52904
diff changeset
    25
#ifndef CPU_SPARC_VM_VERSION_SPARC_HPP
9807daeb47c4 8216167: Update include guards to reflect correct directories
coleenp
parents: 52904
diff changeset
    26
#define CPU_SPARC_VM_VERSION_SPARC_HPP
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7115
diff changeset
    27
59122
5d73255c2d52 8233787: Break cycle in vm_version* includes
lucy
parents: 53244
diff changeset
    28
#include "runtime/abstract_vm_version.hpp"
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7115
diff changeset
    29
#include "runtime/globals_extension.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7115
diff changeset
    30
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    31
class VM_Version: public Abstract_VM_Version {
33160
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents: 31515
diff changeset
    32
  friend class VMStructs;
35133
4e23fa46d48d 8145714: [JVMCI] SPARC broken after JDK-8134994
twisti
parents: 33160
diff changeset
    33
  friend class JVMCIVMStructs;
35148
5cfafc99d791 8143072: [JVMCI] Port JVMCI to AArch64
twisti
parents: 35135
diff changeset
    34
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    35
protected:
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    36
  enum {
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    37
    ISA_V9,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    38
    ISA_POPC,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    39
    ISA_VIS1,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    40
    ISA_VIS2,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    41
    ISA_BLK_INIT,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    42
    ISA_FMAF,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    43
    ISA_VIS3,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    44
    ISA_HPC,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    45
    ISA_IMA,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    46
    ISA_AES,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    47
    ISA_DES,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    48
    ISA_KASUMI,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    49
    ISA_CAMELLIA,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    50
    ISA_MD5,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    51
    ISA_SHA1,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    52
    ISA_SHA256,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    53
    ISA_SHA512,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    54
    ISA_MPMUL,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    55
    ISA_MONT,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    56
    ISA_PAUSE,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    57
    ISA_CBCOND,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    58
    ISA_CRC32C,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    59
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    60
    ISA_FJATHPLUS,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    61
    ISA_VIS3B,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    62
    ISA_ADI,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    63
    ISA_SPARC5,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    64
    ISA_MWAIT,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    65
    ISA_XMPMUL,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    66
    ISA_XMONT,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    67
    ISA_PAUSE_NSEC,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    68
    ISA_VAMASK,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    69
47562
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
    70
    ISA_SPARC6,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
    71
    ISA_DICTUNP,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
    72
    ISA_FPCMPSHL,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
    73
    ISA_RLE,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
    74
    ISA_SHA3,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
    75
    ISA_FJATHPLUS2,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
    76
    ISA_VIS3C,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
    77
    ISA_SPARC5B,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
    78
    ISA_MME,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
    79
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    80
    // Synthesised properties:
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    81
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    82
    CPU_FAST_IDIV,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    83
    CPU_FAST_RDPC,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    84
    CPU_FAST_BIS,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    85
    CPU_FAST_LD,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    86
    CPU_FAST_CMOVE,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    87
    CPU_FAST_IND_BR,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    88
    CPU_BLK_ZEROING
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    89
  };
489c9b5090e2 Initial load
duke
parents:
diff changeset
    90
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    91
private:
47562
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
    92
  enum { ISA_last_feature = ISA_MME,
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    93
         CPU_last_feature = CPU_BLK_ZEROING };
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    94
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    95
  enum {
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    96
    ISA_unknown_msk     = 0,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    97
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    98
    ISA_v9_msk          = UINT64_C(1) << ISA_V9,
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    99
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   100
    ISA_popc_msk        = UINT64_C(1) << ISA_POPC,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   101
    ISA_vis1_msk        = UINT64_C(1) << ISA_VIS1,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   102
    ISA_vis2_msk        = UINT64_C(1) << ISA_VIS2,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   103
    ISA_blk_init_msk    = UINT64_C(1) << ISA_BLK_INIT,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   104
    ISA_fmaf_msk        = UINT64_C(1) << ISA_FMAF,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   105
    ISA_vis3_msk        = UINT64_C(1) << ISA_VIS3,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   106
    ISA_hpc_msk         = UINT64_C(1) << ISA_HPC,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   107
    ISA_ima_msk         = UINT64_C(1) << ISA_IMA,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   108
    ISA_aes_msk         = UINT64_C(1) << ISA_AES,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   109
    ISA_des_msk         = UINT64_C(1) << ISA_DES,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   110
    ISA_kasumi_msk      = UINT64_C(1) << ISA_KASUMI,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   111
    ISA_camellia_msk    = UINT64_C(1) << ISA_CAMELLIA,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   112
    ISA_md5_msk         = UINT64_C(1) << ISA_MD5,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   113
    ISA_sha1_msk        = UINT64_C(1) << ISA_SHA1,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   114
    ISA_sha256_msk      = UINT64_C(1) << ISA_SHA256,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   115
    ISA_sha512_msk      = UINT64_C(1) << ISA_SHA512,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   116
    ISA_mpmul_msk       = UINT64_C(1) << ISA_MPMUL,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   117
    ISA_mont_msk        = UINT64_C(1) << ISA_MONT,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   118
    ISA_pause_msk       = UINT64_C(1) << ISA_PAUSE,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   119
    ISA_cbcond_msk      = UINT64_C(1) << ISA_CBCOND,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   120
    ISA_crc32c_msk      = UINT64_C(1) << ISA_CRC32C,
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   121
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   122
    ISA_fjathplus_msk   = UINT64_C(1) << ISA_FJATHPLUS,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   123
    ISA_vis3b_msk       = UINT64_C(1) << ISA_VIS3B,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   124
    ISA_adi_msk         = UINT64_C(1) << ISA_ADI,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   125
    ISA_sparc5_msk      = UINT64_C(1) << ISA_SPARC5,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   126
    ISA_mwait_msk       = UINT64_C(1) << ISA_MWAIT,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   127
    ISA_xmpmul_msk      = UINT64_C(1) << ISA_XMPMUL,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   128
    ISA_xmont_msk       = UINT64_C(1) << ISA_XMONT,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   129
    ISA_pause_nsec_msk  = UINT64_C(1) << ISA_PAUSE_NSEC,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   130
    ISA_vamask_msk      = UINT64_C(1) << ISA_VAMASK,
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   131
47562
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   132
    ISA_sparc6_msk      = UINT64_C(1) << ISA_SPARC6,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   133
    ISA_dictunp_msk     = UINT64_C(1) << ISA_DICTUNP,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   134
    ISA_fpcmpshl_msk    = UINT64_C(1) << ISA_FPCMPSHL,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   135
    ISA_rle_msk         = UINT64_C(1) << ISA_RLE,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   136
    ISA_sha3_msk        = UINT64_C(1) << ISA_SHA3,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   137
    ISA_fjathplus2_msk  = UINT64_C(1) << ISA_FJATHPLUS2,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   138
    ISA_vis3c_msk       = UINT64_C(1) << ISA_VIS3C,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   139
    ISA_sparc5b_msk     = UINT64_C(1) << ISA_SPARC5B,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   140
    ISA_mme_msk         = UINT64_C(1) << ISA_MME,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   141
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   142
    CPU_fast_idiv_msk   = UINT64_C(1) << CPU_FAST_IDIV,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   143
    CPU_fast_rdpc_msk   = UINT64_C(1) << CPU_FAST_RDPC,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   144
    CPU_fast_bis_msk    = UINT64_C(1) << CPU_FAST_BIS,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   145
    CPU_fast_ld_msk     = UINT64_C(1) << CPU_FAST_LD,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   146
    CPU_fast_cmove_msk  = UINT64_C(1) << CPU_FAST_CMOVE,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   147
    CPU_fast_ind_br_msk = UINT64_C(1) << CPU_FAST_IND_BR,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   148
    CPU_blk_zeroing_msk = UINT64_C(1) << CPU_BLK_ZEROING,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   149
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   150
    last_feature_msk    = CPU_blk_zeroing_msk,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   151
    full_feature_msk    = (last_feature_msk << 1) - 1
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   152
  };
489c9b5090e2 Initial load
duke
parents:
diff changeset
   153
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   154
/* The following, previously supported, SPARC implementations are no longer
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   155
 * supported.
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   156
 *
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   157
 *  UltraSPARC I/II:
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   158
 *    SPARC-V9, VIS
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   159
 *  UltraSPARC III/+:  (Cheetah/+)
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   160
 *    SPARC-V9, VIS
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   161
 *  UltraSPARC IV:     (Jaguar)
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   162
 *    SPARC-V9, VIS
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   163
 *  UltraSPARC IV+:    (Panther)
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   164
 *    SPARC-V9, VIS, POPC
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   165
 *
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   166
 * The currently supported SPARC implementations are listed below (including
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   167
 * generic V9 support).
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   168
 *
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   169
 *  UltraSPARC T1:     (Niagara)
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   170
 *    SPARC-V9, VIS, ASI_BIS                (Crypto/hash in SPU)
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   171
 *  UltraSPARC T2:     (Niagara-2)
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   172
 *    SPARC-V9, VIS, ASI_BIS, POPC          (Crypto/hash in SPU)
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   173
 *  UltraSPARC T2+:    (Victoria Falls, etc.)
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   174
 *    SPARC-V9, VIS, VIS2, ASI_BIS, POPC    (Crypto/hash in SPU)
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   175
 *
47562
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   176
 *  UltraSPARC T3:     (Rainbow Falls/C2)
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   177
 *    SPARC-V9, VIS, VIS2, ASI_BIS, POPC    (Crypto/hash in SPU)
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   178
 *
47562
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   179
 *  Oracle SPARC T4/T5/M5:  (Core C3)
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   180
 *    SPARC-V9, VIS, VIS2, VIS3, ASI_BIS, HPC, POPC, FMAF, IMA, PAUSE, CBCOND,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   181
 *    AES, DES, Kasumi, Camellia, MD5, SHA1, SHA256, SHA512, CRC32C, MONT, MPMUL
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   182
 *
47562
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   183
 *  Oracle SPARC M7:   (Core C4)
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   184
 *    SPARC-V9, VIS, VIS2, VIS3, ASI_BIS, HPC, POPC, FMAF, IMA, PAUSE, CBCOND,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   185
 *    AES, DES, Camellia, MD5, SHA1, SHA256, SHA512, CRC32C, MONT, MPMUL, VIS3b,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   186
 *    ADI, SPARC5, MWAIT, XMPMUL, XMONT, PAUSE_NSEC, VAMASK
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   187
 *
47562
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   188
 *  Oracle SPARC M8:   (Core C5)
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   189
 *    SPARC-V9, VIS, VIS2, VIS3, ASI_BIS, HPC, POPC, FMAF, IMA, PAUSE, CBCOND,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   190
 *    AES, DES, Camellia, MD5, SHA1, SHA256, SHA512, CRC32C, MONT, MPMUL, VIS3b,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   191
 *    ADI, SPARC5, MWAIT, XMPMUL, XMONT, PAUSE_NSEC, VAMASK, SPARC6, FPCMPSHL,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   192
 *    DICTUNP, RLE, SHA3, MME
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   193
 *
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   194
 *    NOTE: Oracle Number support ignored.
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   195
 */
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   196
  enum {
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   197
    niagara1_msk = ISA_v9_msk | ISA_vis1_msk | ISA_blk_init_msk,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   198
    niagara2_msk = niagara1_msk | ISA_popc_msk,
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   199
47562
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   200
    core_C2_msk  = niagara2_msk | ISA_vis2_msk,
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   201
47562
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   202
    core_C3_msk  = core_C2_msk | ISA_fmaf_msk | ISA_vis3_msk | ISA_hpc_msk |
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   203
        ISA_ima_msk | ISA_aes_msk | ISA_des_msk | ISA_kasumi_msk |
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   204
        ISA_camellia_msk | ISA_md5_msk | ISA_sha1_msk | ISA_sha256_msk |
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   205
        ISA_sha512_msk | ISA_mpmul_msk | ISA_mont_msk | ISA_pause_msk |
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   206
        ISA_cbcond_msk | ISA_crc32c_msk,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   207
47562
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   208
    core_C4_msk  = core_C3_msk - ISA_kasumi_msk |
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   209
        ISA_vis3b_msk | ISA_adi_msk | ISA_sparc5_msk | ISA_mwait_msk |
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   210
        ISA_xmpmul_msk | ISA_xmont_msk | ISA_pause_nsec_msk | ISA_vamask_msk,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   211
47562
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   212
    core_C5_msk = core_C4_msk | ISA_sparc6_msk | ISA_dictunp_msk |
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   213
        ISA_fpcmpshl_msk | ISA_rle_msk | ISA_sha3_msk | ISA_mme_msk,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   214
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   215
    ultra_sparc_t1_msk = niagara1_msk,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   216
    ultra_sparc_t2_msk = niagara2_msk,
47562
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   217
    ultra_sparc_t3_msk = core_C2_msk,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   218
    ultra_sparc_m5_msk = core_C3_msk,   // NOTE: First out-of-order pipeline.
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   219
    ultra_sparc_m7_msk = core_C4_msk,
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   220
    ultra_sparc_m8_msk = core_C5_msk
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   221
  };
7704
cc9d3ed42704 7006505: Use kstat info to identify SPARC processor
kvn
parents: 7433
diff changeset
   222
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   223
  static uint _L2_data_cache_line_size;
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   224
  static uint L2_data_cache_line_size() { return _L2_data_cache_line_size; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   225
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   226
  static void determine_features();
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   227
  static void platform_features();
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   228
  static void print_features();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   229
489c9b5090e2 Initial load
duke
parents:
diff changeset
   230
public:
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   231
  enum {
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   232
    // Adopt a conservative behaviour (modelling single-insn-fetch-n-issue) for
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   233
    // Niagara (and SPARC64). While there are at least two entries/slots in the
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   234
    // instruction fetch buffer on any Niagara core (and as many as eight on a
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   235
    // SPARC64), the performance improvement from keeping hot branch targets on
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   236
    // optimally aligned addresses is such a small one (if any) that we choose
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   237
    // not to use the extra code space required.
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   238
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   239
    insn_fetch_alignment = 4    // Byte alignment in L1 insn. cache.
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   240
  };
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   241
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   242
  static void initialize();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   243
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   244
  static void init_before_ergo() { determine_features(); }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   245
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   246
  // Instruction feature support:
35043
30543d2a0a20 8133023: ParallelGCThreads is not calculated correctly
jmasa
parents: 33160
diff changeset
   247
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   248
  static bool has_v9()           { return (_features & ISA_v9_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   249
  static bool has_popc()         { return (_features & ISA_popc_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   250
  static bool has_vis1()         { return (_features & ISA_vis1_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   251
  static bool has_vis2()         { return (_features & ISA_vis2_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   252
  static bool has_blk_init()     { return (_features & ISA_blk_init_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   253
  static bool has_fmaf()         { return (_features & ISA_fmaf_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   254
  static bool has_vis3()         { return (_features & ISA_vis3_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   255
  static bool has_hpc()          { return (_features & ISA_hpc_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   256
  static bool has_ima()          { return (_features & ISA_ima_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   257
  static bool has_aes()          { return (_features & ISA_aes_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   258
  static bool has_des()          { return (_features & ISA_des_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   259
  static bool has_kasumi()       { return (_features & ISA_kasumi_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   260
  static bool has_camellia()     { return (_features & ISA_camellia_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   261
  static bool has_md5()          { return (_features & ISA_md5_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   262
  static bool has_sha1()         { return (_features & ISA_sha1_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   263
  static bool has_sha256()       { return (_features & ISA_sha256_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   264
  static bool has_sha512()       { return (_features & ISA_sha512_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   265
  static bool has_mpmul()        { return (_features & ISA_mpmul_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   266
  static bool has_mont()         { return (_features & ISA_mont_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   267
  static bool has_pause()        { return (_features & ISA_pause_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   268
  static bool has_cbcond()       { return (_features & ISA_cbcond_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   269
  static bool has_crc32c()       { return (_features & ISA_crc32c_msk) != 0; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   270
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   271
  static bool has_athena_plus()  { return (_features & ISA_fjathplus_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   272
  static bool has_vis3b()        { return (_features & ISA_vis3b_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   273
  static bool has_adi()          { return (_features & ISA_adi_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   274
  static bool has_sparc5()       { return (_features & ISA_sparc5_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   275
  static bool has_mwait()        { return (_features & ISA_mwait_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   276
  static bool has_xmpmul()       { return (_features & ISA_xmpmul_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   277
  static bool has_xmont()        { return (_features & ISA_xmont_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   278
  static bool has_pause_nsec()   { return (_features & ISA_pause_nsec_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   279
  static bool has_vamask()       { return (_features & ISA_vamask_msk) != 0; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   280
47562
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   281
  static bool has_sparc6()       { return (_features & ISA_sparc6_msk) != 0; }
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   282
  static bool has_dictunp()      { return (_features & ISA_dictunp_msk) != 0; }
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   283
  static bool has_fpcmpshl()     { return (_features & ISA_fpcmpshl_msk) != 0; }
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   284
  static bool has_rle()          { return (_features & ISA_rle_msk) != 0; }
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   285
  static bool has_sha3()         { return (_features & ISA_sha3_msk) != 0; }
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   286
  static bool has_athena_plus2() { return (_features & ISA_fjathplus2_msk) != 0; }
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   287
  static bool has_vis3c()        { return (_features & ISA_vis3c_msk) != 0; }
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   288
  static bool has_sparc5b()      { return (_features & ISA_sparc5b_msk) != 0; }
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   289
  static bool has_mme()          { return (_features & ISA_mme_msk) != 0; }
f789ccebcfe4 8182279: Updating SPARC feature/capability detection to support Core C5.
neliasso
parents: 47216
diff changeset
   290
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   291
  static bool has_fast_idiv()    { return (_features & CPU_fast_idiv_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   292
  static bool has_fast_rdpc()    { return (_features & CPU_fast_rdpc_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   293
  static bool has_fast_bis()     { return (_features & CPU_fast_bis_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   294
  static bool has_fast_ld()      { return (_features & CPU_fast_ld_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   295
  static bool has_fast_cmove()   { return (_features & CPU_fast_cmove_msk) != 0; }
10267
8bdeec886dc4 7079329: Adjust allocation prefetching for T4
kvn
parents: 10252
diff changeset
   296
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   297
  // If indirect and direct branching is equally fast.
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   298
  static bool has_fast_ind_br()  { return (_features & CPU_fast_ind_br_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   299
  // If SPARC BIS to the beginning of cache line always zeros it.
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   300
  static bool has_blk_zeroing()  { return (_features & CPU_blk_zeroing_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   301
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   302
  static bool supports_compare_and_exchange() { return true; }
10267
8bdeec886dc4 7079329: Adjust allocation prefetching for T4
kvn
parents: 10252
diff changeset
   303
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   304
  // FIXME: To be removed.
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   305
  static bool is_post_niagara()  {
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   306
    return (_features & niagara2_msk) == niagara2_msk;
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   307
  }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   308
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   309
  // Default prefetch block size on SPARC.
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   310
  static uint prefetch_data_size() { return L2_data_cache_line_size(); }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   311
46591
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   312
 private:
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   313
  // Prefetch policy and characteristics:
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   314
  //
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   315
  // These support routines are used in order to isolate any CPU/core specific
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   316
  // logic from the actual flag/option processing.  They should reflect the HW
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   317
  // characteristics for the associated options on the current platform.
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   318
  //
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   319
  // The three Prefetch* options below (assigned -1 in the configuration) are
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   320
  // treated according to (given the accepted range [-1..<maxint>]):
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   321
  //  -1: Determine a proper HW-specific value for the current HW.
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   322
  //   0: Off
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   323
  //  >0: Command-line supplied value to use.
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   324
  //
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   325
  // FIXME: The documentation string in the configuration is wrong, saying that
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   326
  //        -1 is also interpreted as off.
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   327
  //
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   328
  static intx prefetch_copy_interval_in_bytes() {
46591
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   329
    intx bytes = PrefetchCopyIntervalInBytes;
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   330
    return bytes < 0 ? 512 : bytes;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   331
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   332
  static intx prefetch_scan_interval_in_bytes() {
46591
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   333
    intx bytes = PrefetchScanIntervalInBytes;
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   334
    return bytes < 0 ? 512 : bytes;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   335
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   336
  static intx prefetch_fields_ahead() {
46591
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   337
    intx count = PrefetchFieldsAhead;
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   338
    return count < 0 ? 0 : count;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   339
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   340
46591
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   341
  // AllocatePrefetchDistance is treated under the same interpretation as the
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   342
  // Prefetch* options above (i.e., -1, 0, >0).
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   343
  static intx allocate_prefetch_distance() {
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   344
    intx count = AllocatePrefetchDistance;
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   345
    return count < 0 ? 512 : count;
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   346
  }
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   347
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   348
  // AllocatePrefetchStyle is guaranteed to be in range [0..3] defined by the
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   349
  // configuration.
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   350
  static intx allocate_prefetch_style() {
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   351
    intx distance = allocate_prefetch_distance();
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   352
    // Return 0 (off/none) if AllocatePrefetchDistance was not defined.
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   353
    return distance > 0 ? AllocatePrefetchStyle : 0;
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   354
  }
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   355
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   356
 public:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   357
  // Assembler testing
489c9b5090e2 Initial load
duke
parents:
diff changeset
   358
  static void allow_all();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   359
  static void revert();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   360
489c9b5090e2 Initial load
duke
parents:
diff changeset
   361
  // Override the Abstract_VM_Version implementation.
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   362
  //
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   363
  // FIXME: Removed broken test on sun4v (always false when invoked prior to the
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   364
  //        proper capability setup), thus always returning 2. Still need to fix
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   365
  //        this properly in order to enable complete page size support.
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   366
  static uint page_size_count() { return 2; }
183
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
   367
52904
d2f118d3f8e7 8213224: Move code related to GC threads calculation out of AdaptiveSizePolicy
manc
parents: 47562
diff changeset
   368
  // Override default denominator for ParallelGCThreads.
d2f118d3f8e7 8213224: Move code related to GC threads calculation out of AdaptiveSizePolicy
manc
parents: 47562
diff changeset
   369
  //
d2f118d3f8e7 8213224: Move code related to GC threads calculation out of AdaptiveSizePolicy
manc
parents: 47562
diff changeset
   370
  // FIXME: Simply checking the processor family is insufficient.
d2f118d3f8e7 8213224: Move code related to GC threads calculation out of AdaptiveSizePolicy
manc
parents: 47562
diff changeset
   371
  static uint parallel_worker_threads_denominator() {
d2f118d3f8e7 8213224: Move code related to GC threads calculation out of AdaptiveSizePolicy
manc
parents: 47562
diff changeset
   372
    return is_post_niagara() ? 16 : 8;
d2f118d3f8e7 8213224: Move code related to GC threads calculation out of AdaptiveSizePolicy
manc
parents: 47562
diff changeset
   373
  }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   374
};
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7115
diff changeset
   375
53244
9807daeb47c4 8216167: Update include guards to reflect correct directories
coleenp
parents: 52904
diff changeset
   376
#endif // CPU_SPARC_VM_VERSION_SPARC_HPP