7004925: CTW: assert(nbits == 32 || -(1 << nbits-1) <= x && x < ( 1 << nbits-1)) failed: value out of range

Tue, 07 Dec 2010 11:00:02 -0800

author
kvn
date
Tue, 07 Dec 2010 11:00:02 -0800
changeset 2354
5fe0781a8560
parent 2353
dad31fc330cd
child 2355
ec8c74742417

7004925: CTW: assert(nbits == 32 || -(1 << nbits-1) <= x && x < ( 1 << nbits-1)) failed: value out of range
Summary: Set offset in register if it does not fit 13 bits.
Reviewed-by: iveresov

src/cpu/sparc/vm/sparc.ad file | annotate | diff | comparison | revisions
     1.1 --- a/src/cpu/sparc/vm/sparc.ad	Fri Dec 03 15:53:57 2010 -0800
     1.2 +++ b/src/cpu/sparc/vm/sparc.ad	Tue Dec 07 11:00:02 2010 -0800
     1.3 @@ -6094,7 +6094,8 @@
     1.4    ins_cost(MEMORY_REF_COST);
     1.5    format %{ "LD     [$constanttablebase + $constantoffset],$dst\t! load from constant table: ptr=$con" %}
     1.6    ins_encode %{
     1.7 -    __ ld_ptr($constanttablebase, $constantoffset($con), $dst$$Register);
     1.8 +      RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset($con), $dst$$Register);
     1.9 +     __ ld_ptr($constanttablebase, con_offset, $dst$$Register);
    1.10    %}
    1.11    ins_pipe(loadConP);
    1.12  %}
    1.13 @@ -6162,7 +6163,8 @@
    1.14    ins_cost(MEMORY_REF_COST);
    1.15    format %{ "LDX     [$constanttablebase + $constantoffset],$dst\t! load from constant table: long=$con" %}
    1.16    ins_encode %{
    1.17 -    __ ldx($constanttablebase, $constantoffset($con), $dst$$Register);
    1.18 +      RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset($con), $dst$$Register);
    1.19 +    __ ldx($constanttablebase, con_offset, $dst$$Register);
    1.20    %}
    1.21    ins_pipe(loadConL);
    1.22  %}
    1.23 @@ -6186,24 +6188,26 @@
    1.24    ins_pipe(ialu_imm);
    1.25  %}
    1.26  
    1.27 -instruct loadConF(regF dst, immF con) %{
    1.28 +instruct loadConF(regF dst, immF con, o7RegI tmp) %{
    1.29    match(Set dst con);
    1.30 -  size(4);
    1.31 +  effect(KILL tmp);
    1.32    format %{ "LDF    [$constanttablebase + $constantoffset],$dst\t! load from constant table: float=$con" %}
    1.33    ins_encode %{
    1.34 -    __ ldf(FloatRegisterImpl::S, $constanttablebase, $constantoffset($con), $dst$$FloatRegister);
    1.35 +      RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset($con), $tmp$$Register);
    1.36 +    __ ldf(FloatRegisterImpl::S, $constanttablebase, con_offset, $dst$$FloatRegister);
    1.37    %}
    1.38    ins_pipe(loadConFD);
    1.39  %}
    1.40  
    1.41 -instruct loadConD(regD dst, immD con) %{
    1.42 +instruct loadConD(regD dst, immD con, o7RegI tmp) %{
    1.43    match(Set dst con);
    1.44 -  size(4);
    1.45 +  effect(KILL tmp);
    1.46    format %{ "LDDF   [$constanttablebase + $constantoffset],$dst\t! load from constant table: double=$con" %}
    1.47    ins_encode %{
    1.48      // XXX This is a quick fix for 6833573.
    1.49      //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset($con), $dst$$FloatRegister);
    1.50 -    __ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset($con), as_DoubleFloatRegister($dst$$reg));
    1.51 +    RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset($con), $tmp$$Register);
    1.52 +    __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg));
    1.53    %}
    1.54    ins_pipe(loadConFD);
    1.55  %}
    1.56 @@ -8655,14 +8659,15 @@
    1.57  %}
    1.58  
    1.59  // Replicate scalar constant to packed byte values in Double register
    1.60 -instruct Repl8B_immI(regD dst, immI13 con) %{
    1.61 +instruct Repl8B_immI(regD dst, immI13 con, o7RegI tmp) %{
    1.62    match(Set dst (Replicate8B con));
    1.63 -  size(4);
    1.64 +  effect(KILL tmp);
    1.65    format %{ "LDDF   [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl8B($con)" %}
    1.66    ins_encode %{
    1.67      // XXX This is a quick fix for 6833573.
    1.68      //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 8, 1)), $dst$$FloatRegister);
    1.69 -    __ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 8, 1)), as_DoubleFloatRegister($dst$$reg));
    1.70 +    RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 8, 1)), $tmp$$Register);
    1.71 +    __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg));
    1.72    %}
    1.73    ins_pipe(loadConFD);
    1.74  %}
    1.75 @@ -8690,14 +8695,15 @@
    1.76  %}
    1.77  
    1.78  // Replicate scalar constant to packed char values in Double register
    1.79 -instruct Repl4C_immI(regD dst, immI con) %{
    1.80 +instruct Repl4C_immI(regD dst, immI con, o7RegI tmp) %{
    1.81    match(Set dst (Replicate4C con));
    1.82 -  size(4);
    1.83 +  effect(KILL tmp);
    1.84    format %{ "LDDF   [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl4C($con)" %}
    1.85    ins_encode %{
    1.86      // XXX This is a quick fix for 6833573.
    1.87      //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 4, 2)), $dst$$FloatRegister);
    1.88 -    __ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 4, 2)), as_DoubleFloatRegister($dst$$reg));
    1.89 +    RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 4, 2)), $tmp$$Register);
    1.90 +    __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg));
    1.91    %}
    1.92    ins_pipe(loadConFD);
    1.93  %}
    1.94 @@ -8725,14 +8731,15 @@
    1.95  %}
    1.96  
    1.97  // Replicate scalar constant to packed short values in Double register
    1.98 -instruct Repl4S_immI(regD dst, immI con) %{
    1.99 +instruct Repl4S_immI(regD dst, immI con, o7RegI tmp) %{
   1.100    match(Set dst (Replicate4S con));
   1.101 -  size(4);
   1.102 +  effect(KILL tmp);
   1.103    format %{ "LDDF   [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl4S($con)" %}
   1.104    ins_encode %{
   1.105      // XXX This is a quick fix for 6833573.
   1.106      //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 4, 2)), $dst$$FloatRegister);
   1.107 -    __ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 4, 2)), as_DoubleFloatRegister($dst$$reg));
   1.108 +    RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 4, 2)), $tmp$$Register);
   1.109 +    __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg));
   1.110    %}
   1.111    ins_pipe(loadConFD);
   1.112  %}
   1.113 @@ -8758,14 +8765,15 @@
   1.114  %}
   1.115  
   1.116  // Replicate scalar zero constant to packed int values in Double register
   1.117 -instruct Repl2I_immI(regD dst, immI con) %{
   1.118 +instruct Repl2I_immI(regD dst, immI con, o7RegI tmp) %{
   1.119    match(Set dst (Replicate2I con));
   1.120 -  size(4);
   1.121 +  effect(KILL tmp);
   1.122    format %{ "LDDF   [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl2I($con)" %}
   1.123    ins_encode %{
   1.124      // XXX This is a quick fix for 6833573.
   1.125      //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 2, 4)), $dst$$FloatRegister);
   1.126 -    __ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 2, 4)), as_DoubleFloatRegister($dst$$reg));
   1.127 +    RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 2, 4)), $tmp$$Register);
   1.128 +    __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg));
   1.129    %}
   1.130    ins_pipe(loadConFD);
   1.131  %}
   1.132 @@ -9034,7 +9042,8 @@
   1.133        table_reg = $constanttablebase;
   1.134      } else {
   1.135        table_reg = O7;
   1.136 -      __ add($constanttablebase, $constantoffset, table_reg);
   1.137 +      RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset, O7);
   1.138 +      __ add($constanttablebase, con_offset, table_reg);
   1.139      }
   1.140  
   1.141      // Jump to base address + switch value

mercurial