1.1 --- a/src/cpu/mips/vm/mips_64.ad Mon Feb 20 21:35:55 2017 +0800 1.2 +++ b/src/cpu/mips/vm/mips_64.ad Mon Feb 20 21:54:25 2017 +0800 1.3 @@ -10865,8 +10865,12 @@ 1.4 __ dsll(dst_reg, src_reg, shamt); 1.5 else 1.6 { 1.7 - __ move(AT, shamt); 1.8 - __ dsllv(dst_reg, src_reg, AT); 1.9 + int sa = low(shamt, 6); 1.10 + if (sa < 32) { 1.11 + __ dsll(dst_reg, src_reg, sa); 1.12 + } else { 1.13 + __ dsll32(dst_reg, src_reg, sa - 32); 1.14 + } 1.15 } 1.16 %} 1.17 ins_pipe( ialu_regL_regL ); 1.18 @@ -10886,8 +10890,12 @@ 1.19 __ dsll(dst_reg, src_reg, shamt); 1.20 else 1.21 { 1.22 - __ move(AT, shamt); 1.23 - __ dsllv(dst_reg, src_reg, AT); 1.24 + int sa = low(shamt, 6); 1.25 + if (sa < 32) { 1.26 + __ dsll(dst_reg, src_reg, sa); 1.27 + } else { 1.28 + __ dsll32(dst_reg, src_reg, sa - 32); 1.29 + } 1.30 } 1.31 %} 1.32 ins_pipe( ialu_regL_regL ); 1.33 @@ -10920,8 +10928,12 @@ 1.34 if (__ is_simm(shamt, 5)) { 1.35 __ dsll(dst_reg, src_reg, shamt); 1.36 } else { 1.37 - __ move(AT, shamt); 1.38 - __ dsllv(dst_reg, src_reg, AT); 1.39 + int sa = low(shamt, 6); 1.40 + if (sa < 32) { 1.41 + __ dsll(dst_reg, src_reg, sa); 1.42 + } else { 1.43 + __ dsll32(dst_reg, src_reg, sa - 32); 1.44 + } 1.45 } 1.46 %} 1.47 ins_pipe( ialu_regL_regL );