6946892: c1 shouldn't sign-extend to upper 32bits on x64

Tue, 27 Apr 2010 11:19:12 -0700

author
iveresov
date
Tue, 27 Apr 2010 11:19:12 -0700
changeset 1833
314e17ca2c23
parent 1832
b4776199210f
child 1834
90acda19b80f

6946892: c1 shouldn't sign-extend to upper 32bits on x64
Summary: c1 does sign-extension when it loads ints and shorts from memory to 64-bit registers. This causes problems for c2 because it relies on the fact the int passed in a 64-bit register is zero-extended.
Reviewed-by: never

src/cpu/x86/vm/c1_LIRAssembler_x86.cpp file | annotate | diff | comparison | revisions
     1.1 --- a/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp	Mon Apr 26 23:59:45 2010 -0700
     1.2 +++ b/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp	Tue Apr 27 11:19:12 2010 -0700
     1.3 @@ -1244,8 +1244,7 @@
     1.4        break;
     1.5  #endif // _L64
     1.6      case T_INT:
     1.7 -      // %%% could this be a movl? this is safer but longer instruction
     1.8 -      __ movl2ptr(dest->as_register(), from_addr);
     1.9 +      __ movl(dest->as_register(), from_addr);
    1.10        break;
    1.11  
    1.12      case T_LONG: {
    1.13 @@ -1303,7 +1302,6 @@
    1.14          __ shll(dest_reg, 24);
    1.15          __ sarl(dest_reg, 24);
    1.16        }
    1.17 -      // These are unsigned so the zero extension on 64bit is just what we need
    1.18        break;
    1.19      }
    1.20  
    1.21 @@ -1315,8 +1313,6 @@
    1.22        } else {
    1.23          __ movw(dest_reg, from_addr);
    1.24        }
    1.25 -      // This is unsigned so the zero extension on 64bit is just what we need
    1.26 -      // __ movl2ptr(dest_reg, dest_reg);
    1.27        break;
    1.28      }
    1.29  
    1.30 @@ -1329,8 +1325,6 @@
    1.31          __ shll(dest_reg, 16);
    1.32          __ sarl(dest_reg, 16);
    1.33        }
    1.34 -      // Might not be needed in 64bit but certainly doesn't hurt (except for code size)
    1.35 -      __ movl2ptr(dest_reg, dest_reg);
    1.36        break;
    1.37      }
    1.38  

mercurial