diff src/share/vm/c1/c1_LinearScan.cpp @ 13044:a905d33ce13a

8027751: C1 crashes in Weblogic with G1 enabled Summary: Keep T_OBJECT operands in registers for logical operations on x64 Reviewed-by: kvn, roland
author iveresov
date Tue, 05 Nov 2013 00:59:30 -0800
parents 9acbfe04b5c3
children de6a9e811145
line wrap: on
line diff
--- a/src/share/vm/c1/c1_LinearScan.cpp	Mon Nov 04 21:59:54 2013 +0100
+++ b/src/share/vm/c1/c1_LinearScan.cpp	Tue Nov 05 00:59:30 2013 -0800
@@ -1138,8 +1138,10 @@
         }
       }
     }
-
-  } else if (opr_type != T_LONG) {
+    // We want to sometimes use logical operations on pointers, in particular in GC barriers.
+    // Since 64bit logical operations do not current support operands on stack, we have to make sure
+    // T_OBJECT doesn't get spilled along with T_LONG.
+  } else if (opr_type != T_LONG LP64_ONLY(&& opr_type != T_OBJECT)) {
     // integer instruction (note: long operands must always be in register)
     switch (op->code()) {
       case lir_cmp: