src/hotspot/cpu/aarch64/aarch64.ad
changeset 58852 674131501e98
parent 58516 d376d86b0a01
child 59053 ba6c248cae19
equal deleted inserted replaced
58851:f1e6442241ca 58852:674131501e98
 10411   %}
 10411   %}
 10412 
 10412 
 10413   ins_pipe(lmac_reg_reg);
 10413   ins_pipe(lmac_reg_reg);
 10414 %}
 10414 %}
 10415 
 10415 
       
 10416 // Combine Integer Signed Multiply & Add/Sub/Neg Long
       
 10417 
       
 10418 instruct smaddL(iRegLNoSp dst, iRegIorL2I src1, iRegIorL2I src2, iRegLNoSp src3) %{
       
 10419   match(Set dst (AddL src3 (MulL (ConvI2L src1) (ConvI2L src2))));
       
 10420 
       
 10421   ins_cost(INSN_COST * 3);
       
 10422   format %{ "smaddl  $dst, $src1, $src2, $src3" %}
       
 10423 
       
 10424   ins_encode %{
       
 10425     __ smaddl(as_Register($dst$$reg),
       
 10426               as_Register($src1$$reg),
       
 10427               as_Register($src2$$reg),
       
 10428               as_Register($src3$$reg));
       
 10429   %}
       
 10430 
       
 10431   ins_pipe(imac_reg_reg);
       
 10432 %}
       
 10433 
       
 10434 instruct smsubL(iRegLNoSp dst, iRegIorL2I src1, iRegIorL2I src2, iRegLNoSp src3) %{
       
 10435   match(Set dst (SubL src3 (MulL (ConvI2L src1) (ConvI2L src2))));
       
 10436 
       
 10437   ins_cost(INSN_COST * 3);
       
 10438   format %{ "smsubl  $dst, $src1, $src2, $src3" %}
       
 10439 
       
 10440   ins_encode %{
       
 10441     __ smsubl(as_Register($dst$$reg),
       
 10442               as_Register($src1$$reg),
       
 10443               as_Register($src2$$reg),
       
 10444               as_Register($src3$$reg));
       
 10445   %}
       
 10446 
       
 10447   ins_pipe(imac_reg_reg);
       
 10448 %}
       
 10449 
       
 10450 instruct smnegL(iRegLNoSp dst, iRegIorL2I src1, iRegIorL2I src2, immL0 zero) %{
       
 10451   match(Set dst (MulL (SubL zero (ConvI2L src1)) (ConvI2L src2)));
       
 10452   match(Set dst (MulL (ConvI2L src1) (SubL zero (ConvI2L src2))));
       
 10453 
       
 10454   ins_cost(INSN_COST * 3);
       
 10455   format %{ "smnegl  $dst, $src1, $src2" %}
       
 10456 
       
 10457   ins_encode %{
       
 10458     __ smnegl(as_Register($dst$$reg),
       
 10459               as_Register($src1$$reg),
       
 10460               as_Register($src2$$reg));
       
 10461   %}
       
 10462 
       
 10463   ins_pipe(imac_reg_reg);
       
 10464 %}
       
 10465 
 10416 // Integer Divide
 10466 // Integer Divide
 10417 
 10467 
 10418 instruct divI(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2) %{
 10468 instruct divI(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2) %{
 10419   match(Set dst (DivI src1 src2));
 10469   match(Set dst (DivI src1 src2));
 10420 
 10470