diff src/cpu/x86/vm/x86_32.ad @ 17798:f040cf9fc9c0

Merge
author kvn
date Wed, 19 Feb 2014 20:12:43 -0800
parents 50fdb38839eb 984401824c5e
children 5292439ef895 a433eb716ce1
line wrap: on
line diff
--- a/src/cpu/x86/vm/x86_32.ad	Thu Jan 30 14:30:01 2014 +0100
+++ b/src/cpu/x86/vm/x86_32.ad	Wed Feb 19 20:12:43 2014 -0800
@@ -3897,6 +3897,17 @@
   interface(CONST_INTER);
 %}
 
+// Int Immediate non-negative
+operand immU31()
+%{
+  predicate(n->get_int() >= 0);
+  match(ConI);
+
+  op_cost(0);
+  format %{ %}
+  interface(CONST_INTER);
+%}
+
 // Constant for long shifts
 operand immI_32() %{
   predicate( n->get_int() == 32 );
@@ -6127,12 +6138,12 @@
   ins_pipe(ialu_reg_mem);
 %}
 
-// Load Integer with 32-bit mask into Long Register
-instruct loadI2L_immI(eRegL dst, memory mem, immI mask, eFlagsReg cr) %{
+// Load Integer with 31-bit mask into Long Register
+instruct loadI2L_immU31(eRegL dst, memory mem, immU31 mask, eFlagsReg cr) %{
   match(Set dst (ConvI2L (AndI (LoadI mem) mask)));
   effect(KILL cr);
 
-  format %{ "MOV    $dst.lo,$mem\t# int & 32-bit mask -> long\n\t"
+  format %{ "MOV    $dst.lo,$mem\t# int & 31-bit mask -> long\n\t"
             "XOR    $dst.hi,$dst.hi\n\t"
             "AND    $dst.lo,$mask" %}
   ins_encode %{