Mercurial > hg > graal-compiler
annotate graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotSafepointOp.java @ 14031:390c4b742890
made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
author | twisti |
---|---|
date | Thu, 27 Feb 2014 11:33:17 -0800 |
parents | 4347ad3df3d7 |
children | 6bab029d6e3a |
rev | line source |
---|---|
10694
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
1 /* |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
2 * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
4 * |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
8 * |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
13 * accompanied this code). |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
14 * |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
18 * |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
21 * questions. |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
22 */ |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
23 package com.oracle.graal.hotspot.sparc; |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
24 |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
25 import static com.oracle.graal.asm.sparc.SPARCMacroAssembler.*; |
11760
ce0b00597980
made safepoint-on-return use specialized HotSpot runtime support for such safepoints (which have no debug info attached)
Doug Simon <doug.simon@oracle.com>
parents:
10913
diff
changeset
|
26 import static com.oracle.graal.hotspot.bridge.Marks.*; |
10694
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
27 import static com.oracle.graal.sparc.SPARC.*; |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
28 |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
29 import com.oracle.graal.api.code.*; |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
30 import com.oracle.graal.api.meta.*; |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
31 import com.oracle.graal.asm.sparc.*; |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
32 import com.oracle.graal.hotspot.*; |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
33 import com.oracle.graal.lir.*; |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
34 import com.oracle.graal.lir.sparc.*; |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
35 import com.oracle.graal.lir.asm.*; |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
36 import com.oracle.graal.nodes.spi.*; |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
37 |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
38 /** |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
39 * Emits a safepoint poll. |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
40 */ |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
41 @Opcode("SAFEPOINT") |
11760
ce0b00597980
made safepoint-on-return use specialized HotSpot runtime support for such safepoints (which have no debug info attached)
Doug Simon <doug.simon@oracle.com>
parents:
10913
diff
changeset
|
42 public class SPARCHotSpotSafepointOp extends SPARCLIRInstruction { |
10694
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
43 |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
44 @State protected LIRFrameState state; |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
45 @Temp({OperandFlag.REG}) private AllocatableValue temp; |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
46 |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
47 private final HotSpotVMConfig config; |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
48 |
11760
ce0b00597980
made safepoint-on-return use specialized HotSpot runtime support for such safepoints (which have no debug info attached)
Doug Simon <doug.simon@oracle.com>
parents:
10913
diff
changeset
|
49 public SPARCHotSpotSafepointOp(LIRFrameState state, HotSpotVMConfig config, LIRGeneratorTool tool) { |
10694
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
50 this.state = state; |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
51 this.config = config; |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
52 temp = tool.newVariable(tool.target().wordKind); |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
53 } |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
54 |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
55 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12559
diff
changeset
|
56 public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { |
11760
ce0b00597980
made safepoint-on-return use specialized HotSpot runtime support for such safepoints (which have no debug info attached)
Doug Simon <doug.simon@oracle.com>
parents:
10913
diff
changeset
|
57 Register scratch = ((RegisterValue) temp).getRegister(); |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12559
diff
changeset
|
58 emitCode(crb, masm, config, false, state, scratch); |
11760
ce0b00597980
made safepoint-on-return use specialized HotSpot runtime support for such safepoints (which have no debug info attached)
Doug Simon <doug.simon@oracle.com>
parents:
10913
diff
changeset
|
59 } |
ce0b00597980
made safepoint-on-return use specialized HotSpot runtime support for such safepoints (which have no debug info attached)
Doug Simon <doug.simon@oracle.com>
parents:
10913
diff
changeset
|
60 |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12559
diff
changeset
|
61 public static void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm, HotSpotVMConfig config, boolean atReturn, LIRFrameState state, Register scratch) { |
14031
390c4b742890
made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents:
14013
diff
changeset
|
62 final int pos = masm.position(); |
10913 | 63 new Setx(config.safepointPollingAddress, scratch).emit(masm); |
14013 | 64 crb.recordMark(atReturn ? MARK_POLL_RETURN_FAR : MARK_POLL_FAR); |
11760
ce0b00597980
made safepoint-on-return use specialized HotSpot runtime support for such safepoints (which have no debug info attached)
Doug Simon <doug.simon@oracle.com>
parents:
10913
diff
changeset
|
65 if (state != null) { |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12559
diff
changeset
|
66 crb.recordInfopoint(pos, state, InfopointReason.SAFEPOINT); |
11760
ce0b00597980
made safepoint-on-return use specialized HotSpot runtime support for such safepoints (which have no debug info attached)
Doug Simon <doug.simon@oracle.com>
parents:
10913
diff
changeset
|
67 } |
10694
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
68 new Ldx(new SPARCAddress(scratch, 0), g0).emit(masm); |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
69 } |
31266ceb86ef
SPARC: Can compile and run two or three methods of a bootstrap.
twisti
parents:
diff
changeset
|
70 } |