changeset 14944:96f8e6b6a81a

Support for spill moves of values smaller than int.
author Roland Schatz <roland.schatz@oracle.com>
date Wed, 02 Apr 2014 14:43:52 +0200
parents e5a55d280f24
children b14cb2d9253d
files graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Move.java
diffstat 1 files changed, 20 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Move.java	Tue Apr 01 15:59:32 2014 +0200
+++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Move.java	Wed Apr 02 14:43:52 2014 +0200
@@ -459,6 +459,14 @@
     private static void reg2stack(CompilationResultBuilder crb, AMD64MacroAssembler masm, Value result, Value input) {
         AMD64Address dest = (AMD64Address) crb.asAddress(result);
         switch (input.getKind()) {
+            case Boolean:
+            case Byte:
+                masm.movb(dest, asRegister(input));
+                break;
+            case Short:
+            case Char:
+                masm.movw(dest, asRegister(input));
+                break;
             case Int:
                 masm.movl(dest, asRegister(input));
                 break;
@@ -482,6 +490,18 @@
     private static void stack2reg(CompilationResultBuilder crb, AMD64MacroAssembler masm, Value result, Value input) {
         AMD64Address src = (AMD64Address) crb.asAddress(input);
         switch (input.getKind()) {
+            case Boolean:
+                masm.movzbl(asRegister(result), src);
+                break;
+            case Byte:
+                masm.movsbl(asRegister(result), src);
+                break;
+            case Short:
+                masm.movswl(asRegister(result), src);
+                break;
+            case Char:
+                masm.movzwl(asRegister(result), src);
+                break;
             case Int:
                 masm.movl(asRegister(result), src);
                 break;