changeset 21405:cdb5eda3a4b5

[SPARC] sign extend array compare length
author Stefan Anzinger <stefan.anzinger@oracle.com>
date Fri, 15 May 2015 23:03:42 +0200
parents cfc632ba7689
children b4aca5ec3f10
files graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCArrayEqualsOp.java
diffstat 1 files changed, 2 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCArrayEqualsOp.java	Fri May 15 14:48:18 2015 +0200
+++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCArrayEqualsOp.java	Fri May 15 23:03:42 2015 +0200
@@ -133,6 +133,7 @@
      * Emits code that uses 8-byte vector compares.
      */
     private void emit8ByteCompare(SPARCMacroAssembler masm, Register result, Register array1, Register array2, Register length, Label trueLabel, Label falseLabel) {
+        assert lengthValue.getPlatformKind().equals(Kind.Int);
         Label loop = new Label();
         Label compareTail = new Label();
         Label compareTailCorrectVectorEnd = new Label();
@@ -142,6 +143,7 @@
 
         boolean hasCBcond = masm.hasFeature(CPUFeature.CBCOND);
 
+        masm.sra(length, 0, length);
         masm.and(result, VECTOR_SIZE - 1, result); // tail count (in bytes)
         masm.andcc(length, ~(VECTOR_SIZE - 1), length);  // vector count (in bytes)
         masm.bpcc(ConditionFlag.Equal, NOT_ANNUL, compareTail, CC.Xcc, PREDICT_NOT_TAKEN);