Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/src/cpu/aarch32/vm/c1_Defs_aarch32.hpp
32285 views
/*1* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.2* Copyright (c) 2014, Red Hat Inc. All rights reserved.3* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.4*5* This code is free software; you can redistribute it and/or modify it6* under the terms of the GNU General Public License version 2 only, as7* published by the Free Software Foundation.8*9* This code is distributed in the hope that it will be useful, but WITHOUT10* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or11* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License12* version 2 for more details (a copy is included in the LICENSE file that13* accompanied this code).14*15* You should have received a copy of the GNU General Public License version16* 2 along with this work; if not, write to the Free Software Foundation,17* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.18*19* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA20* or visit www.oracle.com if you need additional information or have any21* questions.22*23*/24// This file is a derivative work resulting from (and including) modifications25// made by Azul Systems, Inc. The dates of such changes are 2013-2016.26// Copyright 2013-2016 Azul Systems, Inc. All Rights Reserved.27//28// Please contact Azul Systems, 385 Moffett Park Drive, Suite 115, Sunnyvale,29// CA 94089 USA or visit www.azul.com if you need additional information or30// have any questions.3132#ifndef CPU_AARCH32_VM_C1_DEFS_AARCH32_HPP33#define CPU_AARCH32_VM_C1_DEFS_AARCH32_HPP3435// Native word offsets from memory address (little endian format)36enum {37pd_lo_word_offset_in_bytes = 0,38pd_hi_word_offset_in_bytes = BytesPerWord39};4041// TODO: We should understand what values are correct for the following 3 flags42// relevant to floating point operations:43// - UseSSE44// Highest supported SSE instruction set on x86/x64. I believe we should45// set it to 0 in VM_Version::initialize(), like other non-x86 ports do.46// - RoundFPResults47// Indicates whether rounding is needed for floating point results48// - pd_strict_fp_requires_explicit_rounding49// The same as above but for the strictfp mode5051// Explicit rounding operations are not required to implement the strictfp mode52enum {53pd_strict_fp_requires_explicit_rounding = false54};5556// Registers57enum {58// Number of registers used during code emission59pd_nof_cpu_regs_frame_map = RegisterImpl::number_of_registers,60pd_nof_fpu_regs_frame_map = FloatRegisterImpl::number_of_registers,6162// Number of registers killed by calls63pd_nof_caller_save_cpu_regs_frame_map = 8,6465pd_nof_caller_save_fpu_regs_frame_map = pd_nof_fpu_regs_frame_map,66// The following two constants need to be defined since they are referenced67// from c1_FrameMap.hpp, but actually they are never used, so can be set to68// arbitrary values.69pd_nof_cpu_regs_reg_alloc = -1,70pd_nof_fpu_regs_reg_alloc = -1,7172// All the constants below are used by linear scan register allocator only.73// Number of registers visible to register allocator74pd_nof_cpu_regs_linearscan = pd_nof_cpu_regs_frame_map,75pd_nof_fpu_regs_linearscan = pd_nof_fpu_regs_frame_map,76pd_nof_xmm_regs_linearscan = 0,7778// Register allocator specific register numbers corresponding to first/last79// CPU/FPU registers available for allocation80pd_first_cpu_reg = 0,81pd_last_cpu_reg = 7,82pd_first_fpu_reg = pd_nof_cpu_regs_frame_map,83pd_last_fpu_reg = pd_first_fpu_reg + pd_nof_fpu_regs_frame_map - 1,84// Register allocator specific register numbers corresponding to first/last85// CPU/FPU callee-saved registers. These constants are used in86// LinearScan::is_caller_save() only.87pd_first_callee_saved_cpu_reg = 4,88pd_last_callee_saved_cpu_reg = 11,89pd_first_callee_saved_fpu_reg = pd_first_fpu_reg + pd_nof_fpu_regs_frame_map/2,90pd_last_callee_saved_fpu_reg = pd_first_fpu_reg + pd_nof_fpu_regs_frame_map - 191};9293// This flag must be in sync with how the floating point registers are stored94// on the stack by RegisterSaver::save_live_registers() method95// (sharedRuntime_aarch32.cpp) and save_live_registers() function96// (c1_Runtime1_aarch32.cpp). On AArch32 the floating point registers keep97// floats and doubles in their native form. No float to double conversion98// happens when the registers are stored on the stack. This is opposite to99// what happens on x86, where the FPU stack registers are 80 bits wide,100// and storing them in either 4 byte or 8 byte stack slot is a conversion101// operation.102enum {103pd_float_saved_as_double = false104};105106#endif // CPU_AARCH32_VM_C1_DEFS_AARCH32_HPP107108109