annotate src/cpu/zero/vm/register_zero.hpp @ 9790:6b515c453646

CompilationTask: print exception of compilation also when we don't exit the VM for example, this is useful for CTW, in order to see on which methods the compiler bails out
author Bernhard Urban <bernhard.urban@jku.at>
date Wed, 22 May 2013 16:28:12 +0200
parents a3e2f723f2a5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1010
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
1 /*
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
2 * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
1010
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
3 * Copyright 2007 Red Hat, Inc.
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
5 *
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
6 * This code is free software; you can redistribute it and/or modify it
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
7 * under the terms of the GNU General Public License version 2 only, as
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
8 * published by the Free Software Foundation.
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
9 *
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
10 * This code is distributed in the hope that it will be useful, but WITHOUT
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
13 * version 2 for more details (a copy is included in the LICENSE file that
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
14 * accompanied this code).
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
15 *
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License version
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
17 * 2 along with this work; if not, write to the Free Software Foundation,
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
19 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1010
diff changeset
20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1010
diff changeset
21 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1010
diff changeset
22 * questions.
1010
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
23 *
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
24 */
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
25
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
26 #ifndef CPU_ZERO_VM_REGISTER_ZERO_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
27 #define CPU_ZERO_VM_REGISTER_ZERO_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
28
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
29 #include "asm/register.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
30 #include "vm_version_zero.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
31
1010
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
32 class VMRegImpl;
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
33 typedef VMRegImpl* VMReg;
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
34
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
35 // Use Register as shortcut
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
36 class RegisterImpl;
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
37 typedef RegisterImpl* Register;
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
38
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
39 inline Register as_Register(int encoding) {
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
40 return (Register)(intptr_t) encoding;
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
41 }
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
42
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
43 // The implementation of integer registers for the zero architecture
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
44 class RegisterImpl : public AbstractRegisterImpl {
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
45 public:
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
46 enum {
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
47 number_of_registers = 0
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
48 };
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
49
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
50 // construction
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
51 inline friend Register as_Register(int encoding);
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
52 VMReg as_VMReg();
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
53
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
54 // derived registers, offsets, and addresses
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
55 Register successor() const {
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
56 return as_Register(encoding() + 1);
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
57 }
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
58
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
59 // accessors
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
60 int encoding() const {
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
61 assert(is_valid(), "invalid register");
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
62 return (intptr_t)this;
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
63 }
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
64 bool is_valid() const {
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
65 return 0 <= (intptr_t) this && (intptr_t)this < number_of_registers;
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
66 }
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
67 const char* name() const;
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
68 };
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
69
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
70 // Use FloatRegister as shortcut
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
71 class FloatRegisterImpl;
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
72 typedef FloatRegisterImpl* FloatRegister;
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
73
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
74 inline FloatRegister as_FloatRegister(int encoding) {
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
75 return (FloatRegister)(intptr_t) encoding;
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
76 }
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
77
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
78 // The implementation of floating point registers for the zero architecture
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
79 class FloatRegisterImpl : public AbstractRegisterImpl {
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
80 public:
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
81 enum {
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
82 number_of_registers = 0
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
83 };
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
84
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
85 // construction
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
86 inline friend FloatRegister as_FloatRegister(int encoding);
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
87 VMReg as_VMReg();
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
88
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
89 // derived registers, offsets, and addresses
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
90 FloatRegister successor() const {
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
91 return as_FloatRegister(encoding() + 1);
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
92 }
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
93
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
94 // accessors
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
95 int encoding() const {
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
96 assert(is_valid(), "invalid register");
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
97 return (intptr_t)this;
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
98 }
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
99 bool is_valid() const {
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
100 return 0 <= (intptr_t) this && (intptr_t)this < number_of_registers;
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
101 }
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
102 const char* name() const;
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
103 };
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
104
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
105 class ConcreteRegisterImpl : public AbstractRegisterImpl {
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
106 public:
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
107 enum {
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
108 number_of_registers = RegisterImpl::number_of_registers +
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
109 FloatRegisterImpl::number_of_registers
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
110 };
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
111
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
112 static const int max_gpr;
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
113 static const int max_fpr;
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
114 };
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
115
354d3184f6b2 6890308: integrate zero assembler hotspot changes
never
parents:
diff changeset
116 CONSTANT_REGISTER_DECLARATION(Register, noreg, (-1));
6926
a3e2f723f2a5 8000780: make Zero build and run with JDK8
twisti
parents: 1972
diff changeset
117 #ifndef DONT_USE_REGISTER_DEFINES
a3e2f723f2a5 8000780: make Zero build and run with JDK8
twisti
parents: 1972
diff changeset
118 #define noreg ((Register)(noreg_RegisterEnumValue))
a3e2f723f2a5 8000780: make Zero build and run with JDK8
twisti
parents: 1972
diff changeset
119 #endif
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
120
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
121 #endif // CPU_ZERO_VM_REGISTER_ZERO_HPP