hotspot/src/cpu/aarch64/vm/aarch64.ad
changeset 46719 0de742eacb75
parent 46696 b5771fe1620a
child 46735 219c4312853e
equal deleted inserted replaced
46718:1fd6f7bc17c9 46719:0de742eacb75
  5341   op_cost(0);
  5341   op_cost(0);
  5342   format %{ %}
  5342   format %{ %}
  5343   interface(CONST_INTER);
  5343   interface(CONST_INTER);
  5344 %}
  5344 %}
  5345 
  5345 
       
  5346 // Shift values for add/sub extension shift
       
  5347 operand immIExt()
       
  5348 %{
       
  5349   predicate(0 <= n->get_int() && (n->get_int() <= 4));
       
  5350   match(ConI);
       
  5351 
       
  5352   op_cost(0);
       
  5353   format %{ %}
       
  5354   interface(CONST_INTER);
       
  5355 %}
       
  5356 
  5346 operand immI_le_4()
  5357 operand immI_le_4()
  5347 %{
  5358 %{
  5348   predicate(n->get_int() <= 4);
  5359   predicate(n->get_int() <= 4);
  5349   match(ConI);
  5360   match(ConI);
  5350 
  5361 
 12787 
 12798 
 12788 instruct AddExtI(iRegLNoSp dst, iRegL src1, iRegIorL2I src2, rFlagsReg cr)
 12799 instruct AddExtI(iRegLNoSp dst, iRegL src1, iRegIorL2I src2, rFlagsReg cr)
 12789 %{
 12800 %{
 12790   match(Set dst (AddL src1 (ConvI2L src2)));
 12801   match(Set dst (AddL src1 (ConvI2L src2)));
 12791   ins_cost(INSN_COST);
 12802   ins_cost(INSN_COST);
 12792   format %{ "add  $dst, $src1, sxtw $src2" %}
 12803   format %{ "add  $dst, $src1, $src2, sxtw" %}
 12793 
 12804 
 12794    ins_encode %{
 12805    ins_encode %{
 12795      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
 12806      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
 12796             as_Register($src2$$reg), ext::sxtw);
 12807             as_Register($src2$$reg), ext::sxtw);
 12797    %}
 12808    %}
 12800 
 12811 
 12801 instruct SubExtI(iRegLNoSp dst, iRegL src1, iRegIorL2I src2, rFlagsReg cr)
 12812 instruct SubExtI(iRegLNoSp dst, iRegL src1, iRegIorL2I src2, rFlagsReg cr)
 12802 %{
 12813 %{
 12803   match(Set dst (SubL src1 (ConvI2L src2)));
 12814   match(Set dst (SubL src1 (ConvI2L src2)));
 12804   ins_cost(INSN_COST);
 12815   ins_cost(INSN_COST);
 12805   format %{ "sub  $dst, $src1, sxtw $src2" %}
 12816   format %{ "sub  $dst, $src1, $src2, sxtw" %}
 12806 
 12817 
 12807    ins_encode %{
 12818    ins_encode %{
 12808      __ sub(as_Register($dst$$reg), as_Register($src1$$reg),
 12819      __ sub(as_Register($dst$$reg), as_Register($src1$$reg),
 12809             as_Register($src2$$reg), ext::sxtw);
 12820             as_Register($src2$$reg), ext::sxtw);
 12810    %}
 12821    %}
 12814 
 12825 
 12815 instruct AddExtI_sxth(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI_16 lshift, immI_16 rshift, rFlagsReg cr)
 12826 instruct AddExtI_sxth(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI_16 lshift, immI_16 rshift, rFlagsReg cr)
 12816 %{
 12827 %{
 12817   match(Set dst (AddI src1 (RShiftI (LShiftI src2 lshift) rshift)));
 12828   match(Set dst (AddI src1 (RShiftI (LShiftI src2 lshift) rshift)));
 12818   ins_cost(INSN_COST);
 12829   ins_cost(INSN_COST);
 12819   format %{ "add  $dst, $src1, sxth $src2" %}
 12830   format %{ "add  $dst, $src1, $src2, sxth" %}
 12820 
 12831 
 12821    ins_encode %{
 12832    ins_encode %{
 12822      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
 12833      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
 12823             as_Register($src2$$reg), ext::sxth);
 12834             as_Register($src2$$reg), ext::sxth);
 12824    %}
 12835    %}
 12827 
 12838 
 12828 instruct AddExtI_sxtb(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI_24 lshift, immI_24 rshift, rFlagsReg cr)
 12839 instruct AddExtI_sxtb(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI_24 lshift, immI_24 rshift, rFlagsReg cr)
 12829 %{
 12840 %{
 12830   match(Set dst (AddI src1 (RShiftI (LShiftI src2 lshift) rshift)));
 12841   match(Set dst (AddI src1 (RShiftI (LShiftI src2 lshift) rshift)));
 12831   ins_cost(INSN_COST);
 12842   ins_cost(INSN_COST);
 12832   format %{ "add  $dst, $src1, sxtb $src2" %}
 12843   format %{ "add  $dst, $src1, $src2, sxtb" %}
 12833 
 12844 
 12834    ins_encode %{
 12845    ins_encode %{
 12835      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
 12846      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
 12836             as_Register($src2$$reg), ext::sxtb);
 12847             as_Register($src2$$reg), ext::sxtb);
 12837    %}
 12848    %}
 12840 
 12851 
 12841 instruct AddExtI_uxtb(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI_24 lshift, immI_24 rshift, rFlagsReg cr)
 12852 instruct AddExtI_uxtb(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI_24 lshift, immI_24 rshift, rFlagsReg cr)
 12842 %{
 12853 %{
 12843   match(Set dst (AddI src1 (URShiftI (LShiftI src2 lshift) rshift)));
 12854   match(Set dst (AddI src1 (URShiftI (LShiftI src2 lshift) rshift)));
 12844   ins_cost(INSN_COST);
 12855   ins_cost(INSN_COST);
 12845   format %{ "add  $dst, $src1, uxtb $src2" %}
 12856   format %{ "add  $dst, $src1, $src2, uxtb" %}
 12846 
 12857 
 12847    ins_encode %{
 12858    ins_encode %{
 12848      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
 12859      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
 12849             as_Register($src2$$reg), ext::uxtb);
 12860             as_Register($src2$$reg), ext::uxtb);
 12850    %}
 12861    %}
 12853 
 12864 
 12854 instruct AddExtL_sxth(iRegLNoSp dst, iRegL src1, iRegL src2, immI_48 lshift, immI_48 rshift, rFlagsReg cr)
 12865 instruct AddExtL_sxth(iRegLNoSp dst, iRegL src1, iRegL src2, immI_48 lshift, immI_48 rshift, rFlagsReg cr)
 12855 %{
 12866 %{
 12856   match(Set dst (AddL src1 (RShiftL (LShiftL src2 lshift) rshift)));
 12867   match(Set dst (AddL src1 (RShiftL (LShiftL src2 lshift) rshift)));
 12857   ins_cost(INSN_COST);
 12868   ins_cost(INSN_COST);
 12858   format %{ "add  $dst, $src1, sxth $src2" %}
 12869   format %{ "add  $dst, $src1, $src2, sxth" %}
 12859 
 12870 
 12860    ins_encode %{
 12871    ins_encode %{
 12861      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
 12872      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
 12862             as_Register($src2$$reg), ext::sxth);
 12873             as_Register($src2$$reg), ext::sxth);
 12863    %}
 12874    %}
 12866 
 12877 
 12867 instruct AddExtL_sxtw(iRegLNoSp dst, iRegL src1, iRegL src2, immI_32 lshift, immI_32 rshift, rFlagsReg cr)
 12878 instruct AddExtL_sxtw(iRegLNoSp dst, iRegL src1, iRegL src2, immI_32 lshift, immI_32 rshift, rFlagsReg cr)
 12868 %{
 12879 %{
 12869   match(Set dst (AddL src1 (RShiftL (LShiftL src2 lshift) rshift)));
 12880   match(Set dst (AddL src1 (RShiftL (LShiftL src2 lshift) rshift)));
 12870   ins_cost(INSN_COST);
 12881   ins_cost(INSN_COST);
 12871   format %{ "add  $dst, $src1, sxtw $src2" %}
 12882   format %{ "add  $dst, $src1, $src2, sxtw" %}
 12872 
 12883 
 12873    ins_encode %{
 12884    ins_encode %{
 12874      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
 12885      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
 12875             as_Register($src2$$reg), ext::sxtw);
 12886             as_Register($src2$$reg), ext::sxtw);
 12876    %}
 12887    %}
 12879 
 12890 
 12880 instruct AddExtL_sxtb(iRegLNoSp dst, iRegL src1, iRegL src2, immI_56 lshift, immI_56 rshift, rFlagsReg cr)
 12891 instruct AddExtL_sxtb(iRegLNoSp dst, iRegL src1, iRegL src2, immI_56 lshift, immI_56 rshift, rFlagsReg cr)
 12881 %{
 12892 %{
 12882   match(Set dst (AddL src1 (RShiftL (LShiftL src2 lshift) rshift)));
 12893   match(Set dst (AddL src1 (RShiftL (LShiftL src2 lshift) rshift)));
 12883   ins_cost(INSN_COST);
 12894   ins_cost(INSN_COST);
 12884   format %{ "add  $dst, $src1, sxtb $src2" %}
 12895   format %{ "add  $dst, $src1, $src2, sxtb" %}
 12885 
 12896 
 12886    ins_encode %{
 12897    ins_encode %{
 12887      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
 12898      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
 12888             as_Register($src2$$reg), ext::sxtb);
 12899             as_Register($src2$$reg), ext::sxtb);
 12889    %}
 12900    %}
 12892 
 12903 
 12893 instruct AddExtL_uxtb(iRegLNoSp dst, iRegL src1, iRegL src2, immI_56 lshift, immI_56 rshift, rFlagsReg cr)
 12904 instruct AddExtL_uxtb(iRegLNoSp dst, iRegL src1, iRegL src2, immI_56 lshift, immI_56 rshift, rFlagsReg cr)
 12894 %{
 12905 %{
 12895   match(Set dst (AddL src1 (URShiftL (LShiftL src2 lshift) rshift)));
 12906   match(Set dst (AddL src1 (URShiftL (LShiftL src2 lshift) rshift)));
 12896   ins_cost(INSN_COST);
 12907   ins_cost(INSN_COST);
 12897   format %{ "add  $dst, $src1, uxtb $src2" %}
 12908   format %{ "add  $dst, $src1, $src2, uxtb" %}
 12898 
 12909 
 12899    ins_encode %{
 12910    ins_encode %{
 12900      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
 12911      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
 12901             as_Register($src2$$reg), ext::uxtb);
 12912             as_Register($src2$$reg), ext::uxtb);
 12902    %}
 12913    %}
 13032             as_Register($src2$$reg), ext::uxtw);
 13043             as_Register($src2$$reg), ext::uxtw);
 13033    %}
 13044    %}
 13034   ins_pipe(ialu_reg_reg);
 13045   ins_pipe(ialu_reg_reg);
 13035 %}
 13046 %}
 13036 
 13047 
       
 13048 
       
 13049 instruct AddExtL_sxtb_shift(iRegLNoSp dst, iRegL src1, iRegL src2, immIExt lshift2, immI_56 lshift1, immI_56 rshift1, rFlagsReg cr)
       
 13050 %{
       
 13051   match(Set dst (AddL src1 (LShiftL (RShiftL (LShiftL src2 lshift1) rshift1) lshift2)));
       
 13052   ins_cost(1.9 * INSN_COST);
       
 13053   format %{ "add  $dst, $src1, $src2, sxtb #lshift2" %}
       
 13054 
       
 13055    ins_encode %{
       
 13056      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13057             as_Register($src2$$reg), ext::sxtb, ($lshift2$$constant));
       
 13058    %}
       
 13059   ins_pipe(ialu_reg_reg_shift);
       
 13060 %}
       
 13061 
       
 13062 instruct AddExtL_sxth_shift(iRegLNoSp dst, iRegL src1, iRegL src2, immIExt lshift2, immI_48 lshift1, immI_48 rshift1, rFlagsReg cr)
       
 13063 %{
       
 13064   match(Set dst (AddL src1 (LShiftL (RShiftL (LShiftL src2 lshift1) rshift1) lshift2)));
       
 13065   ins_cost(1.9 * INSN_COST);
       
 13066   format %{ "add  $dst, $src1, $src2, sxth #lshift2" %}
       
 13067 
       
 13068    ins_encode %{
       
 13069      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13070             as_Register($src2$$reg), ext::sxth, ($lshift2$$constant));
       
 13071    %}
       
 13072   ins_pipe(ialu_reg_reg_shift);
       
 13073 %}
       
 13074 
       
 13075 instruct AddExtL_sxtw_shift(iRegLNoSp dst, iRegL src1, iRegL src2, immIExt lshift2, immI_32 lshift1, immI_32 rshift1, rFlagsReg cr)
       
 13076 %{
       
 13077   match(Set dst (AddL src1 (LShiftL (RShiftL (LShiftL src2 lshift1) rshift1) lshift2)));
       
 13078   ins_cost(1.9 * INSN_COST);
       
 13079   format %{ "add  $dst, $src1, $src2, sxtw #lshift2" %}
       
 13080 
       
 13081    ins_encode %{
       
 13082      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13083             as_Register($src2$$reg), ext::sxtw, ($lshift2$$constant));
       
 13084    %}
       
 13085   ins_pipe(ialu_reg_reg_shift);
       
 13086 %}
       
 13087 
       
 13088 instruct SubExtL_sxtb_shift(iRegLNoSp dst, iRegL src1, iRegL src2, immIExt lshift2, immI_56 lshift1, immI_56 rshift1, rFlagsReg cr)
       
 13089 %{
       
 13090   match(Set dst (SubL src1 (LShiftL (RShiftL (LShiftL src2 lshift1) rshift1) lshift2)));
       
 13091   ins_cost(1.9 * INSN_COST);
       
 13092   format %{ "sub  $dst, $src1, $src2, sxtb #lshift2" %}
       
 13093 
       
 13094    ins_encode %{
       
 13095      __ sub(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13096             as_Register($src2$$reg), ext::sxtb, ($lshift2$$constant));
       
 13097    %}
       
 13098   ins_pipe(ialu_reg_reg_shift);
       
 13099 %}
       
 13100 
       
 13101 instruct SubExtL_sxth_shift(iRegLNoSp dst, iRegL src1, iRegL src2, immIExt lshift2, immI_48 lshift1, immI_48 rshift1, rFlagsReg cr)
       
 13102 %{
       
 13103   match(Set dst (SubL src1 (LShiftL (RShiftL (LShiftL src2 lshift1) rshift1) lshift2)));
       
 13104   ins_cost(1.9 * INSN_COST);
       
 13105   format %{ "sub  $dst, $src1, $src2, sxth #lshift2" %}
       
 13106 
       
 13107    ins_encode %{
       
 13108      __ sub(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13109             as_Register($src2$$reg), ext::sxth, ($lshift2$$constant));
       
 13110    %}
       
 13111   ins_pipe(ialu_reg_reg_shift);
       
 13112 %}
       
 13113 
       
 13114 instruct SubExtL_sxtw_shift(iRegLNoSp dst, iRegL src1, iRegL src2, immIExt lshift2, immI_32 lshift1, immI_32 rshift1, rFlagsReg cr)
       
 13115 %{
       
 13116   match(Set dst (SubL src1 (LShiftL (RShiftL (LShiftL src2 lshift1) rshift1) lshift2)));
       
 13117   ins_cost(1.9 * INSN_COST);
       
 13118   format %{ "sub  $dst, $src1, $src2, sxtw #lshift2" %}
       
 13119 
       
 13120    ins_encode %{
       
 13121      __ sub(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13122             as_Register($src2$$reg), ext::sxtw, ($lshift2$$constant));
       
 13123    %}
       
 13124   ins_pipe(ialu_reg_reg_shift);
       
 13125 %}
       
 13126 
       
 13127 instruct AddExtI_sxtb_shift(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immIExt lshift2, immI_24 lshift1, immI_24 rshift1, rFlagsReg cr)
       
 13128 %{
       
 13129   match(Set dst (AddI src1 (LShiftI (RShiftI (LShiftI src2 lshift1) rshift1) lshift2)));
       
 13130   ins_cost(1.9 * INSN_COST);
       
 13131   format %{ "addw  $dst, $src1, $src2, sxtb #lshift2" %}
       
 13132 
       
 13133    ins_encode %{
       
 13134      __ addw(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13135             as_Register($src2$$reg), ext::sxtb, ($lshift2$$constant));
       
 13136    %}
       
 13137   ins_pipe(ialu_reg_reg_shift);
       
 13138 %}
       
 13139 
       
 13140 instruct AddExtI_sxth_shift(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immIExt lshift2, immI_16 lshift1, immI_16 rshift1, rFlagsReg cr)
       
 13141 %{
       
 13142   match(Set dst (AddI src1 (LShiftI (RShiftI (LShiftI src2 lshift1) rshift1) lshift2)));
       
 13143   ins_cost(1.9 * INSN_COST);
       
 13144   format %{ "addw  $dst, $src1, $src2, sxth #lshift2" %}
       
 13145 
       
 13146    ins_encode %{
       
 13147      __ addw(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13148             as_Register($src2$$reg), ext::sxth, ($lshift2$$constant));
       
 13149    %}
       
 13150   ins_pipe(ialu_reg_reg_shift);
       
 13151 %}
       
 13152 
       
 13153 instruct SubExtI_sxtb_shift(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immIExt lshift2, immI_24 lshift1, immI_24 rshift1, rFlagsReg cr)
       
 13154 %{
       
 13155   match(Set dst (SubI src1 (LShiftI (RShiftI (LShiftI src2 lshift1) rshift1) lshift2)));
       
 13156   ins_cost(1.9 * INSN_COST);
       
 13157   format %{ "subw  $dst, $src1, $src2, sxtb #lshift2" %}
       
 13158 
       
 13159    ins_encode %{
       
 13160      __ subw(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13161             as_Register($src2$$reg), ext::sxtb, ($lshift2$$constant));
       
 13162    %}
       
 13163   ins_pipe(ialu_reg_reg_shift);
       
 13164 %}
       
 13165 
       
 13166 instruct SubExtI_sxth_shift(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immIExt lshift2, immI_16 lshift1, immI_16 rshift1, rFlagsReg cr)
       
 13167 %{
       
 13168   match(Set dst (SubI src1 (LShiftI (RShiftI (LShiftI src2 lshift1) rshift1) lshift2)));
       
 13169   ins_cost(1.9 * INSN_COST);
       
 13170   format %{ "subw  $dst, $src1, $src2, sxth #lshift2" %}
       
 13171 
       
 13172    ins_encode %{
       
 13173      __ subw(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13174             as_Register($src2$$reg), ext::sxth, ($lshift2$$constant));
       
 13175    %}
       
 13176   ins_pipe(ialu_reg_reg_shift);
       
 13177 %}
       
 13178 
       
 13179 
       
 13180 instruct AddExtI_shift(iRegLNoSp dst, iRegL src1, iRegIorL2I src2, immIExt lshift, rFlagsReg cr)
       
 13181 %{
       
 13182   match(Set dst (AddL src1 (LShiftL (ConvI2L src2) lshift)));
       
 13183   ins_cost(1.9 * INSN_COST);
       
 13184   format %{ "add  $dst, $src1, $src2, sxtw #lshift" %}
       
 13185 
       
 13186    ins_encode %{
       
 13187      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13188             as_Register($src2$$reg), ext::sxtw, ($lshift$$constant));
       
 13189    %}
       
 13190   ins_pipe(ialu_reg_reg_shift);
       
 13191 %};
       
 13192 
       
 13193 instruct SubExtI_shift(iRegLNoSp dst, iRegL src1, iRegIorL2I src2, immIExt lshift, rFlagsReg cr)
       
 13194 %{
       
 13195   match(Set dst (SubL src1 (LShiftL (ConvI2L src2) lshift)));
       
 13196   ins_cost(1.9 * INSN_COST);
       
 13197   format %{ "sub  $dst, $src1, $src2, sxtw #lshift" %}
       
 13198 
       
 13199    ins_encode %{
       
 13200      __ sub(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13201             as_Register($src2$$reg), ext::sxtw, ($lshift$$constant));
       
 13202    %}
       
 13203   ins_pipe(ialu_reg_reg_shift);
       
 13204 %};
       
 13205 
       
 13206 
       
 13207 instruct AddExtL_uxtb_and_shift(iRegLNoSp dst, iRegL src1, iRegL src2, immL_255 mask, immIExt lshift, rFlagsReg cr)
       
 13208 %{
       
 13209   match(Set dst (AddL src1 (LShiftL (AndL src2 mask) lshift)));
       
 13210   ins_cost(1.9 * INSN_COST);
       
 13211   format %{ "add  $dst, $src1, $src2, uxtb #lshift" %}
       
 13212 
       
 13213    ins_encode %{
       
 13214      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13215             as_Register($src2$$reg), ext::uxtb, ($lshift$$constant));
       
 13216    %}
       
 13217   ins_pipe(ialu_reg_reg_shift);
       
 13218 %}
       
 13219 
       
 13220 instruct AddExtL_uxth_and_shift(iRegLNoSp dst, iRegL src1, iRegL src2, immL_65535 mask, immIExt lshift, rFlagsReg cr)
       
 13221 %{
       
 13222   match(Set dst (AddL src1 (LShiftL (AndL src2 mask) lshift)));
       
 13223   ins_cost(1.9 * INSN_COST);
       
 13224   format %{ "add  $dst, $src1, $src2, uxth #lshift" %}
       
 13225 
       
 13226    ins_encode %{
       
 13227      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13228             as_Register($src2$$reg), ext::uxth, ($lshift$$constant));
       
 13229    %}
       
 13230   ins_pipe(ialu_reg_reg_shift);
       
 13231 %}
       
 13232 
       
 13233 instruct AddExtL_uxtw_and_shift(iRegLNoSp dst, iRegL src1, iRegL src2, immL_4294967295 mask, immIExt lshift, rFlagsReg cr)
       
 13234 %{
       
 13235   match(Set dst (AddL src1 (LShiftL (AndL src2 mask) lshift)));
       
 13236   ins_cost(1.9 * INSN_COST);
       
 13237   format %{ "add  $dst, $src1, $src2, uxtw #lshift" %}
       
 13238 
       
 13239    ins_encode %{
       
 13240      __ add(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13241             as_Register($src2$$reg), ext::uxtw, ($lshift$$constant));
       
 13242    %}
       
 13243   ins_pipe(ialu_reg_reg_shift);
       
 13244 %}
       
 13245 
       
 13246 instruct SubExtL_uxtb_and_shift(iRegLNoSp dst, iRegL src1, iRegL src2, immL_255 mask, immIExt lshift, rFlagsReg cr)
       
 13247 %{
       
 13248   match(Set dst (SubL src1 (LShiftL (AndL src2 mask) lshift)));
       
 13249   ins_cost(1.9 * INSN_COST);
       
 13250   format %{ "sub  $dst, $src1, $src2, uxtb #lshift" %}
       
 13251 
       
 13252    ins_encode %{
       
 13253      __ sub(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13254             as_Register($src2$$reg), ext::uxtb, ($lshift$$constant));
       
 13255    %}
       
 13256   ins_pipe(ialu_reg_reg_shift);
       
 13257 %}
       
 13258 
       
 13259 instruct SubExtL_uxth_and_shift(iRegLNoSp dst, iRegL src1, iRegL src2, immL_65535 mask, immIExt lshift, rFlagsReg cr)
       
 13260 %{
       
 13261   match(Set dst (SubL src1 (LShiftL (AndL src2 mask) lshift)));
       
 13262   ins_cost(1.9 * INSN_COST);
       
 13263   format %{ "sub  $dst, $src1, $src2, uxth #lshift" %}
       
 13264 
       
 13265    ins_encode %{
       
 13266      __ sub(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13267             as_Register($src2$$reg), ext::uxth, ($lshift$$constant));
       
 13268    %}
       
 13269   ins_pipe(ialu_reg_reg_shift);
       
 13270 %}
       
 13271 
       
 13272 instruct SubExtL_uxtw_and_shift(iRegLNoSp dst, iRegL src1, iRegL src2, immL_4294967295 mask, immIExt lshift, rFlagsReg cr)
       
 13273 %{
       
 13274   match(Set dst (SubL src1 (LShiftL (AndL src2 mask) lshift)));
       
 13275   ins_cost(1.9 * INSN_COST);
       
 13276   format %{ "sub  $dst, $src1, $src2, uxtw #lshift" %}
       
 13277 
       
 13278    ins_encode %{
       
 13279      __ sub(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13280             as_Register($src2$$reg), ext::uxtw, ($lshift$$constant));
       
 13281    %}
       
 13282   ins_pipe(ialu_reg_reg_shift);
       
 13283 %}
       
 13284 
       
 13285 instruct AddExtI_uxtb_and_shift(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI_255 mask, immIExt lshift, rFlagsReg cr)
       
 13286 %{
       
 13287   match(Set dst (AddI src1 (LShiftI (AndI src2 mask) lshift)));
       
 13288   ins_cost(1.9 * INSN_COST);
       
 13289   format %{ "addw  $dst, $src1, $src2, uxtb #lshift" %}
       
 13290 
       
 13291    ins_encode %{
       
 13292      __ addw(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13293             as_Register($src2$$reg), ext::uxtb, ($lshift$$constant));
       
 13294    %}
       
 13295   ins_pipe(ialu_reg_reg_shift);
       
 13296 %}
       
 13297 
       
 13298 instruct AddExtI_uxth_and_shift(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI_65535 mask, immIExt lshift, rFlagsReg cr)
       
 13299 %{
       
 13300   match(Set dst (AddI src1 (LShiftI (AndI src2 mask) lshift)));
       
 13301   ins_cost(1.9 * INSN_COST);
       
 13302   format %{ "addw  $dst, $src1, $src2, uxth #lshift" %}
       
 13303 
       
 13304    ins_encode %{
       
 13305      __ addw(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13306             as_Register($src2$$reg), ext::uxth, ($lshift$$constant));
       
 13307    %}
       
 13308   ins_pipe(ialu_reg_reg_shift);
       
 13309 %}
       
 13310 
       
 13311 instruct SubExtI_uxtb_and_shift(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI_255 mask, immIExt lshift, rFlagsReg cr)
       
 13312 %{
       
 13313   match(Set dst (SubI src1 (LShiftI (AndI src2 mask) lshift)));
       
 13314   ins_cost(1.9 * INSN_COST);
       
 13315   format %{ "subw  $dst, $src1, $src2, uxtb #lshift" %}
       
 13316 
       
 13317    ins_encode %{
       
 13318      __ subw(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13319             as_Register($src2$$reg), ext::uxtb, ($lshift$$constant));
       
 13320    %}
       
 13321   ins_pipe(ialu_reg_reg_shift);
       
 13322 %}
       
 13323 
       
 13324 instruct SubExtI_uxth_and_shift(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI_65535 mask, immIExt lshift, rFlagsReg cr)
       
 13325 %{
       
 13326   match(Set dst (SubI src1 (LShiftI (AndI src2 mask) lshift)));
       
 13327   ins_cost(1.9 * INSN_COST);
       
 13328   format %{ "subw  $dst, $src1, $src2, uxth #lshift" %}
       
 13329 
       
 13330    ins_encode %{
       
 13331      __ subw(as_Register($dst$$reg), as_Register($src1$$reg),
       
 13332             as_Register($src2$$reg), ext::uxth, ($lshift$$constant));
       
 13333    %}
       
 13334   ins_pipe(ialu_reg_reg_shift);
       
 13335 %}
 13037 // END This section of the file is automatically generated. Do not edit --------------
 13336 // END This section of the file is automatically generated. Do not edit --------------
 13038 
 13337 
 13039 // ============================================================================
 13338 // ============================================================================
 13040 // Floating Point Arithmetic Instructions
 13339 // Floating Point Arithmetic Instructions
 13041 
 13340