annotate src/share/vm/asm/assembler.hpp @ 4710:41406797186b

7113012: G1: rename not-fully-young GCs as "mixed" Summary: Renamed partially-young GCs as mixed and fully-young GCs as young. Change all external output that includes those terms (GC log and GC ergo log) as well as any comments, fields, methods, etc. The changeset also includes very minor code tidying up (added some curly brackets). Reviewed-by: johnc, brutisso
author tonyp
date Fri, 16 Dec 2011 02:14:27 -0500
parents 6729bbc1fcd6
children 40c2484c09e1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
2426
1d1603768966 7010070: Update all 2010 Oracle-changed OpenJDK files to have the proper copyright dates - second pass
trims
parents: 2192
diff changeset
2 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 665
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 665
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 665
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
25 #ifndef SHARE_VM_ASM_ASSEMBLER_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
26 #define SHARE_VM_ASM_ASSEMBLER_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
27
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
28 #include "code/oopRecorder.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
29 #include "code/relocInfo.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
30 #include "memory/allocation.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
31 #include "utilities/debug.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
32 #include "utilities/growableArray.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
33 #include "utilities/top.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
34 #ifdef TARGET_ARCH_x86
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
35 # include "register_x86.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
36 # include "vm_version_x86.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
37 #endif
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
38 #ifdef TARGET_ARCH_sparc
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
39 # include "register_sparc.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
40 # include "vm_version_sparc.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
41 #endif
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
42 #ifdef TARGET_ARCH_zero
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
43 # include "register_zero.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
44 # include "vm_version_zero.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
45 #endif
2192
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2008
diff changeset
46 #ifdef TARGET_ARCH_arm
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2008
diff changeset
47 # include "register_arm.hpp"
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2008
diff changeset
48 # include "vm_version_arm.hpp"
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2008
diff changeset
49 #endif
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2008
diff changeset
50 #ifdef TARGET_ARCH_ppc
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2008
diff changeset
51 # include "register_ppc.hpp"
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2008
diff changeset
52 # include "vm_version_ppc.hpp"
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2008
diff changeset
53 #endif
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
54
605
98cb887364d3 6810672: Comment typos
twisti
parents: 0
diff changeset
55 // This file contains platform-independent assembler declarations.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
56
a61af66fc99e Initial load
duke
parents:
diff changeset
57 class CodeBuffer;
a61af66fc99e Initial load
duke
parents:
diff changeset
58 class MacroAssembler;
a61af66fc99e Initial load
duke
parents:
diff changeset
59 class AbstractAssembler;
a61af66fc99e Initial load
duke
parents:
diff changeset
60 class Label;
a61af66fc99e Initial load
duke
parents:
diff changeset
61
a61af66fc99e Initial load
duke
parents:
diff changeset
62 /**
a61af66fc99e Initial load
duke
parents:
diff changeset
63 * Labels represent destinations for control transfer instructions. Such
a61af66fc99e Initial load
duke
parents:
diff changeset
64 * instructions can accept a Label as their target argument. A Label is
a61af66fc99e Initial load
duke
parents:
diff changeset
65 * bound to the current location in the code stream by calling the
a61af66fc99e Initial load
duke
parents:
diff changeset
66 * MacroAssembler's 'bind' method, which in turn calls the Label's 'bind'
a61af66fc99e Initial load
duke
parents:
diff changeset
67 * method. A Label may be referenced by an instruction before it's bound
a61af66fc99e Initial load
duke
parents:
diff changeset
68 * (i.e., 'forward referenced'). 'bind' stores the current code offset
a61af66fc99e Initial load
duke
parents:
diff changeset
69 * in the Label object.
a61af66fc99e Initial load
duke
parents:
diff changeset
70 *
a61af66fc99e Initial load
duke
parents:
diff changeset
71 * If an instruction references a bound Label, the offset field(s) within
a61af66fc99e Initial load
duke
parents:
diff changeset
72 * the instruction are immediately filled in based on the Label's code
a61af66fc99e Initial load
duke
parents:
diff changeset
73 * offset. If an instruction references an unbound label, that
a61af66fc99e Initial load
duke
parents:
diff changeset
74 * instruction is put on a list of instructions that must be patched
a61af66fc99e Initial load
duke
parents:
diff changeset
75 * (i.e., 'resolved') when the Label is bound.
a61af66fc99e Initial load
duke
parents:
diff changeset
76 *
a61af66fc99e Initial load
duke
parents:
diff changeset
77 * 'bind' will call the platform-specific 'patch_instruction' method to
a61af66fc99e Initial load
duke
parents:
diff changeset
78 * fill in the offset field(s) for each unresolved instruction (if there
a61af66fc99e Initial load
duke
parents:
diff changeset
79 * are any). 'patch_instruction' lives in one of the
a61af66fc99e Initial load
duke
parents:
diff changeset
80 * cpu/<arch>/vm/assembler_<arch>* files.
a61af66fc99e Initial load
duke
parents:
diff changeset
81 *
a61af66fc99e Initial load
duke
parents:
diff changeset
82 * Instead of using a linked list of unresolved instructions, a Label has
a61af66fc99e Initial load
duke
parents:
diff changeset
83 * an array of unresolved instruction code offsets. _patch_index
a61af66fc99e Initial load
duke
parents:
diff changeset
84 * contains the total number of forward references. If the Label's array
a61af66fc99e Initial load
duke
parents:
diff changeset
85 * overflows (i.e., _patch_index grows larger than the array size), a
a61af66fc99e Initial load
duke
parents:
diff changeset
86 * GrowableArray is allocated to hold the remaining offsets. (The cache
a61af66fc99e Initial load
duke
parents:
diff changeset
87 * size is 4 for now, which handles over 99.5% of the cases)
a61af66fc99e Initial load
duke
parents:
diff changeset
88 *
a61af66fc99e Initial load
duke
parents:
diff changeset
89 * Labels may only be used within a single CodeSection. If you need
a61af66fc99e Initial load
duke
parents:
diff changeset
90 * to create references between code sections, use explicit relocations.
a61af66fc99e Initial load
duke
parents:
diff changeset
91 */
a61af66fc99e Initial load
duke
parents:
diff changeset
92 class Label VALUE_OBJ_CLASS_SPEC {
a61af66fc99e Initial load
duke
parents:
diff changeset
93 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
94 enum { PatchCacheSize = 4 };
a61af66fc99e Initial load
duke
parents:
diff changeset
95
a61af66fc99e Initial load
duke
parents:
diff changeset
96 // _loc encodes both the binding state (via its sign)
a61af66fc99e Initial load
duke
parents:
diff changeset
97 // and the binding locator (via its value) of a label.
a61af66fc99e Initial load
duke
parents:
diff changeset
98 //
a61af66fc99e Initial load
duke
parents:
diff changeset
99 // _loc >= 0 bound label, loc() encodes the target (jump) position
a61af66fc99e Initial load
duke
parents:
diff changeset
100 // _loc == -1 unbound label
a61af66fc99e Initial load
duke
parents:
diff changeset
101 int _loc;
a61af66fc99e Initial load
duke
parents:
diff changeset
102
a61af66fc99e Initial load
duke
parents:
diff changeset
103 // References to instructions that jump to this unresolved label.
a61af66fc99e Initial load
duke
parents:
diff changeset
104 // These instructions need to be patched when the label is bound
a61af66fc99e Initial load
duke
parents:
diff changeset
105 // using the platform-specific patchInstruction() method.
a61af66fc99e Initial load
duke
parents:
diff changeset
106 //
a61af66fc99e Initial load
duke
parents:
diff changeset
107 // To avoid having to allocate from the C-heap each time, we provide
a61af66fc99e Initial load
duke
parents:
diff changeset
108 // a local cache and use the overflow only if we exceed the local cache
a61af66fc99e Initial load
duke
parents:
diff changeset
109 int _patches[PatchCacheSize];
a61af66fc99e Initial load
duke
parents:
diff changeset
110 int _patch_index;
a61af66fc99e Initial load
duke
parents:
diff changeset
111 GrowableArray<int>* _patch_overflow;
a61af66fc99e Initial load
duke
parents:
diff changeset
112
a61af66fc99e Initial load
duke
parents:
diff changeset
113 Label(const Label&) { ShouldNotReachHere(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
114
a61af66fc99e Initial load
duke
parents:
diff changeset
115 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
116
a61af66fc99e Initial load
duke
parents:
diff changeset
117 /**
a61af66fc99e Initial load
duke
parents:
diff changeset
118 * After binding, be sure 'patch_instructions' is called later to link
a61af66fc99e Initial load
duke
parents:
diff changeset
119 */
a61af66fc99e Initial load
duke
parents:
diff changeset
120 void bind_loc(int loc) {
a61af66fc99e Initial load
duke
parents:
diff changeset
121 assert(loc >= 0, "illegal locator");
a61af66fc99e Initial load
duke
parents:
diff changeset
122 assert(_loc == -1, "already bound");
a61af66fc99e Initial load
duke
parents:
diff changeset
123 _loc = loc;
a61af66fc99e Initial load
duke
parents:
diff changeset
124 }
a61af66fc99e Initial load
duke
parents:
diff changeset
125 void bind_loc(int pos, int sect); // = bind_loc(locator(pos, sect))
a61af66fc99e Initial load
duke
parents:
diff changeset
126
a61af66fc99e Initial load
duke
parents:
diff changeset
127 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
128 // Iterates over all unresolved instructions for printing
a61af66fc99e Initial load
duke
parents:
diff changeset
129 void print_instructions(MacroAssembler* masm) const;
a61af66fc99e Initial load
duke
parents:
diff changeset
130 #endif // PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
131
a61af66fc99e Initial load
duke
parents:
diff changeset
132 /**
a61af66fc99e Initial load
duke
parents:
diff changeset
133 * Returns the position of the the Label in the code buffer
a61af66fc99e Initial load
duke
parents:
diff changeset
134 * The position is a 'locator', which encodes both offset and section.
a61af66fc99e Initial load
duke
parents:
diff changeset
135 */
a61af66fc99e Initial load
duke
parents:
diff changeset
136 int loc() const {
a61af66fc99e Initial load
duke
parents:
diff changeset
137 assert(_loc >= 0, "unbound label");
a61af66fc99e Initial load
duke
parents:
diff changeset
138 return _loc;
a61af66fc99e Initial load
duke
parents:
diff changeset
139 }
a61af66fc99e Initial load
duke
parents:
diff changeset
140 int loc_pos() const; // == locator_pos(loc())
a61af66fc99e Initial load
duke
parents:
diff changeset
141 int loc_sect() const; // == locator_sect(loc())
a61af66fc99e Initial load
duke
parents:
diff changeset
142
a61af66fc99e Initial load
duke
parents:
diff changeset
143 bool is_bound() const { return _loc >= 0; }
a61af66fc99e Initial load
duke
parents:
diff changeset
144 bool is_unbound() const { return _loc == -1 && _patch_index > 0; }
a61af66fc99e Initial load
duke
parents:
diff changeset
145 bool is_unused() const { return _loc == -1 && _patch_index == 0; }
a61af66fc99e Initial load
duke
parents:
diff changeset
146
a61af66fc99e Initial load
duke
parents:
diff changeset
147 /**
a61af66fc99e Initial load
duke
parents:
diff changeset
148 * Adds a reference to an unresolved displacement instruction to
a61af66fc99e Initial load
duke
parents:
diff changeset
149 * this unbound label
a61af66fc99e Initial load
duke
parents:
diff changeset
150 *
a61af66fc99e Initial load
duke
parents:
diff changeset
151 * @param cb the code buffer being patched
a61af66fc99e Initial load
duke
parents:
diff changeset
152 * @param branch_loc the locator of the branch instruction in the code buffer
a61af66fc99e Initial load
duke
parents:
diff changeset
153 */
a61af66fc99e Initial load
duke
parents:
diff changeset
154 void add_patch_at(CodeBuffer* cb, int branch_loc);
a61af66fc99e Initial load
duke
parents:
diff changeset
155
a61af66fc99e Initial load
duke
parents:
diff changeset
156 /**
a61af66fc99e Initial load
duke
parents:
diff changeset
157 * Iterate over the list of patches, resolving the instructions
a61af66fc99e Initial load
duke
parents:
diff changeset
158 * Call patch_instruction on each 'branch_loc' value
a61af66fc99e Initial load
duke
parents:
diff changeset
159 */
a61af66fc99e Initial load
duke
parents:
diff changeset
160 void patch_instructions(MacroAssembler* masm);
a61af66fc99e Initial load
duke
parents:
diff changeset
161
a61af66fc99e Initial load
duke
parents:
diff changeset
162 void init() {
a61af66fc99e Initial load
duke
parents:
diff changeset
163 _loc = -1;
a61af66fc99e Initial load
duke
parents:
diff changeset
164 _patch_index = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
165 _patch_overflow = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
166 }
a61af66fc99e Initial load
duke
parents:
diff changeset
167
a61af66fc99e Initial load
duke
parents:
diff changeset
168 Label() {
a61af66fc99e Initial load
duke
parents:
diff changeset
169 init();
a61af66fc99e Initial load
duke
parents:
diff changeset
170 }
a61af66fc99e Initial load
duke
parents:
diff changeset
171 };
a61af66fc99e Initial load
duke
parents:
diff changeset
172
622
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
173 // A union type for code which has to assemble both constant and
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
174 // non-constant operands, when the distinction cannot be made
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
175 // statically.
665
c89f86385056 6814659: separable cleanups and subroutines for 6655638
jrose
parents: 622
diff changeset
176 class RegisterOrConstant VALUE_OBJ_CLASS_SPEC {
622
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
177 private:
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
178 Register _r;
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
179 intptr_t _c;
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
180
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
181 public:
665
c89f86385056 6814659: separable cleanups and subroutines for 6655638
jrose
parents: 622
diff changeset
182 RegisterOrConstant(): _r(noreg), _c(0) {}
c89f86385056 6814659: separable cleanups and subroutines for 6655638
jrose
parents: 622
diff changeset
183 RegisterOrConstant(Register r): _r(r), _c(0) {}
c89f86385056 6814659: separable cleanups and subroutines for 6655638
jrose
parents: 622
diff changeset
184 RegisterOrConstant(intptr_t c): _r(noreg), _c(c) {}
622
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
185
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
186 Register as_register() const { assert(is_register(),""); return _r; }
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
187 intptr_t as_constant() const { assert(is_constant(),""); return _c; }
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
188
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
189 Register register_or_noreg() const { return _r; }
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
190 intptr_t constant_or_zero() const { return _c; }
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
191
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
192 bool is_register() const { return _r != noreg; }
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
193 bool is_constant() const { return _r == noreg; }
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
194 };
0
a61af66fc99e Initial load
duke
parents:
diff changeset
195
a61af66fc99e Initial load
duke
parents:
diff changeset
196 // The Abstract Assembler: Pure assembler doing NO optimizations on the
a61af66fc99e Initial load
duke
parents:
diff changeset
197 // instruction level; i.e., what you write is what you get.
a61af66fc99e Initial load
duke
parents:
diff changeset
198 // The Assembler is generating code into a CodeBuffer.
a61af66fc99e Initial load
duke
parents:
diff changeset
199 class AbstractAssembler : public ResourceObj {
a61af66fc99e Initial load
duke
parents:
diff changeset
200 friend class Label;
a61af66fc99e Initial load
duke
parents:
diff changeset
201
a61af66fc99e Initial load
duke
parents:
diff changeset
202 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
203 CodeSection* _code_section; // section within the code buffer
a61af66fc99e Initial load
duke
parents:
diff changeset
204 address _code_begin; // first byte of code buffer
a61af66fc99e Initial load
duke
parents:
diff changeset
205 address _code_limit; // first byte after code buffer
a61af66fc99e Initial load
duke
parents:
diff changeset
206 address _code_pos; // current code generation position
a61af66fc99e Initial load
duke
parents:
diff changeset
207 OopRecorder* _oop_recorder; // support for relocInfo::oop_type
a61af66fc99e Initial load
duke
parents:
diff changeset
208
a61af66fc99e Initial load
duke
parents:
diff changeset
209 // Code emission & accessing
a61af66fc99e Initial load
duke
parents:
diff changeset
210 address addr_at(int pos) const { return _code_begin + pos; }
a61af66fc99e Initial load
duke
parents:
diff changeset
211
a61af66fc99e Initial load
duke
parents:
diff changeset
212 // This routine is called with a label is used for an address.
a61af66fc99e Initial load
duke
parents:
diff changeset
213 // Labels and displacements truck in offsets, but target must return a PC.
a61af66fc99e Initial load
duke
parents:
diff changeset
214 address target(Label& L); // return _code_section->target(L)
a61af66fc99e Initial load
duke
parents:
diff changeset
215
a61af66fc99e Initial load
duke
parents:
diff changeset
216 bool is8bit(int x) const { return -0x80 <= x && x < 0x80; }
a61af66fc99e Initial load
duke
parents:
diff changeset
217 bool isByte(int x) const { return 0 <= x && x < 0x100; }
a61af66fc99e Initial load
duke
parents:
diff changeset
218 bool isShiftCount(int x) const { return 0 <= x && x < 32; }
a61af66fc99e Initial load
duke
parents:
diff changeset
219
a61af66fc99e Initial load
duke
parents:
diff changeset
220 void emit_byte(int x); // emit a single byte
a61af66fc99e Initial load
duke
parents:
diff changeset
221 void emit_word(int x); // emit a 16-bit word (not a wordSize word!)
a61af66fc99e Initial load
duke
parents:
diff changeset
222 void emit_long(jint x); // emit a 32-bit word (not a longSize word!)
a61af66fc99e Initial load
duke
parents:
diff changeset
223 void emit_address(address x); // emit an address (not a longSize word!)
a61af66fc99e Initial load
duke
parents:
diff changeset
224
a61af66fc99e Initial load
duke
parents:
diff changeset
225 // Instruction boundaries (required when emitting relocatable values).
a61af66fc99e Initial load
duke
parents:
diff changeset
226 class InstructionMark: public StackObj {
a61af66fc99e Initial load
duke
parents:
diff changeset
227 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
228 AbstractAssembler* _assm;
a61af66fc99e Initial load
duke
parents:
diff changeset
229
a61af66fc99e Initial load
duke
parents:
diff changeset
230 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
231 InstructionMark(AbstractAssembler* assm) : _assm(assm) {
a61af66fc99e Initial load
duke
parents:
diff changeset
232 assert(assm->inst_mark() == NULL, "overlapping instructions");
a61af66fc99e Initial load
duke
parents:
diff changeset
233 _assm->set_inst_mark();
a61af66fc99e Initial load
duke
parents:
diff changeset
234 }
a61af66fc99e Initial load
duke
parents:
diff changeset
235 ~InstructionMark() {
a61af66fc99e Initial load
duke
parents:
diff changeset
236 _assm->clear_inst_mark();
a61af66fc99e Initial load
duke
parents:
diff changeset
237 }
a61af66fc99e Initial load
duke
parents:
diff changeset
238 };
a61af66fc99e Initial load
duke
parents:
diff changeset
239 friend class InstructionMark;
a61af66fc99e Initial load
duke
parents:
diff changeset
240 #ifdef ASSERT
a61af66fc99e Initial load
duke
parents:
diff changeset
241 // Make it return true on platforms which need to verify
a61af66fc99e Initial load
duke
parents:
diff changeset
242 // instruction boundaries for some operations.
a61af66fc99e Initial load
duke
parents:
diff changeset
243 inline static bool pd_check_instruction_mark();
a61af66fc99e Initial load
duke
parents:
diff changeset
244 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
245
a61af66fc99e Initial load
duke
parents:
diff changeset
246 // Label functions
a61af66fc99e Initial load
duke
parents:
diff changeset
247 void print(Label& L);
a61af66fc99e Initial load
duke
parents:
diff changeset
248
a61af66fc99e Initial load
duke
parents:
diff changeset
249 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
250
a61af66fc99e Initial load
duke
parents:
diff changeset
251 // Creation
a61af66fc99e Initial load
duke
parents:
diff changeset
252 AbstractAssembler(CodeBuffer* code);
a61af66fc99e Initial load
duke
parents:
diff changeset
253
a61af66fc99e Initial load
duke
parents:
diff changeset
254 // save end pointer back to code buf.
a61af66fc99e Initial load
duke
parents:
diff changeset
255 void sync();
a61af66fc99e Initial load
duke
parents:
diff changeset
256
a61af66fc99e Initial load
duke
parents:
diff changeset
257 // ensure buf contains all code (call this before using/copying the code)
a61af66fc99e Initial load
duke
parents:
diff changeset
258 void flush();
a61af66fc99e Initial load
duke
parents:
diff changeset
259
4114
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
260 // min and max values for signed immediate ranges
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
261 static int min_simm(int nbits) { return -(intptr_t(1) << (nbits - 1)) ; }
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
262 static int max_simm(int nbits) { return (intptr_t(1) << (nbits - 1)) - 1; }
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
263
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
264 // Define some:
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
265 static int min_simm10() { return min_simm(10); }
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
266 static int min_simm13() { return min_simm(13); }
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
267 static int min_simm16() { return min_simm(16); }
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
268
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
269 // Test if x is within signed immediate range for nbits
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
270 static bool is_simm(intptr_t x, int nbits) { return min_simm(nbits) <= x && x <= max_simm(nbits); }
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
271
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
272 // Define some:
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
273 static bool is_simm5( intptr_t x) { return is_simm(x, 5 ); }
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
274 static bool is_simm8( intptr_t x) { return is_simm(x, 8 ); }
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
275 static bool is_simm10(intptr_t x) { return is_simm(x, 10); }
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
276 static bool is_simm11(intptr_t x) { return is_simm(x, 11); }
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
277 static bool is_simm12(intptr_t x) { return is_simm(x, 12); }
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
278 static bool is_simm13(intptr_t x) { return is_simm(x, 13); }
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
279 static bool is_simm16(intptr_t x) { return is_simm(x, 16); }
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
280 static bool is_simm26(intptr_t x) { return is_simm(x, 26); }
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
281 static bool is_simm32(intptr_t x) { return is_simm(x, 32); }
6729bbc1fcd6 7003454: order constants in constant table by number of references in code
twisti
parents: 2426
diff changeset
282
0
a61af66fc99e Initial load
duke
parents:
diff changeset
283 // Accessors
a61af66fc99e Initial load
duke
parents:
diff changeset
284 CodeBuffer* code() const; // _code_section->outer()
a61af66fc99e Initial load
duke
parents:
diff changeset
285 CodeSection* code_section() const { return _code_section; }
a61af66fc99e Initial load
duke
parents:
diff changeset
286 int sect() const; // return _code_section->index()
a61af66fc99e Initial load
duke
parents:
diff changeset
287 address pc() const { return _code_pos; }
a61af66fc99e Initial load
duke
parents:
diff changeset
288 int offset() const { return _code_pos - _code_begin; }
a61af66fc99e Initial load
duke
parents:
diff changeset
289 int locator() const; // CodeBuffer::locator(offset(), sect())
a61af66fc99e Initial load
duke
parents:
diff changeset
290 OopRecorder* oop_recorder() const { return _oop_recorder; }
a61af66fc99e Initial load
duke
parents:
diff changeset
291 void set_oop_recorder(OopRecorder* r) { _oop_recorder = r; }
a61af66fc99e Initial load
duke
parents:
diff changeset
292
a61af66fc99e Initial load
duke
parents:
diff changeset
293 address inst_mark() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
294 void set_inst_mark();
a61af66fc99e Initial load
duke
parents:
diff changeset
295 void clear_inst_mark();
a61af66fc99e Initial load
duke
parents:
diff changeset
296
a61af66fc99e Initial load
duke
parents:
diff changeset
297 // Constants in code
a61af66fc99e Initial load
duke
parents:
diff changeset
298 void a_byte(int x);
a61af66fc99e Initial load
duke
parents:
diff changeset
299 void a_long(jint x);
a61af66fc99e Initial load
duke
parents:
diff changeset
300 void relocate(RelocationHolder const& rspec, int format = 0);
a61af66fc99e Initial load
duke
parents:
diff changeset
301 void relocate( relocInfo::relocType rtype, int format = 0) {
a61af66fc99e Initial load
duke
parents:
diff changeset
302 if (rtype != relocInfo::none)
a61af66fc99e Initial load
duke
parents:
diff changeset
303 relocate(Relocation::spec_simple(rtype), format);
a61af66fc99e Initial load
duke
parents:
diff changeset
304 }
a61af66fc99e Initial load
duke
parents:
diff changeset
305
a61af66fc99e Initial load
duke
parents:
diff changeset
306 static int code_fill_byte(); // used to pad out odd-sized code buffers
a61af66fc99e Initial load
duke
parents:
diff changeset
307
a61af66fc99e Initial load
duke
parents:
diff changeset
308 // Associate a comment with the current offset. It will be printed
a61af66fc99e Initial load
duke
parents:
diff changeset
309 // along with the disassembly when printing nmethods. Currently
a61af66fc99e Initial load
duke
parents:
diff changeset
310 // only supported in the instruction section of the code buffer.
a61af66fc99e Initial load
duke
parents:
diff changeset
311 void block_comment(const char* comment);
a61af66fc99e Initial load
duke
parents:
diff changeset
312
a61af66fc99e Initial load
duke
parents:
diff changeset
313 // Label functions
a61af66fc99e Initial load
duke
parents:
diff changeset
314 void bind(Label& L); // binds an unbound label L to the current code position
a61af66fc99e Initial load
duke
parents:
diff changeset
315
a61af66fc99e Initial load
duke
parents:
diff changeset
316 // Move to a different section in the same code buffer.
a61af66fc99e Initial load
duke
parents:
diff changeset
317 void set_code_section(CodeSection* cs);
a61af66fc99e Initial load
duke
parents:
diff changeset
318
a61af66fc99e Initial load
duke
parents:
diff changeset
319 // Inform assembler when generating stub code and relocation info
a61af66fc99e Initial load
duke
parents:
diff changeset
320 address start_a_stub(int required_space);
a61af66fc99e Initial load
duke
parents:
diff changeset
321 void end_a_stub();
a61af66fc99e Initial load
duke
parents:
diff changeset
322 // Ditto for constants.
a61af66fc99e Initial load
duke
parents:
diff changeset
323 address start_a_const(int required_space, int required_align = sizeof(double));
a61af66fc99e Initial load
duke
parents:
diff changeset
324 void end_a_const();
a61af66fc99e Initial load
duke
parents:
diff changeset
325
2008
2f644f85485d 6961690: load oops from constant table on SPARC
twisti
parents: 1972
diff changeset
326 // constants support
2f644f85485d 6961690: load oops from constant table on SPARC
twisti
parents: 1972
diff changeset
327 address long_constant(jlong c) {
2f644f85485d 6961690: load oops from constant table on SPARC
twisti
parents: 1972
diff changeset
328 address ptr = start_a_const(sizeof(c), sizeof(c));
2f644f85485d 6961690: load oops from constant table on SPARC
twisti
parents: 1972
diff changeset
329 if (ptr != NULL) {
2f644f85485d 6961690: load oops from constant table on SPARC
twisti
parents: 1972
diff changeset
330 *(jlong*)ptr = c;
2f644f85485d 6961690: load oops from constant table on SPARC
twisti
parents: 1972
diff changeset
331 _code_pos = ptr + sizeof(c);
2f644f85485d 6961690: load oops from constant table on SPARC
twisti
parents: 1972
diff changeset
332 end_a_const();
2f644f85485d 6961690: load oops from constant table on SPARC
twisti
parents: 1972
diff changeset
333 }
2f644f85485d 6961690: load oops from constant table on SPARC
twisti
parents: 1972
diff changeset
334 return ptr;
2f644f85485d 6961690: load oops from constant table on SPARC
twisti
parents: 1972
diff changeset
335 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
336 address double_constant(jdouble c) {
a61af66fc99e Initial load
duke
parents:
diff changeset
337 address ptr = start_a_const(sizeof(c), sizeof(c));
a61af66fc99e Initial load
duke
parents:
diff changeset
338 if (ptr != NULL) {
a61af66fc99e Initial load
duke
parents:
diff changeset
339 *(jdouble*)ptr = c;
a61af66fc99e Initial load
duke
parents:
diff changeset
340 _code_pos = ptr + sizeof(c);
a61af66fc99e Initial load
duke
parents:
diff changeset
341 end_a_const();
a61af66fc99e Initial load
duke
parents:
diff changeset
342 }
a61af66fc99e Initial load
duke
parents:
diff changeset
343 return ptr;
a61af66fc99e Initial load
duke
parents:
diff changeset
344 }
a61af66fc99e Initial load
duke
parents:
diff changeset
345 address float_constant(jfloat c) {
a61af66fc99e Initial load
duke
parents:
diff changeset
346 address ptr = start_a_const(sizeof(c), sizeof(c));
a61af66fc99e Initial load
duke
parents:
diff changeset
347 if (ptr != NULL) {
a61af66fc99e Initial load
duke
parents:
diff changeset
348 *(jfloat*)ptr = c;
a61af66fc99e Initial load
duke
parents:
diff changeset
349 _code_pos = ptr + sizeof(c);
a61af66fc99e Initial load
duke
parents:
diff changeset
350 end_a_const();
a61af66fc99e Initial load
duke
parents:
diff changeset
351 }
a61af66fc99e Initial load
duke
parents:
diff changeset
352 return ptr;
a61af66fc99e Initial load
duke
parents:
diff changeset
353 }
2008
2f644f85485d 6961690: load oops from constant table on SPARC
twisti
parents: 1972
diff changeset
354 address address_constant(address c) {
2f644f85485d 6961690: load oops from constant table on SPARC
twisti
parents: 1972
diff changeset
355 address ptr = start_a_const(sizeof(c), sizeof(c));
2f644f85485d 6961690: load oops from constant table on SPARC
twisti
parents: 1972
diff changeset
356 if (ptr != NULL) {
2f644f85485d 6961690: load oops from constant table on SPARC
twisti
parents: 1972
diff changeset
357 *(address*)ptr = c;
2f644f85485d 6961690: load oops from constant table on SPARC
twisti
parents: 1972
diff changeset
358 _code_pos = ptr + sizeof(c);
2f644f85485d 6961690: load oops from constant table on SPARC
twisti
parents: 1972
diff changeset
359 end_a_const();
2f644f85485d 6961690: load oops from constant table on SPARC
twisti
parents: 1972
diff changeset
360 }
2f644f85485d 6961690: load oops from constant table on SPARC
twisti
parents: 1972
diff changeset
361 return ptr;
2f644f85485d 6961690: load oops from constant table on SPARC
twisti
parents: 1972
diff changeset
362 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
363 address address_constant(address c, RelocationHolder const& rspec) {
a61af66fc99e Initial load
duke
parents:
diff changeset
364 address ptr = start_a_const(sizeof(c), sizeof(c));
a61af66fc99e Initial load
duke
parents:
diff changeset
365 if (ptr != NULL) {
a61af66fc99e Initial load
duke
parents:
diff changeset
366 relocate(rspec);
a61af66fc99e Initial load
duke
parents:
diff changeset
367 *(address*)ptr = c;
a61af66fc99e Initial load
duke
parents:
diff changeset
368 _code_pos = ptr + sizeof(c);
a61af66fc99e Initial load
duke
parents:
diff changeset
369 end_a_const();
a61af66fc99e Initial load
duke
parents:
diff changeset
370 }
a61af66fc99e Initial load
duke
parents:
diff changeset
371 return ptr;
a61af66fc99e Initial load
duke
parents:
diff changeset
372 }
a61af66fc99e Initial load
duke
parents:
diff changeset
373
622
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
374 // Bootstrapping aid to cope with delayed determination of constants.
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
375 // Returns a static address which will eventually contain the constant.
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
376 // The value zero (NULL) stands instead of a constant which is still uncomputed.
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
377 // Thus, the eventual value of the constant must not be zero.
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
378 // This is fine, since this is designed for embedding object field
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
379 // offsets in code which must be generated before the object class is loaded.
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
380 // Field offsets are never zero, since an object's header (mark word)
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
381 // is located at offset zero.
665
c89f86385056 6814659: separable cleanups and subroutines for 6655638
jrose
parents: 622
diff changeset
382 RegisterOrConstant delayed_value(int(*value_fn)(), Register tmp, int offset = 0) {
c89f86385056 6814659: separable cleanups and subroutines for 6655638
jrose
parents: 622
diff changeset
383 return delayed_value_impl(delayed_value_addr(value_fn), tmp, offset);
622
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
384 }
665
c89f86385056 6814659: separable cleanups and subroutines for 6655638
jrose
parents: 622
diff changeset
385 RegisterOrConstant delayed_value(address(*value_fn)(), Register tmp, int offset = 0) {
c89f86385056 6814659: separable cleanups and subroutines for 6655638
jrose
parents: 622
diff changeset
386 return delayed_value_impl(delayed_value_addr(value_fn), tmp, offset);
622
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
387 }
665
c89f86385056 6814659: separable cleanups and subroutines for 6655638
jrose
parents: 622
diff changeset
388 virtual RegisterOrConstant delayed_value_impl(intptr_t* delayed_value_addr, Register tmp, int offset) = 0;
622
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
389 // Last overloading is platform-dependent; look in assembler_<arch>.cpp.
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
390 static intptr_t* delayed_value_addr(int(*constant_fn)());
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
391 static intptr_t* delayed_value_addr(address(*constant_fn)());
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
392 static void update_delayed_values();
56aae7be60d4 6812678: macro assembler needs delayed binding of a few constants (for 6655638)
jrose
parents: 605
diff changeset
393
0
a61af66fc99e Initial load
duke
parents:
diff changeset
394 // Bang stack to trigger StackOverflowError at a safe location
a61af66fc99e Initial load
duke
parents:
diff changeset
395 // implementation delegates to machine-specific bang_stack_with_offset
a61af66fc99e Initial load
duke
parents:
diff changeset
396 void generate_stack_overflow_check( int frame_size_in_bytes );
a61af66fc99e Initial load
duke
parents:
diff changeset
397 virtual void bang_stack_with_offset(int offset) = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
398
a61af66fc99e Initial load
duke
parents:
diff changeset
399
a61af66fc99e Initial load
duke
parents:
diff changeset
400 /**
a61af66fc99e Initial load
duke
parents:
diff changeset
401 * A platform-dependent method to patch a jump instruction that refers
a61af66fc99e Initial load
duke
parents:
diff changeset
402 * to this label.
a61af66fc99e Initial load
duke
parents:
diff changeset
403 *
a61af66fc99e Initial load
duke
parents:
diff changeset
404 * @param branch the location of the instruction to patch
a61af66fc99e Initial load
duke
parents:
diff changeset
405 * @param masm the assembler which generated the branch
a61af66fc99e Initial load
duke
parents:
diff changeset
406 */
a61af66fc99e Initial load
duke
parents:
diff changeset
407 void pd_patch_instruction(address branch, address target);
a61af66fc99e Initial load
duke
parents:
diff changeset
408
a61af66fc99e Initial load
duke
parents:
diff changeset
409 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
410 /**
a61af66fc99e Initial load
duke
parents:
diff changeset
411 * Platform-dependent method of printing an instruction that needs to be
a61af66fc99e Initial load
duke
parents:
diff changeset
412 * patched.
a61af66fc99e Initial load
duke
parents:
diff changeset
413 *
a61af66fc99e Initial load
duke
parents:
diff changeset
414 * @param branch the instruction to be patched in the buffer.
a61af66fc99e Initial load
duke
parents:
diff changeset
415 */
a61af66fc99e Initial load
duke
parents:
diff changeset
416 static void pd_print_patched_instruction(address branch);
a61af66fc99e Initial load
duke
parents:
diff changeset
417 #endif // PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
418 };
a61af66fc99e Initial load
duke
parents:
diff changeset
419
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
420 #ifdef TARGET_ARCH_x86
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
421 # include "assembler_x86.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
422 #endif
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
423 #ifdef TARGET_ARCH_sparc
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
424 # include "assembler_sparc.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
425 #endif
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
426 #ifdef TARGET_ARCH_zero
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
427 # include "assembler_zero.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
428 #endif
2192
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2008
diff changeset
429 #ifdef TARGET_ARCH_arm
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2008
diff changeset
430 # include "assembler_arm.hpp"
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2008
diff changeset
431 #endif
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2008
diff changeset
432 #ifdef TARGET_ARCH_ppc
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2008
diff changeset
433 # include "assembler_ppc.hpp"
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2008
diff changeset
434 #endif
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
435
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
436
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
437 #endif // SHARE_VM_ASM_ASSEMBLER_HPP