src/cpu/mips/vm/vm_version_mips.cpp

Tue, 17 Jan 2017 19:57:30 -0500

author
fujie
date
Tue, 17 Jan 2017 19:57:30 -0500
changeset 213
45cd2837a395
parent 212
a511e4b27f56
child 254
a280f2ced33e
permissions
-rw-r--r--

ctz/dctz are only supported on 3A2000/3A3000 CPUs (Follows changeset:32b76f240db3).

     1 /*
     2  * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
     3  * Copyright (c) 2015, 2016, Loongson Technology. All rights reserved.
     4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     5  *
     6  * This code is free software; you can redistribute it and/or modify it
     7  * under the terms of the GNU General Public License version 2 only, as
     8  * published by the Free Software Foundation.
     9  *
    10  * This code is distributed in the hope that it will be useful, but WITHOUT
    11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    13  * version 2 for more details (a copy is included in the LICENSE file that
    14  * accompanied this code).
    15  *
    16  * You should have received a copy of the GNU General Public License version
    17  * 2 along with this work; if not, write to the Free Software Foundation,
    18  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    19  *
    20  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    21  * or visit www.oracle.com if you need additional information or have any
    22  * questions.
    23  *
    24  */
    26 #include "precompiled.hpp"
    27 #include "asm/macroAssembler.hpp"
    28 #include "asm/macroAssembler.inline.hpp"
    29 #include "memory/resourceArea.hpp"
    30 #include "runtime/java.hpp"
    31 #include "runtime/stubCodeGenerator.hpp"
    32 #include "vm_version_mips.hpp"
    33 #ifdef TARGET_OS_FAMILY_linux
    34 # include "os_linux.inline.hpp"
    35 #endif
    36 #ifdef TARGET_OS_FAMILY_solaris
    37 # include "os_solaris.inline.hpp"
    38 #endif
    39 #ifdef TARGET_OS_FAMILY_windows
    40 # include "os_windows.inline.hpp"
    41 #endif
    42 #ifdef TARGET_OS_FAMILY_bsd
    43 # include "os_bsd.inline.hpp"
    44 #endif
    45 /*
    46 int VM_Version::_cpu;
    47 int VM_Version::_model;
    48 int VM_Version::_stepping;
    49 int VM_Version::_cpuFeatures;
    50 const char*           VM_Version::_features_str = "";
    51 VM_Version::CpuidInfo VM_Version::_cpuid_info   = { 0, };
    53 static BufferBlob* stub_blob;
    54 static const int stub_size = 300;
    56 extern "C" {
    57   typedef void (*getPsrInfo_stub_t)(void*);
    58 }
    59 static getPsrInfo_stub_t getPsrInfo_stub = NULL;
    60 */
    61 int VM_Version::_features = VM_Version::unknown_m;
    62 const char* VM_Version::_features_str = "";
    63 /*
    64 class VM_Version_StubGenerator: public StubCodeGenerator {
    65  public:
    67   VM_Version_StubGenerator(CodeBuffer *c) : StubCodeGenerator(c) {}
    69   address generate_getPsrInfo() {
    70   };
    71 };
    74 void VM_Version::get_processor_features() {
    75 }
    76 */
    77 void VM_Version::initialize() {
    78 	_features = determine_features();
    79 	//no need, Abstract_VM_Version already define it as false
    80 	_supports_cx8 = true;
    82 	char buf[256];
    83 	jio_snprintf(buf, sizeof(buf), "%s, %s"
    84 #ifdef OPT_RANGECHECK
    85 			", optimized range check"
    86 #endif
    87 #ifdef OPT_PHI_1
    88 			", optimized phi"
    89 #endif
    90 #ifdef OPT_MERGE
    91 			", optimized merge"
    92 #endif
    93 			,	(has_l2_cache() ? "has_l2_cache" : ""), (has_16k_page() ? "has_16k_page" : "")
    94 	);
    95 	//////////////////////add some other feature here//////////////////
    96 #ifdef COMPILER2
    97   if (MaxVectorSize > 0) {
    98     if (!is_power_of_2(MaxVectorSize)) {
    99       warning("MaxVectorSize must be a power of 2");
   100       MaxVectorSize = 8;
   101     }
   102     if (MaxVectorSize > 0 && supports_ps()) {
   103       MaxVectorSize = 8;
   104     }
   105   }
   106   if (UseLoongsonISA)
   107     UseCountTrailingZerosInstruction = false;  // 2017.01.22 Now this guy is only supported on 3A2000/3A3000.
   108 #endif
   109   UseSSE = 0; // Only on x86 and x64
   111 	// buf is started with ", " or is empty
   112 	_features_str = strdup(buf);
   113 	NOT_PRODUCT( if (PrintMiscellaneous && Verbose) print_features(); );
   114 }
   116 void VM_Version::print_features() {
   117 	tty->print_cr("Version:%s", cpu_features());
   118 }
   120 int VM_Version::determine_features() {
   121 	//////////////////////add some other feature here//////////////////
   122 	return spt_16k_page_m; 
   123 }
   125 static int saved_features = 0;
   127 void VM_Version::allow_all() {
   128 	saved_features = _features;
   129 	_features     = all_features_m;
   130 }
   132 void VM_Version::revert() {
   133 	_features = saved_features;
   134 }

mercurial