-
Notifications
You must be signed in to change notification settings - Fork 0
/
A123.java
48 lines (38 loc) · 1.5 KB
/
A123.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import java.lang.reflect.*;
import jdk.vm.ci.runtime.*;
import jdk.vm.ci.meta.*;
import jdk.vm.ci.code.*;
import jdk.vm.ci.hotspot.*;
import jdk.vm.ci.amd64.*;
import jdk.vm.ci.code.test.*;
import jdk.vm.ci.code.test.amd64.AMD64TestAssembler;
public class A123{
private static void prepare() throws Exception{
JVMCIBackend backend = JVMCI.getRuntime().getHostJVMCIBackend();
MetaAccessProvider metaAccess = backend.getMetaAccess();
CodeCacheProvider codeCache = backend.getCodeCache();
TestHotSpotVMConfig config = new TestHotSpotVMConfig(
HotSpotJVMCIRuntime.runtime().getConfigStore());
AMD64TestAssembler asm = new AMD64TestAssembler(codeCache, config);
HotSpotResolvedJavaMethod resolvedMethod =
(HotSpotResolvedJavaMethod)metaAccess.lookupJavaMethod(
A123.class.getMethod("comp", int.class));
asm.emitPrologue();
asm.emitLoadInt(AMD64.rax, 1);
asm.emitIntRet(AMD64.rax);
asm.emitEpilogue();
HotSpotCompiledNmethod nm =
(HotSpotCompiledNmethod)asm.finish(resolvedMethod);
Field bciField = HotSpotCompiledNmethod.class.getDeclaredField("entryBCI");
bciField.setAccessible(true);
bciField.setInt(nm, -1);
codeCache.setDefaultCode(resolvedMethod, nm);
}
public static boolean comp(int a){
return (a == 1) && (a == 2) && (a == 3);
}
public static void main(String[] args) throws Exception{
prepare();
System.out.println(comp(args.length));
}
}