hotspot/src/cpu/sparc/vm/vm_version_sparc.hpp
author neliasso
Tue, 27 Jun 2017 15:27:54 +0200
changeset 46592 6e357e2c8143
parent 46591 3f3105af599e
child 46595 18a062f9a227
permissions -rw-r--r--
8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris) Summary: Update for new platforms Reviewed-by: kvn Contributed-by: phedlin@oracle.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
31515
6aed85dadbe6 8073583: C2 support for CRC32C on SPARC
kvn
parents: 30217
diff changeset
     2
 * Copyright (c) 1997, 2015, 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
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7115
diff changeset
    25
#ifndef CPU_SPARC_VM_VM_VERSION_SPARC_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7115
diff changeset
    26
#define CPU_SPARC_VM_VM_VERSION_SPARC_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7115
diff changeset
    27
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7115
diff changeset
    28
#include "runtime/globals_extension.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7115
diff changeset
    29
#include "runtime/vm_version.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
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    70
    // Synthesised properties:
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    71
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    72
    CPU_FAST_IDIV,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    73
    CPU_FAST_RDPC,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    74
    CPU_FAST_BIS,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    75
    CPU_FAST_LD,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    76
    CPU_FAST_CMOVE,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    77
    CPU_FAST_IND_BR,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    78
    CPU_BLK_ZEROING
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    79
  };
489c9b5090e2 Initial load
duke
parents:
diff changeset
    80
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    81
private:
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    82
  enum { ISA_last_feature = ISA_VAMASK,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    83
         CPU_last_feature = CPU_BLK_ZEROING };
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    84
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    85
  enum {
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    86
    ISA_unknown_msk     = 0,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    87
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    88
    ISA_v9_msk          = UINT64_C(1) << ISA_V9,
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    89
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
    90
    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
    91
    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
    92
    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
    93
    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
    94
    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
    95
    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
    96
    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
    97
    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
    98
    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
    99
    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
   100
    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
   101
    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
   102
    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
   103
    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
   104
    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
   105
    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
   106
    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
   107
    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
   108
    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
   109
    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
   110
    ISA_crc32c_msk      = UINT64_C(1) << ISA_CRC32C,
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   111
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   112
    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
   113
    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
   114
    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
   115
    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
   116
    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
   117
    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
   118
    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
   119
    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
   120
    ISA_vamask_msk      = UINT64_C(1) << ISA_VAMASK,
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
    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
   123
    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
   124
    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
   125
    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
   126
    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
   127
    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
   128
    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
   129
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   130
    last_feature_msk    = CPU_blk_zeroing_msk,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   131
    full_feature_msk    = (last_feature_msk << 1) - 1
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   132
  };
489c9b5090e2 Initial load
duke
parents:
diff changeset
   133
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   134
/* 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
   135
 * supported.
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   136
 *
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   137
 *  UltraSPARC I/II:
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   138
 *    SPARC-V9, VIS
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   139
 *  UltraSPARC III/+:  (Cheetah/+)
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   140
 *    SPARC-V9, VIS
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   141
 *  UltraSPARC IV:     (Jaguar)
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   142
 *    SPARC-V9, VIS
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   143
 *  UltraSPARC IV+:    (Panther)
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   144
 *    SPARC-V9, VIS, POPC
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   145
 *
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   146
 * 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
   147
 * generic V9 support).
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   148
 *
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   149
 *  UltraSPARC T1:     (Niagara)
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   150
 *    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
   151
 *  UltraSPARC T2:     (Niagara-2)
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   152
 *    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
   153
 *  UltraSPARC T2+:    (Victoria Falls, etc.)
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   154
 *    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
   155
 *
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   156
 *  UltraSPARC T3:     (Rainbow Falls/S2)
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   157
 *    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
   158
 *
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   159
 *  Oracle SPARC T4/T5/M5:  (Core S3)
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   160
 *    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
   161
 *    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
   162
 *
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   163
 *  Oracle SPARC M7:   (Core S4)
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   164
 *    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
   165
 *    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
   166
 *    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
   167
 *
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
  enum {
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   170
    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
   171
    niagara2_msk = niagara1_msk | ISA_popc_msk,
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   172
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   173
    core_S2_msk  = niagara2_msk | ISA_vis2_msk,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   174
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   175
    core_S3_msk  = core_S2_msk | ISA_fmaf_msk | ISA_vis3_msk | ISA_hpc_msk |
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   176
        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
   177
        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
   178
        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
   179
        ISA_cbcond_msk | ISA_crc32c_msk,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   180
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   181
    core_S4_msk  = core_S3_msk - ISA_kasumi_msk |
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   182
        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
   183
        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
   184
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   185
    ultra_sparc_t1_msk = niagara1_msk,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   186
    ultra_sparc_t2_msk = niagara2_msk,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   187
    ultra_sparc_t3_msk = core_S2_msk,
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   188
    ultra_sparc_m5_msk = core_S3_msk,   // NOTE: First out-of-order pipeline.
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   189
    ultra_sparc_m7_msk = core_S4_msk
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   190
  };
7704
cc9d3ed42704 7006505: Use kstat info to identify SPARC processor
kvn
parents: 7433
diff changeset
   191
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   192
  static uint _L2_data_cache_line_size;
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   193
  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
   194
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   195
  static void determine_features();
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   196
  static void platform_features();
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   197
  static void print_features();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   198
489c9b5090e2 Initial load
duke
parents:
diff changeset
   199
public:
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   200
  enum {
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   201
    // 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
   202
    // 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
   203
    // 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
   204
    // 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
   205
    // 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
   206
    // 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
   207
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   208
    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
   209
  };
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   210
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   211
  static void initialize();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   212
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   213
  static void init_before_ergo() { determine_features(); }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   214
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   215
  // Instruction feature support:
35043
30543d2a0a20 8133023: ParallelGCThreads is not calculated correctly
jmasa
parents: 33160
diff changeset
   216
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   217
  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
   218
  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
   219
  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
   220
  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
   221
  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
   222
  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
   223
  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
   224
  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
   225
  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
   226
  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
   227
  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
   228
  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
   229
  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
   230
  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
   231
  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
   232
  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
   233
  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
   234
  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
   235
  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
   236
  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
   237
  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
   238
  static bool has_crc32c()       { return (_features & ISA_crc32c_msk) != 0; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   239
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   240
  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
   241
  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
   242
  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
   243
  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
   244
  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
   245
  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
   246
  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
   247
  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
   248
  static bool has_vamask()       { return (_features & ISA_vamask_msk) != 0; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   249
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   250
  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
   251
  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
   252
  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
   253
  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
   254
  static bool has_fast_cmove()   { return (_features & CPU_fast_cmove_msk) != 0; }
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   255
  static bool has_fast_fxtof()   { return true; }
10267
8bdeec886dc4 7079329: Adjust allocation prefetching for T4
kvn
parents: 10252
diff changeset
   256
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   257
  // 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
   258
  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
   259
  // 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
   260
  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
   261
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   262
  static bool supports_compare_and_exchange() { return true; }
10267
8bdeec886dc4 7079329: Adjust allocation prefetching for T4
kvn
parents: 10252
diff changeset
   263
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   264
  // FIXME: To be removed.
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   265
  static bool is_post_niagara()  {
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   266
    return (_features & niagara2_msk) == niagara2_msk;
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   267
  }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   268
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   269
  // Default prefetch block size on SPARC.
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   270
  static uint prefetch_data_size() { return L2_data_cache_line_size(); }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   271
46591
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   272
 private:
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   273
  // Prefetch policy and characteristics:
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   274
  //
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   275
  // 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
   276
  // 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
   277
  // 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
   278
  //
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   279
  // 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
   280
  // 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
   281
  //  -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
   282
  //   0: Off
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   283
  //  >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
   284
  //
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   285
  // 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
   286
  //        -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
   287
  //
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   288
  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
   289
    intx bytes = PrefetchCopyIntervalInBytes;
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   290
    return bytes < 0 ? 512 : bytes;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   291
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   292
  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
   293
    intx bytes = PrefetchScanIntervalInBytes;
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   294
    return bytes < 0 ? 512 : bytes;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   295
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   296
  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
   297
    intx count = PrefetchFieldsAhead;
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   298
    return count < 0 ? 0 : count;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   299
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   300
46591
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   301
  // 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
   302
  // 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
   303
  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
   304
    intx count = AllocatePrefetchDistance;
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   305
    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
   306
  }
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   307
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   308
  // 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
   309
  // configuration.
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   310
  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
   311
    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
   312
    // 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
   313
    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
   314
  }
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   315
3f3105af599e 8182711: Re/Introduce private interface for HW-specific prefetch options in SPARC VM_Version
neliasso
parents: 46547
diff changeset
   316
 public:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   317
  // Assembler testing
489c9b5090e2 Initial load
duke
parents:
diff changeset
   318
  static void allow_all();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   319
  static void revert();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   320
489c9b5090e2 Initial load
duke
parents:
diff changeset
   321
  // Override the Abstract_VM_Version implementation.
46592
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   322
  //
6e357e2c8143 8172231: SPARC ISA/CPU feature detection is broken/insufficient (on Solaris)
neliasso
parents: 46591
diff changeset
   323
  // 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
   324
  //        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
   325
  //        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
   326
  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
   327
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
   328
  // Calculates the number of parallel threads
ba55c7f3fd45 6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents: 1
diff changeset
   329
  static unsigned int calc_parallel_worker_threads();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   330
};
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7115
diff changeset
   331
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7115
diff changeset
   332
#endif // CPU_SPARC_VM_VM_VERSION_SPARC_HPP