1 /* 2 * Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved. 3 * Copyright (c) 2014, 2020, Red Hat Inc. All rights reserved. 4 * Copyright (c) 2020, 2022, Huawei Technologies Co., Ltd. All rights reserved. 5 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 6 * 7 * This code is free software; you can redistribute it and/or modify it 8 * under the terms of the GNU General Public License version 2 only, as 9 * published by the Free Software Foundation. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 * 25 */ 26 27 #ifndef CPU_RISCV_VM_VERSION_RISCV_HPP 28 #define CPU_RISCV_VM_VERSION_RISCV_HPP 29 30 #include "runtime/abstract_vm_version.hpp" 31 #include "runtime/arguments.hpp" 32 #include "runtime/globals_extension.hpp" 33 #include "utilities/sizes.hpp" 34 35 class VM_Version : public Abstract_VM_Version { 36 #ifdef COMPILER2 37 private: 38 static void c2_initialize(); 39 #endif // COMPILER2 40 41 protected: 42 static const char* _uarch; 43 static uint32_t _initial_vector_length; 44 static void get_os_cpu_info(); 45 static uint32_t get_current_vector_length(); 46 47 public: 48 // Initialization 49 static void initialize(); 50 51 constexpr static bool supports_stack_watermark_barrier() { return true; } 52 53 enum Feature_Flag { 54 #define CPU_FEATURE_FLAGS(decl) \ 55 decl(I, "i", 8) \ 56 decl(M, "m", 12) \ 57 decl(A, "a", 0) \ 58 decl(F, "f", 5) \ 59 decl(D, "d", 3) \ 60 decl(C, "c", 2) \ 61 decl(V, "v", 21) 62 63 #define DECLARE_CPU_FEATURE_FLAG(id, name, bit) CPU_##id = (1 << bit), 64 CPU_FEATURE_FLAGS(DECLARE_CPU_FEATURE_FLAG) 65 #undef DECLARE_CPU_FEATURE_FLAG 66 }; 67 68 static void initialize_cpu_information(void); 69 }; 70 71 #endif // CPU_RISCV_VM_VERSION_RISCV_HPP