mirror of
https://github.com/openjdk/jdk.git
synced 2026-05-22 03:17:54 +00:00
8075443: AARCH64: Missed L2I optimizations in C2
Use iRegIOrL2I for input operands whenever it makes sense. Reviewed-by: kvn
This commit is contained in:
parent
3251eb7210
commit
f82562e36e
@ -6056,7 +6056,7 @@ instruct loadD_volatile(vRegD dst, /* sync_memory*/indirect mem)
|
||||
%}
|
||||
|
||||
// Store Byte
|
||||
instruct storeB_volatile(iRegI src, /* sync_memory*/indirect mem)
|
||||
instruct storeB_volatile(iRegIorL2I src, /* sync_memory*/indirect mem)
|
||||
%{
|
||||
match(Set mem (StoreB mem src));
|
||||
|
||||
@ -6069,7 +6069,7 @@ instruct storeB_volatile(iRegI src, /* sync_memory*/indirect mem)
|
||||
%}
|
||||
|
||||
// Store Char/Short
|
||||
instruct storeC_volatile(iRegI src, /* sync_memory*/indirect mem)
|
||||
instruct storeC_volatile(iRegIorL2I src, /* sync_memory*/indirect mem)
|
||||
%{
|
||||
match(Set mem (StoreC mem src));
|
||||
|
||||
@ -6225,7 +6225,7 @@ instruct bytes_reverse_short(iRegINoSp dst, iRegIorL2I src) %{
|
||||
// ============================================================================
|
||||
// Zero Count Instructions
|
||||
|
||||
instruct countLeadingZerosI(iRegINoSp dst, iRegI src) %{
|
||||
instruct countLeadingZerosI(iRegINoSp dst, iRegIorL2I src) %{
|
||||
match(Set dst (CountLeadingZerosI src));
|
||||
|
||||
ins_cost(INSN_COST);
|
||||
@ -6249,7 +6249,7 @@ instruct countLeadingZerosL(iRegINoSp dst, iRegL src) %{
|
||||
ins_pipe(ialu_reg);
|
||||
%}
|
||||
|
||||
instruct countTrailingZerosI(iRegINoSp dst, iRegI src) %{
|
||||
instruct countTrailingZerosI(iRegINoSp dst, iRegIorL2I src) %{
|
||||
match(Set dst (CountTrailingZerosI src));
|
||||
|
||||
ins_cost(INSN_COST * 2);
|
||||
@ -6935,7 +6935,7 @@ instruct cmpL3_reg_imm(iRegINoSp dst, iRegL src1, immLAddSub src2, rFlagsReg fla
|
||||
// which throws a ShouldNotHappen. So, we have to provide two flavours
|
||||
// of each rule, one for a cmpOp and a second for a cmpOpU (sigh).
|
||||
|
||||
instruct cmovI_reg_reg(cmpOp cmp, rFlagsReg cr, iRegINoSp dst, iRegI src1, iRegI src2) %{
|
||||
instruct cmovI_reg_reg(cmpOp cmp, rFlagsReg cr, iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2) %{
|
||||
match(Set dst (CMoveI (Binary cmp cr) (Binary src1 src2)));
|
||||
|
||||
ins_cost(INSN_COST * 2);
|
||||
@ -6951,7 +6951,7 @@ instruct cmovI_reg_reg(cmpOp cmp, rFlagsReg cr, iRegINoSp dst, iRegI src1, iRegI
|
||||
ins_pipe(icond_reg_reg);
|
||||
%}
|
||||
|
||||
instruct cmovUI_reg_reg(cmpOpU cmp, rFlagsRegU cr, iRegINoSp dst, iRegI src1, iRegI src2) %{
|
||||
instruct cmovUI_reg_reg(cmpOpU cmp, rFlagsRegU cr, iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2) %{
|
||||
match(Set dst (CMoveI (Binary cmp cr) (Binary src1 src2)));
|
||||
|
||||
ins_cost(INSN_COST * 2);
|
||||
@ -6976,7 +6976,7 @@ instruct cmovUI_reg_reg(cmpOpU cmp, rFlagsRegU cr, iRegINoSp dst, iRegI src1, iR
|
||||
// we ought only to be able to cull one of these variants as the ideal
|
||||
// transforms ought always to order the zero consistently (to left/right?)
|
||||
|
||||
instruct cmovI_zero_reg(cmpOp cmp, rFlagsReg cr, iRegINoSp dst, immI0 zero, iRegI src) %{
|
||||
instruct cmovI_zero_reg(cmpOp cmp, rFlagsReg cr, iRegINoSp dst, immI0 zero, iRegIorL2I src) %{
|
||||
match(Set dst (CMoveI (Binary cmp cr) (Binary zero src)));
|
||||
|
||||
ins_cost(INSN_COST * 2);
|
||||
@ -6992,7 +6992,7 @@ instruct cmovI_zero_reg(cmpOp cmp, rFlagsReg cr, iRegINoSp dst, immI0 zero, iReg
|
||||
ins_pipe(icond_reg);
|
||||
%}
|
||||
|
||||
instruct cmovUI_zero_reg(cmpOpU cmp, rFlagsRegU cr, iRegINoSp dst, immI0 zero, iRegI src) %{
|
||||
instruct cmovUI_zero_reg(cmpOpU cmp, rFlagsRegU cr, iRegINoSp dst, immI0 zero, iRegIorL2I src) %{
|
||||
match(Set dst (CMoveI (Binary cmp cr) (Binary zero src)));
|
||||
|
||||
ins_cost(INSN_COST * 2);
|
||||
@ -7008,7 +7008,7 @@ instruct cmovUI_zero_reg(cmpOpU cmp, rFlagsRegU cr, iRegINoSp dst, immI0 zero, i
|
||||
ins_pipe(icond_reg);
|
||||
%}
|
||||
|
||||
instruct cmovI_reg_zero(cmpOp cmp, rFlagsReg cr, iRegINoSp dst, iRegI src, immI0 zero) %{
|
||||
instruct cmovI_reg_zero(cmpOp cmp, rFlagsReg cr, iRegINoSp dst, iRegIorL2I src, immI0 zero) %{
|
||||
match(Set dst (CMoveI (Binary cmp cr) (Binary src zero)));
|
||||
|
||||
ins_cost(INSN_COST * 2);
|
||||
@ -7024,7 +7024,7 @@ instruct cmovI_reg_zero(cmpOp cmp, rFlagsReg cr, iRegINoSp dst, iRegI src, immI0
|
||||
ins_pipe(icond_reg);
|
||||
%}
|
||||
|
||||
instruct cmovUI_reg_zero(cmpOpU cmp, rFlagsRegU cr, iRegINoSp dst, iRegI src, immI0 zero) %{
|
||||
instruct cmovUI_reg_zero(cmpOpU cmp, rFlagsRegU cr, iRegINoSp dst, iRegIorL2I src, immI0 zero) %{
|
||||
match(Set dst (CMoveI (Binary cmp cr) (Binary src zero)));
|
||||
|
||||
ins_cost(INSN_COST * 2);
|
||||
@ -7476,7 +7476,7 @@ instruct addI_reg_reg(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2) %{
|
||||
ins_pipe(ialu_reg_reg);
|
||||
%}
|
||||
|
||||
instruct addI_reg_imm(iRegINoSp dst, iRegI src1, immIAddSub src2) %{
|
||||
instruct addI_reg_imm(iRegINoSp dst, iRegIorL2I src1, immIAddSub src2) %{
|
||||
match(Set dst (AddI src1 src2));
|
||||
|
||||
ins_cost(INSN_COST);
|
||||
@ -7869,7 +7869,7 @@ instruct divI(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2) %{
|
||||
ins_pipe(idiv_reg_reg);
|
||||
%}
|
||||
|
||||
instruct signExtract(iRegINoSp dst, iRegI src1, immI_31 div1, immI_31 div2) %{
|
||||
instruct signExtract(iRegINoSp dst, iRegIorL2I src1, immI_31 div1, immI_31 div2) %{
|
||||
match(Set dst (URShiftI (RShiftI src1 div1) div2));
|
||||
ins_cost(INSN_COST);
|
||||
format %{ "lsrw $dst, $src1, $div1" %}
|
||||
@ -7879,7 +7879,7 @@ instruct signExtract(iRegINoSp dst, iRegI src1, immI_31 div1, immI_31 div2) %{
|
||||
ins_pipe(ialu_reg_shift);
|
||||
%}
|
||||
|
||||
instruct div2Round(iRegINoSp dst, iRegI src, immI_31 div1, immI_31 div2) %{
|
||||
instruct div2Round(iRegINoSp dst, iRegIorL2I src, immI_31 div1, immI_31 div2) %{
|
||||
match(Set dst (AddI src (URShiftI (RShiftI src div1) div2)));
|
||||
ins_cost(INSN_COST);
|
||||
format %{ "addw $dst, $src, LSR $div1" %}
|
||||
@ -8189,7 +8189,7 @@ instruct regL_not_reg(iRegLNoSp dst,
|
||||
ins_pipe(ialu_reg);
|
||||
%}
|
||||
instruct regI_not_reg(iRegINoSp dst,
|
||||
iRegI src1, immI_M1 m1,
|
||||
iRegIorL2I src1, immI_M1 m1,
|
||||
rFlagsReg cr) %{
|
||||
match(Set dst (XorI src1 m1));
|
||||
ins_cost(INSN_COST);
|
||||
@ -8206,14 +8206,14 @@ instruct regI_not_reg(iRegINoSp dst,
|
||||
%}
|
||||
|
||||
instruct AndI_reg_not_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2, immI_M1 m1,
|
||||
iRegIorL2I src1, iRegIorL2I src2, immI_M1 m1,
|
||||
rFlagsReg cr) %{
|
||||
match(Set dst (AndI src1 (XorI src2 m1)));
|
||||
ins_cost(INSN_COST);
|
||||
format %{ "bic $dst, $src1, $src2" %}
|
||||
format %{ "bicw $dst, $src1, $src2" %}
|
||||
|
||||
ins_encode %{
|
||||
__ bic(as_Register($dst$$reg),
|
||||
__ bicw(as_Register($dst$$reg),
|
||||
as_Register($src1$$reg),
|
||||
as_Register($src2$$reg),
|
||||
Assembler::LSL, 0);
|
||||
@ -8240,14 +8240,14 @@ instruct AndL_reg_not_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct OrI_reg_not_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2, immI_M1 m1,
|
||||
iRegIorL2I src1, iRegIorL2I src2, immI_M1 m1,
|
||||
rFlagsReg cr) %{
|
||||
match(Set dst (OrI src1 (XorI src2 m1)));
|
||||
ins_cost(INSN_COST);
|
||||
format %{ "orn $dst, $src1, $src2" %}
|
||||
format %{ "ornw $dst, $src1, $src2" %}
|
||||
|
||||
ins_encode %{
|
||||
__ orn(as_Register($dst$$reg),
|
||||
__ ornw(as_Register($dst$$reg),
|
||||
as_Register($src1$$reg),
|
||||
as_Register($src2$$reg),
|
||||
Assembler::LSL, 0);
|
||||
@ -8274,14 +8274,14 @@ instruct OrL_reg_not_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct XorI_reg_not_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2, immI_M1 m1,
|
||||
iRegIorL2I src1, iRegIorL2I src2, immI_M1 m1,
|
||||
rFlagsReg cr) %{
|
||||
match(Set dst (XorI m1 (XorI src2 src1)));
|
||||
ins_cost(INSN_COST);
|
||||
format %{ "eon $dst, $src1, $src2" %}
|
||||
format %{ "eonw $dst, $src1, $src2" %}
|
||||
|
||||
ins_encode %{
|
||||
__ eon(as_Register($dst$$reg),
|
||||
__ eonw(as_Register($dst$$reg),
|
||||
as_Register($src1$$reg),
|
||||
as_Register($src2$$reg),
|
||||
Assembler::LSL, 0);
|
||||
@ -8308,7 +8308,7 @@ instruct XorL_reg_not_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct AndI_reg_URShift_not_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, immI_M1 src4, rFlagsReg cr) %{
|
||||
match(Set dst (AndI src1 (XorI(URShiftI src2 src3) src4)));
|
||||
ins_cost(1.9 * INSN_COST);
|
||||
@ -8344,7 +8344,7 @@ instruct AndL_reg_URShift_not_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct AndI_reg_RShift_not_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, immI_M1 src4, rFlagsReg cr) %{
|
||||
match(Set dst (AndI src1 (XorI(RShiftI src2 src3) src4)));
|
||||
ins_cost(1.9 * INSN_COST);
|
||||
@ -8380,7 +8380,7 @@ instruct AndL_reg_RShift_not_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct AndI_reg_LShift_not_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, immI_M1 src4, rFlagsReg cr) %{
|
||||
match(Set dst (AndI src1 (XorI(LShiftI src2 src3) src4)));
|
||||
ins_cost(1.9 * INSN_COST);
|
||||
@ -8416,7 +8416,7 @@ instruct AndL_reg_LShift_not_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct XorI_reg_URShift_not_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, immI_M1 src4, rFlagsReg cr) %{
|
||||
match(Set dst (XorI src4 (XorI(URShiftI src2 src3) src1)));
|
||||
ins_cost(1.9 * INSN_COST);
|
||||
@ -8452,7 +8452,7 @@ instruct XorL_reg_URShift_not_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct XorI_reg_RShift_not_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, immI_M1 src4, rFlagsReg cr) %{
|
||||
match(Set dst (XorI src4 (XorI(RShiftI src2 src3) src1)));
|
||||
ins_cost(1.9 * INSN_COST);
|
||||
@ -8488,7 +8488,7 @@ instruct XorL_reg_RShift_not_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct XorI_reg_LShift_not_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, immI_M1 src4, rFlagsReg cr) %{
|
||||
match(Set dst (XorI src4 (XorI(LShiftI src2 src3) src1)));
|
||||
ins_cost(1.9 * INSN_COST);
|
||||
@ -8524,7 +8524,7 @@ instruct XorL_reg_LShift_not_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct OrI_reg_URShift_not_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, immI_M1 src4, rFlagsReg cr) %{
|
||||
match(Set dst (OrI src1 (XorI(URShiftI src2 src3) src4)));
|
||||
ins_cost(1.9 * INSN_COST);
|
||||
@ -8560,7 +8560,7 @@ instruct OrL_reg_URShift_not_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct OrI_reg_RShift_not_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, immI_M1 src4, rFlagsReg cr) %{
|
||||
match(Set dst (OrI src1 (XorI(RShiftI src2 src3) src4)));
|
||||
ins_cost(1.9 * INSN_COST);
|
||||
@ -8596,7 +8596,7 @@ instruct OrL_reg_RShift_not_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct OrI_reg_LShift_not_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, immI_M1 src4, rFlagsReg cr) %{
|
||||
match(Set dst (OrI src1 (XorI(LShiftI src2 src3) src4)));
|
||||
ins_cost(1.9 * INSN_COST);
|
||||
@ -8632,7 +8632,7 @@ instruct OrL_reg_LShift_not_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct AndI_reg_URShift_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, rFlagsReg cr) %{
|
||||
match(Set dst (AndI src1 (URShiftI src2 src3)));
|
||||
|
||||
@ -8670,7 +8670,7 @@ instruct AndL_reg_URShift_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct AndI_reg_RShift_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, rFlagsReg cr) %{
|
||||
match(Set dst (AndI src1 (RShiftI src2 src3)));
|
||||
|
||||
@ -8708,7 +8708,7 @@ instruct AndL_reg_RShift_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct AndI_reg_LShift_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, rFlagsReg cr) %{
|
||||
match(Set dst (AndI src1 (LShiftI src2 src3)));
|
||||
|
||||
@ -8746,7 +8746,7 @@ instruct AndL_reg_LShift_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct XorI_reg_URShift_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, rFlagsReg cr) %{
|
||||
match(Set dst (XorI src1 (URShiftI src2 src3)));
|
||||
|
||||
@ -8784,7 +8784,7 @@ instruct XorL_reg_URShift_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct XorI_reg_RShift_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, rFlagsReg cr) %{
|
||||
match(Set dst (XorI src1 (RShiftI src2 src3)));
|
||||
|
||||
@ -8822,7 +8822,7 @@ instruct XorL_reg_RShift_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct XorI_reg_LShift_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, rFlagsReg cr) %{
|
||||
match(Set dst (XorI src1 (LShiftI src2 src3)));
|
||||
|
||||
@ -8860,7 +8860,7 @@ instruct XorL_reg_LShift_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct OrI_reg_URShift_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, rFlagsReg cr) %{
|
||||
match(Set dst (OrI src1 (URShiftI src2 src3)));
|
||||
|
||||
@ -8898,7 +8898,7 @@ instruct OrL_reg_URShift_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct OrI_reg_RShift_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, rFlagsReg cr) %{
|
||||
match(Set dst (OrI src1 (RShiftI src2 src3)));
|
||||
|
||||
@ -8936,7 +8936,7 @@ instruct OrL_reg_RShift_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct OrI_reg_LShift_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, rFlagsReg cr) %{
|
||||
match(Set dst (OrI src1 (LShiftI src2 src3)));
|
||||
|
||||
@ -8974,7 +8974,7 @@ instruct OrL_reg_LShift_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct AddI_reg_URShift_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, rFlagsReg cr) %{
|
||||
match(Set dst (AddI src1 (URShiftI src2 src3)));
|
||||
|
||||
@ -9012,7 +9012,7 @@ instruct AddL_reg_URShift_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct AddI_reg_RShift_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, rFlagsReg cr) %{
|
||||
match(Set dst (AddI src1 (RShiftI src2 src3)));
|
||||
|
||||
@ -9050,7 +9050,7 @@ instruct AddL_reg_RShift_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct AddI_reg_LShift_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, rFlagsReg cr) %{
|
||||
match(Set dst (AddI src1 (LShiftI src2 src3)));
|
||||
|
||||
@ -9088,7 +9088,7 @@ instruct AddL_reg_LShift_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct SubI_reg_URShift_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, rFlagsReg cr) %{
|
||||
match(Set dst (SubI src1 (URShiftI src2 src3)));
|
||||
|
||||
@ -9126,7 +9126,7 @@ instruct SubL_reg_URShift_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct SubI_reg_RShift_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, rFlagsReg cr) %{
|
||||
match(Set dst (SubI src1 (RShiftI src2 src3)));
|
||||
|
||||
@ -9164,7 +9164,7 @@ instruct SubL_reg_RShift_reg(iRegLNoSp dst,
|
||||
%}
|
||||
|
||||
instruct SubI_reg_LShift_reg(iRegINoSp dst,
|
||||
iRegI src1, iRegI src2,
|
||||
iRegIorL2I src1, iRegIorL2I src2,
|
||||
immI src3, rFlagsReg cr) %{
|
||||
match(Set dst (SubI src1 (LShiftI src2 src3)));
|
||||
|
||||
@ -9228,7 +9228,7 @@ instruct sbfmL(iRegLNoSp dst, iRegL src, immI lshift_count, immI rshift_count)
|
||||
|
||||
// Shift Left followed by Shift Right.
|
||||
// This idiom is used by the compiler for the i2b bytecode etc.
|
||||
instruct sbfmwI(iRegINoSp dst, iRegI src, immI lshift_count, immI rshift_count)
|
||||
instruct sbfmwI(iRegINoSp dst, iRegIorL2I src, immI lshift_count, immI rshift_count)
|
||||
%{
|
||||
match(Set dst (RShiftI (LShiftI src lshift_count) rshift_count));
|
||||
// Make sure we are not going to exceed what sbfmw can do.
|
||||
@ -9274,7 +9274,7 @@ instruct ubfmL(iRegLNoSp dst, iRegL src, immI lshift_count, immI rshift_count)
|
||||
|
||||
// Shift Left followed by Shift Right.
|
||||
// This idiom is used by the compiler for the i2b bytecode etc.
|
||||
instruct ubfmwI(iRegINoSp dst, iRegI src, immI lshift_count, immI rshift_count)
|
||||
instruct ubfmwI(iRegINoSp dst, iRegIorL2I src, immI lshift_count, immI rshift_count)
|
||||
%{
|
||||
match(Set dst (URShiftI (LShiftI src lshift_count) rshift_count));
|
||||
// Make sure we are not going to exceed what ubfmw can do.
|
||||
@ -9296,7 +9296,7 @@ instruct ubfmwI(iRegINoSp dst, iRegI src, immI lshift_count, immI rshift_count)
|
||||
%}
|
||||
// Bitfield extract with shift & mask
|
||||
|
||||
instruct ubfxwI(iRegINoSp dst, iRegI src, immI rshift, immI_bitmask mask)
|
||||
instruct ubfxwI(iRegINoSp dst, iRegIorL2I src, immI rshift, immI_bitmask mask)
|
||||
%{
|
||||
match(Set dst (AndI (URShiftI src rshift) mask));
|
||||
|
||||
@ -9362,7 +9362,7 @@ instruct extrOrL(iRegLNoSp dst, iRegL src1, iRegL src2, immI lshift, immI rshift
|
||||
ins_pipe(ialu_reg_reg_extr);
|
||||
%}
|
||||
|
||||
instruct extrOrI(iRegINoSp dst, iRegI src1, iRegI src2, immI lshift, immI rshift, rFlagsReg cr)
|
||||
instruct extrOrI(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI lshift, immI rshift, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst (OrI (LShiftI src1 lshift) (URShiftI src2 rshift)));
|
||||
predicate(0 == ((n->in(1)->in(2)->get_int() + n->in(2)->in(2)->get_int()) & 31));
|
||||
@ -9392,7 +9392,7 @@ instruct extrAddL(iRegLNoSp dst, iRegL src1, iRegL src2, immI lshift, immI rshif
|
||||
ins_pipe(ialu_reg_reg_extr);
|
||||
%}
|
||||
|
||||
instruct extrAddI(iRegINoSp dst, iRegI src1, iRegI src2, immI lshift, immI rshift, rFlagsReg cr)
|
||||
instruct extrAddI(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI lshift, immI rshift, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst (AddI (LShiftI src1 lshift) (URShiftI src2 rshift)));
|
||||
predicate(0 == ((n->in(1)->in(2)->get_int() + n->in(2)->in(2)->get_int()) & 31));
|
||||
@ -9571,7 +9571,7 @@ instruct SubExtI(iRegLNoSp dst, iRegL src1, iRegIorL2I src2, rFlagsReg cr)
|
||||
%};
|
||||
|
||||
|
||||
instruct AddExtI_sxth(iRegINoSp dst, iRegI src1, iRegI src2, immI_16 lshift, immI_16 rshift, rFlagsReg cr)
|
||||
instruct AddExtI_sxth(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI_16 lshift, immI_16 rshift, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst (AddI src1 (RShiftI (LShiftI src2 lshift) rshift)));
|
||||
ins_cost(INSN_COST);
|
||||
@ -9584,7 +9584,7 @@ instruct AddExtI_sxth(iRegINoSp dst, iRegI src1, iRegI src2, immI_16 lshift, imm
|
||||
ins_pipe(ialu_reg_reg);
|
||||
%}
|
||||
|
||||
instruct AddExtI_sxtb(iRegINoSp dst, iRegI src1, iRegI src2, immI_24 lshift, immI_24 rshift, rFlagsReg cr)
|
||||
instruct AddExtI_sxtb(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI_24 lshift, immI_24 rshift, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst (AddI src1 (RShiftI (LShiftI src2 lshift) rshift)));
|
||||
ins_cost(INSN_COST);
|
||||
@ -9597,7 +9597,7 @@ instruct AddExtI_sxtb(iRegINoSp dst, iRegI src1, iRegI src2, immI_24 lshift, imm
|
||||
ins_pipe(ialu_reg_reg);
|
||||
%}
|
||||
|
||||
instruct AddExtI_uxtb(iRegINoSp dst, iRegI src1, iRegI src2, immI_24 lshift, immI_24 rshift, rFlagsReg cr)
|
||||
instruct AddExtI_uxtb(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI_24 lshift, immI_24 rshift, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst (AddI src1 (URShiftI (LShiftI src2 lshift) rshift)));
|
||||
ins_cost(INSN_COST);
|
||||
@ -9663,7 +9663,7 @@ instruct AddExtL_uxtb(iRegLNoSp dst, iRegL src1, iRegL src2, immI_56 lshift, imm
|
||||
%}
|
||||
|
||||
|
||||
instruct AddExtI_uxtb_and(iRegINoSp dst, iRegI src1, iRegI src2, immI_255 mask, rFlagsReg cr)
|
||||
instruct AddExtI_uxtb_and(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI_255 mask, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst (AddI src1 (AndI src2 mask)));
|
||||
ins_cost(INSN_COST);
|
||||
@ -9676,7 +9676,7 @@ instruct AddExtI_uxtb_and(iRegINoSp dst, iRegI src1, iRegI src2, immI_255 mask,
|
||||
ins_pipe(ialu_reg_reg);
|
||||
%}
|
||||
|
||||
instruct AddExtI_uxth_and(iRegINoSp dst, iRegI src1, iRegI src2, immI_65535 mask, rFlagsReg cr)
|
||||
instruct AddExtI_uxth_and(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI_65535 mask, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst (AddI src1 (AndI src2 mask)));
|
||||
ins_cost(INSN_COST);
|
||||
@ -9728,7 +9728,7 @@ instruct AddExtL_uxtw_and(iRegLNoSp dst, iRegL src1, iRegL src2, immL_4294967295
|
||||
ins_pipe(ialu_reg_reg);
|
||||
%}
|
||||
|
||||
instruct SubExtI_uxtb_and(iRegINoSp dst, iRegI src1, iRegI src2, immI_255 mask, rFlagsReg cr)
|
||||
instruct SubExtI_uxtb_and(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI_255 mask, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst (SubI src1 (AndI src2 mask)));
|
||||
ins_cost(INSN_COST);
|
||||
@ -9741,7 +9741,7 @@ instruct SubExtI_uxtb_and(iRegINoSp dst, iRegI src1, iRegI src2, immI_255 mask,
|
||||
ins_pipe(ialu_reg_reg);
|
||||
%}
|
||||
|
||||
instruct SubExtI_uxth_and(iRegINoSp dst, iRegI src1, iRegI src2, immI_65535 mask, rFlagsReg cr)
|
||||
instruct SubExtI_uxth_and(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI_65535 mask, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst (SubI src1 (AndI src2 mask)));
|
||||
ins_cost(INSN_COST);
|
||||
@ -10343,7 +10343,7 @@ instruct convI2L_reg_reg(iRegLNoSp dst, iRegIorL2I src)
|
||||
%}
|
||||
|
||||
// this pattern occurs in bigmath arithmetic
|
||||
instruct convUI2L_reg_reg(iRegLNoSp dst, iRegI src, immL_32bits mask)
|
||||
instruct convUI2L_reg_reg(iRegLNoSp dst, iRegIorL2I src, immL_32bits mask)
|
||||
%{
|
||||
match(Set dst (AndL (ConvI2L src) mask));
|
||||
|
||||
@ -10369,7 +10369,7 @@ instruct convL2I_reg(iRegINoSp dst, iRegL src) %{
|
||||
ins_pipe(ialu_reg);
|
||||
%}
|
||||
|
||||
instruct convI2B(iRegINoSp dst, iRegI src, rFlagsReg cr)
|
||||
instruct convI2B(iRegINoSp dst, iRegIorL2I src, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst (Conv2B src));
|
||||
effect(KILL cr);
|
||||
@ -10457,7 +10457,7 @@ instruct convF2L_reg_reg(iRegLNoSp dst, vRegF src) %{
|
||||
ins_pipe(pipe_class_default);
|
||||
%}
|
||||
|
||||
instruct convI2F_reg_reg(vRegF dst, iRegI src) %{
|
||||
instruct convI2F_reg_reg(vRegF dst, iRegIorL2I src) %{
|
||||
match(Set dst (ConvI2F src));
|
||||
|
||||
ins_cost(INSN_COST * 5);
|
||||
@ -10509,7 +10509,7 @@ instruct convD2L_reg_reg(iRegLNoSp dst, vRegD src) %{
|
||||
ins_pipe(pipe_class_default);
|
||||
%}
|
||||
|
||||
instruct convI2D_reg_reg(vRegD dst, iRegI src) %{
|
||||
instruct convI2D_reg_reg(vRegD dst, iRegIorL2I src) %{
|
||||
match(Set dst (ConvI2D src));
|
||||
|
||||
ins_cost(INSN_COST * 5);
|
||||
@ -10772,7 +10772,7 @@ instruct clearArray_reg_reg(iRegL_R11 cnt, iRegP_R10 base, Universe dummy, rFlag
|
||||
// ============================================================================
|
||||
// Overflow Math Instructions
|
||||
|
||||
instruct overflowAddI_reg_reg(rFlagsReg cr, iRegI op1, iRegI op2)
|
||||
instruct overflowAddI_reg_reg(rFlagsReg cr, iRegIorL2I op1, iRegIorL2I op2)
|
||||
%{
|
||||
match(Set cr (OverflowAddI op1 op2));
|
||||
|
||||
@ -10785,7 +10785,7 @@ instruct overflowAddI_reg_reg(rFlagsReg cr, iRegI op1, iRegI op2)
|
||||
ins_pipe(icmp_reg_reg);
|
||||
%}
|
||||
|
||||
instruct overflowAddI_reg_imm(rFlagsReg cr, iRegI op1, immIAddSub op2)
|
||||
instruct overflowAddI_reg_imm(rFlagsReg cr, iRegIorL2I op1, immIAddSub op2)
|
||||
%{
|
||||
match(Set cr (OverflowAddI op1 op2));
|
||||
|
||||
@ -10824,7 +10824,7 @@ instruct overflowAddL_reg_imm(rFlagsReg cr, iRegL op1, immLAddSub op2)
|
||||
ins_pipe(icmp_reg_imm);
|
||||
%}
|
||||
|
||||
instruct overflowSubI_reg_reg(rFlagsReg cr, iRegI op1, iRegI op2)
|
||||
instruct overflowSubI_reg_reg(rFlagsReg cr, iRegIorL2I op1, iRegIorL2I op2)
|
||||
%{
|
||||
match(Set cr (OverflowSubI op1 op2));
|
||||
|
||||
@ -10837,7 +10837,7 @@ instruct overflowSubI_reg_reg(rFlagsReg cr, iRegI op1, iRegI op2)
|
||||
ins_pipe(icmp_reg_reg);
|
||||
%}
|
||||
|
||||
instruct overflowSubI_reg_imm(rFlagsReg cr, iRegI op1, immIAddSub op2)
|
||||
instruct overflowSubI_reg_imm(rFlagsReg cr, iRegIorL2I op1, immIAddSub op2)
|
||||
%{
|
||||
match(Set cr (OverflowSubI op1 op2));
|
||||
|
||||
@ -10876,7 +10876,7 @@ instruct overflowSubL_reg_imm(rFlagsReg cr, iRegL op1, immLAddSub op2)
|
||||
ins_pipe(icmp_reg_imm);
|
||||
%}
|
||||
|
||||
instruct overflowNegI_reg(rFlagsReg cr, immI0 zero, iRegI op1)
|
||||
instruct overflowNegI_reg(rFlagsReg cr, immI0 zero, iRegIorL2I op1)
|
||||
%{
|
||||
match(Set cr (OverflowSubI zero op1));
|
||||
|
||||
@ -10902,7 +10902,7 @@ instruct overflowNegL_reg(rFlagsReg cr, immI0 zero, iRegL op1)
|
||||
ins_pipe(icmp_reg_imm);
|
||||
%}
|
||||
|
||||
instruct overflowMulI_reg(rFlagsReg cr, iRegI op1, iRegI op2)
|
||||
instruct overflowMulI_reg(rFlagsReg cr, iRegIorL2I op1, iRegIorL2I op2)
|
||||
%{
|
||||
match(Set cr (OverflowMulI op1 op2));
|
||||
|
||||
@ -10923,7 +10923,7 @@ instruct overflowMulI_reg(rFlagsReg cr, iRegI op1, iRegI op2)
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
instruct overflowMulI_reg_branch(cmpOp cmp, iRegI op1, iRegI op2, label labl, rFlagsReg cr)
|
||||
instruct overflowMulI_reg_branch(cmpOp cmp, iRegIorL2I op1, iRegIorL2I op2, label labl, rFlagsReg cr)
|
||||
%{
|
||||
match(If cmp (OverflowMulI op1 op2));
|
||||
predicate(n->in(1)->as_Bool()->_test._test == BoolTest::overflow
|
||||
@ -11393,7 +11393,7 @@ instruct compD3_reg_immD0(iRegINoSp dst, vRegD src1, immD0 zero, rFlagsReg cr)
|
||||
|
||||
%}
|
||||
|
||||
instruct cmpLTMask_reg_reg(iRegINoSp dst, iRegI p, iRegI q, rFlagsReg cr)
|
||||
instruct cmpLTMask_reg_reg(iRegINoSp dst, iRegIorL2I p, iRegIorL2I q, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst (CmpLTMask p q));
|
||||
effect(KILL cr);
|
||||
@ -11414,7 +11414,7 @@ instruct cmpLTMask_reg_reg(iRegINoSp dst, iRegI p, iRegI q, rFlagsReg cr)
|
||||
ins_pipe(ialu_reg_reg);
|
||||
%}
|
||||
|
||||
instruct cmpLTMask_reg_zero(iRegINoSp dst, iRegI src, immI0 zero, rFlagsReg cr)
|
||||
instruct cmpLTMask_reg_zero(iRegINoSp dst, iRegIorL2I src, immI0 zero, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst (CmpLTMask src zero));
|
||||
effect(KILL cr);
|
||||
@ -11548,7 +11548,7 @@ instruct branchConU(cmpOpU cmp, rFlagsRegU cr, label lbl)
|
||||
// shorter than (cmp; branch), have the additional benefit of not
|
||||
// killing the flags.
|
||||
|
||||
instruct cmpI_imm0_branch(cmpOp cmp, iRegI op1, immI0 op2, label labl, rFlagsReg cr) %{
|
||||
instruct cmpI_imm0_branch(cmpOp cmp, iRegIorL2I op1, immI0 op2, label labl, rFlagsReg cr) %{
|
||||
match(If cmp (CmpI op1 op2));
|
||||
predicate(n->in(1)->as_Bool()->_test._test == BoolTest::ne
|
||||
|| n->in(1)->as_Bool()->_test._test == BoolTest::eq);
|
||||
|
||||
@ -24,11 +24,13 @@ dnl Process this file with m4 aarch64_ad.m4 to generate the arithmetic
|
||||
dnl and shift patterns patterns used in aarch64.ad.
|
||||
dnl
|
||||
// BEGIN This section of the file is automatically generated. Do not edit --------------
|
||||
|
||||
dnl
|
||||
define(`ORL2I', `ifelse($1,I,orL2I)')
|
||||
dnl
|
||||
define(`BASE_SHIFT_INSN',
|
||||
`
|
||||
instruct $2$1_reg_$4_reg(iReg$1NoSp dst,
|
||||
iReg$1 src1, iReg$1 src2,
|
||||
iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I($1) src2,
|
||||
immI src3, rFlagsReg cr) %{
|
||||
match(Set dst ($2$1 src1 ($4$1 src2 src3)));
|
||||
|
||||
@ -48,7 +50,7 @@ instruct $2$1_reg_$4_reg(iReg$1NoSp dst,
|
||||
define(`BASE_INVERTED_INSN',
|
||||
`
|
||||
instruct $2$1_reg_not_reg(iReg$1NoSp dst,
|
||||
iReg$1 src1, iReg$1 src2, imm$1_M1 m1,
|
||||
iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I($1) src2, imm$1_M1 m1,
|
||||
rFlagsReg cr) %{
|
||||
dnl This ifelse is because hotspot reassociates (xor (xor ..)..)
|
||||
dnl into this canonical form.
|
||||
@ -70,7 +72,7 @@ dnl into this canonical form.
|
||||
define(`INVERTED_SHIFT_INSN',
|
||||
`
|
||||
instruct $2$1_reg_$4_not_reg(iReg$1NoSp dst,
|
||||
iReg$1 src1, iReg$1 src2,
|
||||
iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I($1) src2,
|
||||
immI src3, imm$1_M1 src4, rFlagsReg cr) %{
|
||||
dnl This ifelse is because hotspot reassociates (xor (xor ..)..)
|
||||
dnl into this canonical form.
|
||||
@ -92,7 +94,7 @@ dnl into this canonical form.
|
||||
%}')dnl
|
||||
define(`NOT_INSN',
|
||||
`instruct reg$1_not_reg(iReg$1NoSp dst,
|
||||
iReg$1 src1, imm$1_M1 m1,
|
||||
iReg$1`'ORL2I($1) src1, imm$1_M1 m1,
|
||||
rFlagsReg cr) %{
|
||||
match(Set dst (Xor$1 src1 m1));
|
||||
ins_cost(INSN_COST);
|
||||
@ -113,7 +115,7 @@ define(`BOTH_SHIFT_INSNS',
|
||||
BASE_SHIFT_INSN(L, $1, $2, $3, $4)')dnl
|
||||
dnl
|
||||
define(`BOTH_INVERTED_INSNS',
|
||||
`BASE_INVERTED_INSN(I, $1, $2, $3, $4)
|
||||
`BASE_INVERTED_INSN(I, $1, $2w, $3, $4)
|
||||
BASE_INVERTED_INSN(L, $1, $2, $3, $4)')dnl
|
||||
dnl
|
||||
define(`BOTH_INVERTED_SHIFT_INSNS',
|
||||
@ -149,7 +151,7 @@ define(`EXTEND', `($2$1 (LShift$1 $3 $4) $5)')
|
||||
define(`BFM_INSN',`
|
||||
// Shift Left followed by Shift Right.
|
||||
// This idiom is used by the compiler for the i2b bytecode etc.
|
||||
instruct $4$1(iReg$1NoSp dst, iReg$1 src, immI lshift_count, immI rshift_count)
|
||||
instruct $4$1(iReg$1NoSp dst, iReg$1`'ORL2I($1) src, immI lshift_count, immI rshift_count)
|
||||
%{
|
||||
match(Set dst EXTEND($1, $3, src, lshift_count, rshift_count));
|
||||
// Make sure we are not going to exceed what $4 can do.
|
||||
@ -176,7 +178,7 @@ BFM_INSN(I, 31, URShift, ubfmw)
|
||||
dnl
|
||||
// Bitfield extract with shift & mask
|
||||
define(`BFX_INSN',
|
||||
`instruct $3$1(iReg$1NoSp dst, iReg$1 src, immI rshift, imm$1_bitmask mask)
|
||||
`instruct $3$1(iReg$1NoSp dst, iReg$1`'ORL2I($1) src, immI rshift, imm$1_bitmask mask)
|
||||
%{
|
||||
match(Set dst (And$1 ($2$1 src rshift) mask));
|
||||
|
||||
@ -215,7 +217,7 @@ instruct ubfxIConvI2L(iRegLNoSp dst, iRegIorL2I src, immI rshift, immI_bitmask m
|
||||
// Rotations
|
||||
|
||||
define(`EXTRACT_INSN',
|
||||
`instruct extr$3$1(iReg$1NoSp dst, iReg$1 src1, iReg$1 src2, immI lshift, immI rshift, rFlagsReg cr)
|
||||
`instruct extr$3$1(iReg$1NoSp dst, iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I($1) src2, immI lshift, immI rshift, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst ($3$1 (LShift$1 src1 lshift) (URShift$1 src2 rshift)));
|
||||
predicate(0 == ((n->in(1)->in(2)->get_int() + n->in(2)->in(2)->get_int()) & $2));
|
||||
@ -299,7 +301,7 @@ ROR_INSN(I, 0, ror)
|
||||
// Add/subtract (extended)
|
||||
dnl ADD_SUB_EXTENDED(mode, size, add node, shift node, insn, shift type, wordsize
|
||||
define(`ADD_SUB_CONV', `
|
||||
instruct $3Ext$1(iReg$2NoSp dst, iReg$2 src1, iReg$1orL2I src2, rFlagsReg cr)
|
||||
instruct $3Ext$1(iReg$2NoSp dst, iReg$2`'ORL2I($2) src1, iReg$1`'ORL2I($1) src2, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst ($3$2 src1 (ConvI2L src2)));
|
||||
ins_cost(INSN_COST);
|
||||
@ -315,7 +317,7 @@ ADD_SUB_CONV(I,L,Add,add,sxtw);
|
||||
ADD_SUB_CONV(I,L,Sub,sub,sxtw);
|
||||
dnl
|
||||
define(`ADD_SUB_EXTENDED', `
|
||||
instruct $3Ext$1_$6(iReg$1NoSp dst, iReg$1 src1, iReg$1 src2, immI_`'eval($7-$2) lshift, immI_`'eval($7-$2) rshift, rFlagsReg cr)
|
||||
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)
|
||||
%{
|
||||
match(Set dst ($3$1 src1 EXTEND($1, $4, src2, lshift, rshift)));
|
||||
ins_cost(INSN_COST);
|
||||
@ -337,7 +339,7 @@ ADD_SUB_EXTENDED(L,8,Add,URShift,add,uxtb,64)
|
||||
dnl
|
||||
dnl ADD_SUB_ZERO_EXTEND(mode, size, add node, insn, shift type)
|
||||
define(`ADD_SUB_ZERO_EXTEND', `
|
||||
instruct $3Ext$1_$5_and(iReg$1NoSp dst, iReg$1 src1, iReg$1 src2, imm$1_$2 mask, rFlagsReg cr)
|
||||
instruct $3Ext$1_$5_and(iReg$1NoSp dst, iReg$1`'ORL2I($1) src1, iReg$1`'ORL2I($1) src2, imm$1_$2 mask, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst ($3$1 src1 (And$1 src2 mask)));
|
||||
ins_cost(INSN_COST);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user