hotspot/src/cpu/aarch64/vm/aarch64_ad.m4
changeset 46719 0de742eacb75
parent 32399 82a75c8c8079
child 46988 ede2513b035e
equal deleted inserted replaced
46718:1fd6f7bc17c9 46719:0de742eacb75
   266             as_Register($shift$$reg));
   266             as_Register($shift$$reg));
   267     %}
   267     %}
   268   ins_pipe(ialu_reg_reg_vshift);
   268   ins_pipe(ialu_reg_reg_vshift);
   269 %}')dnl
   269 %}')dnl
   270 define(ROL_INSN, `
   270 define(ROL_INSN, `
   271 instruct $3$1_rReg_Var_C$2(iRegLNoSp dst, iRegL src, iRegI shift, immI$2 c$2, rFlagsReg cr)
   271 instruct $3$1_rReg_Var_C$2(iReg$1NoSp dst, iReg$1 src, iRegI shift, immI$2 c$2, rFlagsReg cr)
   272 %{
   272 %{
   273   match(Set dst (Or$1 (LShift$1 src shift) (URShift$1 src (SubI c$2 shift))));
   273   match(Set dst (Or$1 (LShift$1 src shift) (URShift$1 src (SubI c$2 shift))));
   274 
   274 
   275   expand %{
   275   expand %{
   276     $3L_rReg(dst, src, shift, cr);
   276     $3$1_rReg(dst, src, shift, cr);
   277   %}
   277   %}
   278 %}')dnl
   278 %}')dnl
   279 define(ROR_INSN, `
   279 define(ROR_INSN, `
   280 instruct $3$1_rReg_Var_C$2(iRegLNoSp dst, iRegL src, iRegI shift, immI$2 c$2, rFlagsReg cr)
   280 instruct $3$1_rReg_Var_C$2(iReg$1NoSp dst, iReg$1 src, iRegI shift, immI$2 c$2, rFlagsReg cr)
   281 %{
   281 %{
   282   match(Set dst (Or$1 (URShift$1 src shift) (LShift$1 src (SubI c$2 shift))));
   282   match(Set dst (Or$1 (URShift$1 src shift) (LShift$1 src (SubI c$2 shift))));
   283 
   283 
   284   expand %{
   284   expand %{
   285     $3L_rReg(dst, src, shift, cr);
   285     $3$1_rReg(dst, src, shift, cr);
   286   %}
   286   %}
   287 %}')dnl
   287 %}')dnl
   288 ROL_EXPAND(L, rol, rorv)
   288 ROL_EXPAND(L, rol, rorv)
   289 ROL_EXPAND(I, rol, rorvw)
   289 ROL_EXPAND(I, rol, rorvw)
   290 ROL_INSN(L, _64, rol)
   290 ROL_INSN(L, _64, rol)
   303 define(`ADD_SUB_CONV', `
   303 define(`ADD_SUB_CONV', `
   304 instruct $3Ext$1(iReg$2NoSp dst, iReg$2`'ORL2I($2) src1, iReg$1`'ORL2I($1) src2, rFlagsReg cr)
   304 instruct $3Ext$1(iReg$2NoSp dst, iReg$2`'ORL2I($2) src1, iReg$1`'ORL2I($1) src2, rFlagsReg cr)
   305 %{
   305 %{
   306   match(Set dst ($3$2 src1 (ConvI2L src2)));
   306   match(Set dst ($3$2 src1 (ConvI2L src2)));
   307   ins_cost(INSN_COST);
   307   ins_cost(INSN_COST);
   308   format %{ "$4  $dst, $src1, $5 $src2" %}
   308   format %{ "$4  $dst, $src1, $src2, $5" %}
   309 
   309 
   310    ins_encode %{
   310    ins_encode %{
   311      __ $4(as_Register($dst$$reg), as_Register($src1$$reg),
   311      __ $4(as_Register($dst$$reg), as_Register($src1$$reg),
   312             as_Register($src2$$reg), ext::$5);
   312             as_Register($src2$$reg), ext::$5);
   313    %}
   313    %}
   319 define(`ADD_SUB_EXTENDED', `
   319 define(`ADD_SUB_EXTENDED', `
   320 instruct $3Ext$1_$6(iReg$1NoSp dst, iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I($1) src2, immI_`'eval($7-$2) lshift, immI_`'eval($7-$2) rshift, rFlagsReg cr)
   320 instruct $3Ext$1_$6(iReg$1NoSp dst, iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I($1) src2, immI_`'eval($7-$2) lshift, immI_`'eval($7-$2) rshift, rFlagsReg cr)
   321 %{
   321 %{
   322   match(Set dst ($3$1 src1 EXTEND($1, $4, src2, lshift, rshift)));
   322   match(Set dst ($3$1 src1 EXTEND($1, $4, src2, lshift, rshift)));
   323   ins_cost(INSN_COST);
   323   ins_cost(INSN_COST);
   324   format %{ "$5  $dst, $src1, $6 $src2" %}
   324   format %{ "$5  $dst, $src1, $src2, $6" %}
   325 
   325 
   326    ins_encode %{
   326    ins_encode %{
   327      __ $5(as_Register($dst$$reg), as_Register($src1$$reg),
   327      __ $5(as_Register($dst$$reg), as_Register($src1$$reg),
   328             as_Register($src2$$reg), ext::$6);
   328             as_Register($src2$$reg), ext::$6);
   329    %}
   329    %}
   361 ADD_SUB_ZERO_EXTEND(I,255,Sub,subw,uxtb)
   361 ADD_SUB_ZERO_EXTEND(I,255,Sub,subw,uxtb)
   362 ADD_SUB_ZERO_EXTEND(I,65535,Sub,subw,uxth)
   362 ADD_SUB_ZERO_EXTEND(I,65535,Sub,subw,uxth)
   363 ADD_SUB_ZERO_EXTEND(L,255,Sub,sub,uxtb)
   363 ADD_SUB_ZERO_EXTEND(L,255,Sub,sub,uxtb)
   364 ADD_SUB_ZERO_EXTEND(L,65535,Sub,sub,uxth)
   364 ADD_SUB_ZERO_EXTEND(L,65535,Sub,sub,uxth)
   365 ADD_SUB_ZERO_EXTEND(L,4294967295,Sub,sub,uxtw)
   365 ADD_SUB_ZERO_EXTEND(L,4294967295,Sub,sub,uxtw)
   366 
   366 dnl
       
   367 dnl ADD_SUB_ZERO_EXTEND_SHIFT(mode, size, add node, insn, ext type)
       
   368 define(`ADD_SUB_EXTENDED_SHIFT', `
       
   369 instruct $3Ext$1_$6_shift(iReg$1NoSp dst, iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I($1) src2, immIExt lshift2, immI_`'eval($7-$2) lshift1, immI_`'eval($7-$2) rshift1, rFlagsReg cr)
       
   370 %{
       
   371   match(Set dst ($3$1 src1 (LShift$1 EXTEND($1, $4, src2, lshift1, rshift1) lshift2)));
       
   372   ins_cost(1.9 * INSN_COST);
       
   373   format %{ "$5  $dst, $src1, $src2, $6 #lshift2" %}
       
   374 
       
   375    ins_encode %{
       
   376      __ $5(as_Register($dst$$reg), as_Register($src1$$reg),
       
   377             as_Register($src2$$reg), ext::$6, ($lshift2$$constant));
       
   378    %}
       
   379   ins_pipe(ialu_reg_reg_shift);
       
   380 %}')
       
   381 dnl                   $1 $2 $3   $4   $5   $6  $7
       
   382 ADD_SUB_EXTENDED_SHIFT(L,8,Add,RShift,add,sxtb,64)
       
   383 ADD_SUB_EXTENDED_SHIFT(L,16,Add,RShift,add,sxth,64)
       
   384 ADD_SUB_EXTENDED_SHIFT(L,32,Add,RShift,add,sxtw,64)
       
   385 dnl
       
   386 ADD_SUB_EXTENDED_SHIFT(L,8,Sub,RShift,sub,sxtb,64)
       
   387 ADD_SUB_EXTENDED_SHIFT(L,16,Sub,RShift,sub,sxth,64)
       
   388 ADD_SUB_EXTENDED_SHIFT(L,32,Sub,RShift,sub,sxtw,64)
       
   389 dnl
       
   390 ADD_SUB_EXTENDED_SHIFT(I,8,Add,RShift,addw,sxtb,32)
       
   391 ADD_SUB_EXTENDED_SHIFT(I,16,Add,RShift,addw,sxth,32)
       
   392 dnl
       
   393 ADD_SUB_EXTENDED_SHIFT(I,8,Sub,RShift,subw,sxtb,32)
       
   394 ADD_SUB_EXTENDED_SHIFT(I,16,Sub,RShift,subw,sxth,32)
       
   395 dnl
       
   396 dnl ADD_SUB_CONV_SHIFT(mode, add node, insn, ext type)
       
   397 define(`ADD_SUB_CONV_SHIFT', `
       
   398 instruct $2ExtI_shift(iReg$1NoSp dst, iReg$1`'ORL2I($1) src1, iRegIorL2I src2, immIExt lshift, rFlagsReg cr)
       
   399 %{
       
   400   match(Set dst ($2$1 src1 (LShiftL (ConvI2L src2) lshift)));
       
   401   ins_cost(1.9 * INSN_COST);
       
   402   format %{ "$3  $dst, $src1, $src2, $4 #lshift" %}
       
   403 
       
   404    ins_encode %{
       
   405      __ $3(as_Register($dst$$reg), as_Register($src1$$reg),
       
   406             as_Register($src2$$reg), ext::$4, ($lshift$$constant));
       
   407    %}
       
   408   ins_pipe(ialu_reg_reg_shift);
       
   409 %}')
       
   410 dnl
       
   411 ADD_SUB_CONV_SHIFT(L,Add,add,sxtw);
       
   412 ADD_SUB_CONV_SHIFT(L,Sub,sub,sxtw);
       
   413 dnl
       
   414 dnl ADD_SUB_ZERO_EXTEND(mode, size, add node, insn, ext type)
       
   415 define(`ADD_SUB_ZERO_EXTEND_SHIFT', `
       
   416 instruct $3Ext$1_$5_and_shift(iReg$1NoSp dst, iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I($1) src2, imm$1_$2 mask, immIExt lshift, rFlagsReg cr)
       
   417 %{
       
   418   match(Set dst ($3$1 src1 (LShift$1 (And$1 src2 mask) lshift)));
       
   419   ins_cost(1.9 * INSN_COST);
       
   420   format %{ "$4  $dst, $src1, $src2, $5 #lshift" %}
       
   421 
       
   422    ins_encode %{
       
   423      __ $4(as_Register($dst$$reg), as_Register($src1$$reg),
       
   424             as_Register($src2$$reg), ext::$5, ($lshift$$constant));
       
   425    %}
       
   426   ins_pipe(ialu_reg_reg_shift);
       
   427 %}')
       
   428 dnl
       
   429 dnl                       $1 $2  $3  $4  $5
       
   430 ADD_SUB_ZERO_EXTEND_SHIFT(L,255,Add,add,uxtb)
       
   431 ADD_SUB_ZERO_EXTEND_SHIFT(L,65535,Add,add,uxth)
       
   432 ADD_SUB_ZERO_EXTEND_SHIFT(L,4294967295,Add,add,uxtw)
       
   433 dnl
       
   434 ADD_SUB_ZERO_EXTEND_SHIFT(L,255,Sub,sub,uxtb)
       
   435 ADD_SUB_ZERO_EXTEND_SHIFT(L,65535,Sub,sub,uxth)
       
   436 ADD_SUB_ZERO_EXTEND_SHIFT(L,4294967295,Sub,sub,uxtw)
       
   437 dnl
       
   438 ADD_SUB_ZERO_EXTEND_SHIFT(I,255,Add,addw,uxtb)
       
   439 ADD_SUB_ZERO_EXTEND_SHIFT(I,65535,Add,addw,uxth)
       
   440 dnl
       
   441 ADD_SUB_ZERO_EXTEND_SHIFT(I,255,Sub,subw,uxtb)
       
   442 ADD_SUB_ZERO_EXTEND_SHIFT(I,65535,Sub,subw,uxth)
       
   443 dnl
   367 // END This section of the file is automatically generated. Do not edit --------------
   444 // END This section of the file is automatically generated. Do not edit --------------