hotspot/src/cpu/x86/vm/x86_64.ad
changeset 22873 74aaad871363
parent 22855 d637fd28a6c3
parent 22513 dc47bc8ecb75
child 22910 88c3369b5967
--- a/hotspot/src/cpu/x86/vm/x86_64.ad	Tue Jan 28 12:25:34 2014 -0800
+++ b/hotspot/src/cpu/x86/vm/x86_64.ad	Tue Jan 28 12:28:17 2014 -0800
@@ -3094,6 +3094,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()
 %{
@@ -5050,12 +5061,12 @@
   ins_pipe(ialu_reg_mem);
 %}
 
-// Load Integer with a 32-bit mask into Long Register
-instruct loadI2L_immI(rRegL dst, memory mem, immI mask, rFlagsReg cr) %{
+// Load Integer with a 31-bit mask into Long Register
+instruct loadI2L_immU31(rRegL dst, memory mem, immU31 mask, rFlagsReg cr) %{
   match(Set dst (ConvI2L (AndI (LoadI mem) mask)));
   effect(KILL cr);
 
-  format %{ "movl    $dst, $mem\t# int & 32-bit mask -> long\n\t"
+  format %{ "movl    $dst, $mem\t# int & 31-bit mask -> long\n\t"
             "andl    $dst, $mask" %}
   ins_encode %{
     Register Rdst = $dst$$Register;