< prev index next >
test/compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/TestAssembler.java
Print this page
rev 28792 : 8159368: [JVMCI] SPARChotSpotRegisterConfig.callingConvention gives incorrect calling convention for native calls containing fp args
*** 26,39 ****
--- 26,41 ----
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.ArrayList;
import java.util.Arrays;
+ import jdk.vm.ci.code.CallingConvention;
import jdk.vm.ci.code.CodeCacheProvider;
import jdk.vm.ci.code.DebugInfo;
import jdk.vm.ci.code.Register;
import jdk.vm.ci.code.StackSlot;
+ import jdk.vm.ci.code.ValueKindFactory;
import jdk.vm.ci.code.site.Call;
import jdk.vm.ci.code.site.ConstantReference;
import jdk.vm.ci.code.site.DataPatch;
import jdk.vm.ci.code.site.DataSectionReference;
import jdk.vm.ci.code.site.Infopoint;
*** 44,53 ****
--- 46,56 ----
import jdk.vm.ci.hotspot.HotSpotCompiledCode;
import jdk.vm.ci.hotspot.HotSpotCompiledCode.Comment;
import jdk.vm.ci.hotspot.HotSpotCompiledNmethod;
import jdk.vm.ci.hotspot.HotSpotConstant;
import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod;
+ import jdk.vm.ci.meta.AllocatableValue;
import jdk.vm.ci.meta.Assumptions.Assumption;
import jdk.vm.ci.meta.InvokeTarget;
import jdk.vm.ci.meta.JavaKind;
import jdk.vm.ci.meta.PlatformKind;
import jdk.vm.ci.meta.ResolvedJavaMethod;
*** 163,172 ****
--- 166,180 ----
* Emit code to return from a function, returning a 32-bit integer.
*/
public abstract void emitIntRet(Register a);
/**
+ * Emit code to return from a function, returning a single precision float.
+ */
+ public abstract void emitFloatRet(Register a);
+
+ /**
* Emit code to return from a function, returning a wide oop pointer.
*/
public abstract void emitPointerRet(Register a);
/**
*** 191,201 ****
private int stackAlignment;
private int curStackSlot;
private StackSlot deoptRescue;
! private static class TestValueKind extends ValueKind<TestValueKind> {
TestValueKind(PlatformKind kind) {
super(kind);
}
--- 199,215 ----
private int stackAlignment;
private int curStackSlot;
private StackSlot deoptRescue;
! public ValueKindFactory<TestValueKind> valueKindFactory = new ValueKindFactory<TestAssembler.TestValueKind>() {
! public TestValueKind getValueKind(JavaKind javaKind) {
! return (TestValueKind) TestAssembler.this.getValueKind(javaKind);
! }
! };
!
! static class TestValueKind extends ValueKind<TestValueKind> {
TestValueKind(PlatformKind kind) {
super(kind);
}
*** 334,343 ****
--- 348,362 ----
public void emitFloat(float f) {
ensureSize(data.position() + 4);
data.putFloat(f);
}
+ public void emitDouble(double f) {
+ ensureSize(data.position() + 8);
+ data.putDouble(f);
+ }
+
public void align(int alignment) {
int pos = data.position();
int misaligned = pos % alignment;
if (misaligned != 0) {
pos += alignment - misaligned;
*** 347,352 ****
--- 366,394 ----
private byte[] finish() {
return Arrays.copyOf(data.array(), data.position());
}
}
+
+ /**
+ * Loads a primitive into the Allocatable <code>av</code>. Implementors may only implement
+ * primitive types.
+ */
+ public abstract void emitLoad(AllocatableValue av, Object prim);
+
+ /**
+ * Emit a call to a fixed address <code>addr</code>
+ */
+ public abstract void emitCall(long addr);
+
+ /**
+ * Emit code which is necessary to call a method with {@link CallingConvention} <code>cc</code>
+ * and arguments <coe>prim</code>.
+ */
+ public abstract void emitCallPrologue(CallingConvention cc, Object... prim);
+
+ /**
+ * Emit code which is necessary after calling a method with CallingConvention <code>cc</code>.
+ */
+ public abstract void emitCallEpilogue(CallingConvention cc);
+
}
< prev index next >