cranelift: Port ushr SIMD lowerings to ISLE on x64
This commit is contained in:
@@ -84,6 +84,8 @@ pub trait Context {
|
||||
fn nonzero_u64_fits_in_u32(&mut self, arg0: u64) -> Option<u64>;
|
||||
fn ishl_i8x16_mask_for_const(&mut self, arg0: u32) -> SyntheticAmode;
|
||||
fn ishl_i8x16_mask_table(&mut self) -> SyntheticAmode;
|
||||
fn ushr_i8x16_mask_for_const(&mut self, arg0: u32) -> SyntheticAmode;
|
||||
fn ushr_i8x16_mask_table(&mut self) -> SyntheticAmode;
|
||||
fn sse_insertps_lane_imm(&mut self, arg0: u8) -> u8;
|
||||
}
|
||||
|
||||
@@ -2135,11 +2137,21 @@ pub fn constructor_psllq<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMemImm) -
|
||||
return Some(expr1_0);
|
||||
}
|
||||
|
||||
// Generated as internal constructor for term psrlw.
|
||||
pub fn constructor_psrlw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMemImm) -> Option<Reg> {
|
||||
let pattern0_0 = arg0;
|
||||
let pattern1_0 = arg1;
|
||||
// Rule at src/isa/x64/inst.isle line 1310.
|
||||
let expr0_0 = SseOpcode::Psrlw;
|
||||
let expr1_0 = constructor_xmm_rmi_reg(ctx, &expr0_0, pattern0_0, pattern1_0)?;
|
||||
return Some(expr1_0);
|
||||
}
|
||||
|
||||
// Generated as internal constructor for term psrld.
|
||||
pub fn constructor_psrld<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMemImm) -> Option<Reg> {
|
||||
let pattern0_0 = arg0;
|
||||
let pattern1_0 = arg1;
|
||||
// Rule at src/isa/x64/inst.isle line 1310.
|
||||
// Rule at src/isa/x64/inst.isle line 1315.
|
||||
let expr0_0 = SseOpcode::Psrld;
|
||||
let expr1_0 = constructor_xmm_rmi_reg(ctx, &expr0_0, pattern0_0, pattern1_0)?;
|
||||
return Some(expr1_0);
|
||||
@@ -2149,7 +2161,7 @@ pub fn constructor_psrld<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMemImm) -
|
||||
pub fn constructor_psrlq<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMemImm) -> Option<Reg> {
|
||||
let pattern0_0 = arg0;
|
||||
let pattern1_0 = arg1;
|
||||
// Rule at src/isa/x64/inst.isle line 1315.
|
||||
// Rule at src/isa/x64/inst.isle line 1320.
|
||||
let expr0_0 = SseOpcode::Psrlq;
|
||||
let expr1_0 = constructor_xmm_rmi_reg(ctx, &expr0_0, pattern0_0, pattern1_0)?;
|
||||
return Some(expr1_0);
|
||||
@@ -2159,7 +2171,7 @@ pub fn constructor_psrlq<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMemImm) -
|
||||
pub fn constructor_psraw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMemImm) -> Option<Reg> {
|
||||
let pattern0_0 = arg0;
|
||||
let pattern1_0 = arg1;
|
||||
// Rule at src/isa/x64/inst.isle line 1320.
|
||||
// Rule at src/isa/x64/inst.isle line 1325.
|
||||
let expr0_0 = SseOpcode::Psraw;
|
||||
let expr1_0 = constructor_xmm_rmi_reg(ctx, &expr0_0, pattern0_0, pattern1_0)?;
|
||||
return Some(expr1_0);
|
||||
@@ -2169,7 +2181,7 @@ pub fn constructor_psraw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMemImm) -
|
||||
pub fn constructor_psrad<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMemImm) -> Option<Reg> {
|
||||
let pattern0_0 = arg0;
|
||||
let pattern1_0 = arg1;
|
||||
// Rule at src/isa/x64/inst.isle line 1325.
|
||||
// Rule at src/isa/x64/inst.isle line 1330.
|
||||
let expr0_0 = SseOpcode::Psrad;
|
||||
let expr1_0 = constructor_xmm_rmi_reg(ctx, &expr0_0, pattern0_0, pattern1_0)?;
|
||||
return Some(expr1_0);
|
||||
@@ -2187,7 +2199,7 @@ pub fn constructor_mul_hi<C: Context>(
|
||||
let pattern1_0 = arg1;
|
||||
let pattern2_0 = arg2;
|
||||
let pattern3_0 = arg3;
|
||||
// Rule at src/isa/x64/inst.isle line 1332.
|
||||
// Rule at src/isa/x64/inst.isle line 1337.
|
||||
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
||||
let expr1_0 = C::temp_writable_reg(ctx, pattern0_0);
|
||||
let expr2_0 = C::operand_size_of_type_32_64(ctx, pattern0_0);
|
||||
@@ -2216,7 +2228,7 @@ pub fn constructor_mulhi_u<C: Context>(
|
||||
let pattern0_0 = arg0;
|
||||
let pattern1_0 = arg1;
|
||||
let pattern2_0 = arg2;
|
||||
// Rule at src/isa/x64/inst.isle line 1348.
|
||||
// Rule at src/isa/x64/inst.isle line 1353.
|
||||
let expr0_0: bool = false;
|
||||
let expr1_0 = constructor_mul_hi(ctx, pattern0_0, expr0_0, pattern1_0, pattern2_0)?;
|
||||
return Some(expr1_0);
|
||||
@@ -2232,7 +2244,7 @@ pub fn constructor_cmpps<C: Context>(
|
||||
let pattern0_0 = arg0;
|
||||
let pattern1_0 = arg1;
|
||||
let pattern2_0 = arg2;
|
||||
// Rule at src/isa/x64/inst.isle line 1353.
|
||||
// Rule at src/isa/x64/inst.isle line 1358.
|
||||
let expr0_0 = SseOpcode::Cmpps;
|
||||
let expr1_0 = C::encode_fcmp_imm(ctx, pattern2_0);
|
||||
let expr2_0 = OperandSize::Size32;
|
||||
@@ -2251,7 +2263,7 @@ pub fn constructor_cmppd<C: Context>(
|
||||
let pattern0_0 = arg0;
|
||||
let pattern1_0 = arg1;
|
||||
let pattern2_0 = arg2;
|
||||
// Rule at src/isa/x64/inst.isle line 1366.
|
||||
// Rule at src/isa/x64/inst.isle line 1371.
|
||||
let expr0_0 = SseOpcode::Cmppd;
|
||||
let expr1_0 = C::encode_fcmp_imm(ctx, pattern2_0);
|
||||
let expr2_0 = OperandSize::Size32;
|
||||
@@ -2272,7 +2284,7 @@ pub fn constructor_gpr_to_xmm<C: Context>(
|
||||
let pattern1_0 = arg1;
|
||||
let pattern2_0 = arg2;
|
||||
let pattern3_0 = arg3;
|
||||
// Rule at src/isa/x64/inst.isle line 1375.
|
||||
// Rule at src/isa/x64/inst.isle line 1380.
|
||||
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
||||
let expr1_0 = MInst::GprToXmm {
|
||||
op: pattern1_0.clone(),
|
||||
@@ -2295,7 +2307,7 @@ pub fn constructor_pinsrb<C: Context>(
|
||||
let pattern0_0 = arg0;
|
||||
let pattern1_0 = arg1;
|
||||
let pattern2_0 = arg2;
|
||||
// Rule at src/isa/x64/inst.isle line 1382.
|
||||
// Rule at src/isa/x64/inst.isle line 1387.
|
||||
let expr0_0 = SseOpcode::Pinsrb;
|
||||
let expr1_0 = OperandSize::Size32;
|
||||
let expr2_0 =
|
||||
@@ -2313,7 +2325,7 @@ pub fn constructor_pinsrw<C: Context>(
|
||||
let pattern0_0 = arg0;
|
||||
let pattern1_0 = arg1;
|
||||
let pattern2_0 = arg2;
|
||||
// Rule at src/isa/x64/inst.isle line 1387.
|
||||
// Rule at src/isa/x64/inst.isle line 1392.
|
||||
let expr0_0 = SseOpcode::Pinsrw;
|
||||
let expr1_0 = OperandSize::Size32;
|
||||
let expr2_0 =
|
||||
@@ -2333,7 +2345,7 @@ pub fn constructor_pinsrd<C: Context>(
|
||||
let pattern1_0 = arg1;
|
||||
let pattern2_0 = arg2;
|
||||
let pattern3_0 = arg3;
|
||||
// Rule at src/isa/x64/inst.isle line 1392.
|
||||
// Rule at src/isa/x64/inst.isle line 1397.
|
||||
let expr0_0 = SseOpcode::Pinsrd;
|
||||
let expr1_0 = constructor_xmm_rm_r_imm(
|
||||
ctx, &expr0_0, pattern0_0, pattern1_0, pattern2_0, pattern3_0,
|
||||
@@ -2351,7 +2363,7 @@ pub fn constructor_insertps<C: Context>(
|
||||
let pattern0_0 = arg0;
|
||||
let pattern1_0 = arg1;
|
||||
let pattern2_0 = arg2;
|
||||
// Rule at src/isa/x64/inst.isle line 1397.
|
||||
// Rule at src/isa/x64/inst.isle line 1402.
|
||||
let expr0_0 = SseOpcode::Insertps;
|
||||
let expr1_0 = OperandSize::Size32;
|
||||
let expr2_0 =
|
||||
@@ -2364,7 +2376,7 @@ pub fn constructor_pextrd<C: Context>(ctx: &mut C, arg0: Type, arg1: Reg, arg2:
|
||||
let pattern0_0 = arg0;
|
||||
let pattern1_0 = arg1;
|
||||
let pattern2_0 = arg2;
|
||||
// Rule at src/isa/x64/inst.isle line 1402.
|
||||
// Rule at src/isa/x64/inst.isle line 1407.
|
||||
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
||||
let expr1_0 = C::writable_reg_to_reg(ctx, expr0_0);
|
||||
let expr2_0 = SseOpcode::Pextrd;
|
||||
@@ -2387,7 +2399,7 @@ pub fn constructor_pextrd<C: Context>(ctx: &mut C, arg0: Type, arg1: Reg, arg2:
|
||||
pub fn constructor_not<C: Context>(ctx: &mut C, arg0: Type, arg1: Reg) -> Option<Reg> {
|
||||
let pattern0_0 = arg0;
|
||||
let pattern1_0 = arg1;
|
||||
// Rule at src/isa/x64/inst.isle line 1415.
|
||||
// Rule at src/isa/x64/inst.isle line 1420.
|
||||
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
||||
let expr1_0 = C::operand_size_of_type_32_64(ctx, pattern0_0);
|
||||
let expr2_0 = MInst::Not {
|
||||
@@ -2403,7 +2415,7 @@ pub fn constructor_not<C: Context>(ctx: &mut C, arg0: Type, arg1: Reg) -> Option
|
||||
// Generated as internal constructor for term lea.
|
||||
pub fn constructor_lea<C: Context>(ctx: &mut C, arg0: &SyntheticAmode) -> Option<Reg> {
|
||||
let pattern0_0 = arg0;
|
||||
// Rule at src/isa/x64/inst.isle line 1422.
|
||||
// Rule at src/isa/x64/inst.isle line 1427.
|
||||
let expr0_0: Type = I64;
|
||||
let expr1_0 = C::temp_writable_reg(ctx, expr0_0);
|
||||
let expr2_0 = MInst::LoadEffectiveAddress {
|
||||
@@ -2455,7 +2467,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
let (pattern4_0, pattern4_1) = C::unpack_value_array_2(ctx, &pattern2_1);
|
||||
let pattern5_0 = C::value_type(ctx, pattern4_0);
|
||||
let pattern6_0 = C::u8_from_uimm8(ctx, pattern2_2);
|
||||
// Rule at src/isa/x64/lower.isle line 1221.
|
||||
// Rule at src/isa/x64/lower.isle line 1272.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern4_0);
|
||||
let expr1_0 = C::put_in_reg_mem(ctx, pattern4_1);
|
||||
let expr2_0 =
|
||||
@@ -2561,7 +2573,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
arg: pattern5_1,
|
||||
} => {
|
||||
if let &Opcode::Bnot = &pattern5_0 {
|
||||
// Rule at src/isa/x64/lower.isle line 1188.
|
||||
// Rule at src/isa/x64/lower.isle line 1239.
|
||||
let expr0_0 = constructor_i128_not(ctx, pattern5_1)?;
|
||||
return Some(expr0_0);
|
||||
}
|
||||
@@ -2644,7 +2656,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Imul => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 876.
|
||||
// Rule at src/isa/x64/lower.isle line 927.
|
||||
let expr0_0 = C::put_in_regs(ctx, pattern7_0);
|
||||
let expr1_0: usize = 0;
|
||||
let expr2_0 = C::value_regs_get(ctx, expr0_0, expr1_0);
|
||||
@@ -2735,7 +2747,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Rotl => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 809.
|
||||
// Rule at src/isa/x64/lower.isle line 860.
|
||||
let expr0_0 = C::put_in_regs(ctx, pattern7_0);
|
||||
let expr1_0 = constructor_lo_reg(ctx, pattern7_1)?;
|
||||
let expr2_0 = constructor_shl_i128(ctx, expr0_0, expr1_0)?;
|
||||
@@ -2761,7 +2773,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Ushr => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 668.
|
||||
// Rule at src/isa/x64/lower.isle line 664.
|
||||
let expr0_0 = constructor_lo_reg(ctx, pattern7_1)?;
|
||||
let expr1_0 = C::put_in_regs(ctx, pattern7_0);
|
||||
let expr2_0 = constructor_shr_i128(ctx, expr1_0, expr0_0)?;
|
||||
@@ -2770,7 +2782,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Sshr => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 710.
|
||||
// Rule at src/isa/x64/lower.isle line 761.
|
||||
let expr0_0 = constructor_lo_reg(ctx, pattern7_1)?;
|
||||
let expr1_0 = C::put_in_regs(ctx, pattern7_0);
|
||||
let expr2_0 = constructor_sar_i128(ctx, expr1_0, expr0_0)?;
|
||||
@@ -2784,7 +2796,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
arg: pattern5_1,
|
||||
} => {
|
||||
if let &Opcode::Bnot = &pattern5_0 {
|
||||
// Rule at src/isa/x64/lower.isle line 1185.
|
||||
// Rule at src/isa/x64/lower.isle line 1236.
|
||||
let expr0_0 = constructor_i128_not(ctx, pattern5_1)?;
|
||||
return Some(expr0_0);
|
||||
}
|
||||
@@ -2829,7 +2841,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Imin => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 1289.
|
||||
// Rule at src/isa/x64/lower.isle line 1340.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_pminsb(ctx, expr0_0, &expr1_0)?;
|
||||
@@ -2839,7 +2851,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Umin => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 1311.
|
||||
// Rule at src/isa/x64/lower.isle line 1362.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_pminub(ctx, expr0_0, &expr1_0)?;
|
||||
@@ -2849,7 +2861,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Imax => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 1278.
|
||||
// Rule at src/isa/x64/lower.isle line 1329.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_pmaxsb(ctx, expr0_0, &expr1_0)?;
|
||||
@@ -2859,7 +2871,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Umax => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 1300.
|
||||
// Rule at src/isa/x64/lower.isle line 1351.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_pmaxub(ctx, expr0_0, &expr1_0)?;
|
||||
@@ -2884,11 +2896,29 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
let expr11_0 = C::value_reg(ctx, expr10_0);
|
||||
return Some(expr11_0);
|
||||
}
|
||||
&Opcode::Ushr => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 674.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem_imm(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_reg_mem_imm_to_xmm(ctx, &expr1_0)?;
|
||||
let expr3_0 = constructor_psrlw(ctx, expr0_0, &expr2_0)?;
|
||||
let expr4_0 = constructor_ushr_i8x16_mask(ctx, &expr1_0)?;
|
||||
let expr5_0: Type = I8X16;
|
||||
let expr6_0 = ExtKind::None;
|
||||
let expr7_0 = constructor_x64_load(ctx, expr5_0, &expr4_0, &expr6_0)?;
|
||||
let expr8_0: Type = I8X16;
|
||||
let expr9_0 = RegMem::Reg { reg: expr7_0 };
|
||||
let expr10_0 = constructor_sse_and(ctx, expr8_0, expr3_0, &expr9_0)?;
|
||||
let expr11_0 = C::value_reg(ctx, expr10_0);
|
||||
return Some(expr11_0);
|
||||
}
|
||||
&Opcode::Sshr => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
let pattern8_0 = C::value_type(ctx, pattern7_1);
|
||||
// Rule at src/isa/x64/lower.isle line 731.
|
||||
// Rule at src/isa/x64/lower.isle line 782.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = RegMem::Reg { reg: expr0_0 };
|
||||
let expr2_0 = constructor_punpcklbw(ctx, expr0_0, &expr1_0)?;
|
||||
@@ -2912,7 +2942,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
arg: pattern5_1,
|
||||
} => {
|
||||
if let &Opcode::Iabs = &pattern5_0 {
|
||||
// Rule at src/isa/x64/lower.isle line 1131.
|
||||
// Rule at src/isa/x64/lower.isle line 1182.
|
||||
let expr0_0 = C::put_in_reg_mem(ctx, pattern5_1);
|
||||
let expr1_0 = constructor_pabsb(ctx, &expr0_0)?;
|
||||
let expr2_0 = C::value_reg(ctx, expr1_0);
|
||||
@@ -2933,7 +2963,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Imin => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 1292.
|
||||
// Rule at src/isa/x64/lower.isle line 1343.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_pminsw(ctx, expr0_0, &expr1_0)?;
|
||||
@@ -2943,7 +2973,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Umin => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 1314.
|
||||
// Rule at src/isa/x64/lower.isle line 1365.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_pminuw(ctx, expr0_0, &expr1_0)?;
|
||||
@@ -2953,7 +2983,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Imax => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 1281.
|
||||
// Rule at src/isa/x64/lower.isle line 1332.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_pmaxsw(ctx, expr0_0, &expr1_0)?;
|
||||
@@ -2963,7 +2993,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Umax => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 1303.
|
||||
// Rule at src/isa/x64/lower.isle line 1354.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_pmaxuw(ctx, expr0_0, &expr1_0)?;
|
||||
@@ -2973,7 +3003,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Ishl => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 625.
|
||||
// Rule at src/isa/x64/lower.isle line 621.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem_imm(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_reg_mem_imm_to_xmm(ctx, &expr1_0)?;
|
||||
@@ -2981,10 +3011,21 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
let expr4_0 = C::value_reg(ctx, expr3_0);
|
||||
return Some(expr4_0);
|
||||
}
|
||||
&Opcode::Ushr => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 715.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem_imm(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_reg_mem_imm_to_xmm(ctx, &expr1_0)?;
|
||||
let expr3_0 = constructor_psrlw(ctx, expr0_0, &expr2_0)?;
|
||||
let expr4_0 = C::value_reg(ctx, expr3_0);
|
||||
return Some(expr4_0);
|
||||
}
|
||||
&Opcode::Sshr => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 753.
|
||||
// Rule at src/isa/x64/lower.isle line 804.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem_imm(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_reg_mem_imm_to_xmm(ctx, &expr1_0)?;
|
||||
@@ -3000,7 +3041,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
arg: pattern5_1,
|
||||
} => {
|
||||
if let &Opcode::Iabs = &pattern5_0 {
|
||||
// Rule at src/isa/x64/lower.isle line 1134.
|
||||
// Rule at src/isa/x64/lower.isle line 1185.
|
||||
let expr0_0 = C::put_in_reg_mem(ctx, pattern5_1);
|
||||
let expr1_0 = constructor_pabsw(ctx, &expr0_0)?;
|
||||
let expr2_0 = C::value_reg(ctx, expr1_0);
|
||||
@@ -3021,7 +3062,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Imin => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 1295.
|
||||
// Rule at src/isa/x64/lower.isle line 1346.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_pminsd(ctx, expr0_0, &expr1_0)?;
|
||||
@@ -3031,7 +3072,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Umin => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 1317.
|
||||
// Rule at src/isa/x64/lower.isle line 1368.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_pminud(ctx, expr0_0, &expr1_0)?;
|
||||
@@ -3041,7 +3082,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Imax => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 1284.
|
||||
// Rule at src/isa/x64/lower.isle line 1335.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_pmaxsd(ctx, expr0_0, &expr1_0)?;
|
||||
@@ -3051,7 +3092,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Umax => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 1306.
|
||||
// Rule at src/isa/x64/lower.isle line 1357.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_pmaxud(ctx, expr0_0, &expr1_0)?;
|
||||
@@ -3061,7 +3102,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Ishl => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 628.
|
||||
// Rule at src/isa/x64/lower.isle line 624.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem_imm(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_reg_mem_imm_to_xmm(ctx, &expr1_0)?;
|
||||
@@ -3069,10 +3110,21 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
let expr4_0 = C::value_reg(ctx, expr3_0);
|
||||
return Some(expr4_0);
|
||||
}
|
||||
&Opcode::Ushr => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 718.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem_imm(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_reg_mem_imm_to_xmm(ctx, &expr1_0)?;
|
||||
let expr3_0 = constructor_psrld(ctx, expr0_0, &expr2_0)?;
|
||||
let expr4_0 = C::value_reg(ctx, expr3_0);
|
||||
return Some(expr4_0);
|
||||
}
|
||||
&Opcode::Sshr => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 756.
|
||||
// Rule at src/isa/x64/lower.isle line 807.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem_imm(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_reg_mem_imm_to_xmm(ctx, &expr1_0)?;
|
||||
@@ -3088,7 +3140,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
arg: pattern5_1,
|
||||
} => {
|
||||
if let &Opcode::Iabs = &pattern5_0 {
|
||||
// Rule at src/isa/x64/lower.isle line 1137.
|
||||
// Rule at src/isa/x64/lower.isle line 1188.
|
||||
let expr0_0 = C::put_in_reg_mem(ctx, pattern5_1);
|
||||
let expr1_0 = constructor_pabsd(ctx, &expr0_0)?;
|
||||
let expr2_0 = C::value_reg(ctx, expr1_0);
|
||||
@@ -3109,7 +3161,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Ishl => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 631.
|
||||
// Rule at src/isa/x64/lower.isle line 627.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem_imm(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_reg_mem_imm_to_xmm(ctx, &expr1_0)?;
|
||||
@@ -3117,10 +3169,21 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
let expr4_0 = C::value_reg(ctx, expr3_0);
|
||||
return Some(expr4_0);
|
||||
}
|
||||
&Opcode::Ushr => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 721.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem_imm(ctx, pattern7_1);
|
||||
let expr2_0 = constructor_reg_mem_imm_to_xmm(ctx, &expr1_0)?;
|
||||
let expr3_0 = constructor_psrlq(ctx, expr0_0, &expr2_0)?;
|
||||
let expr4_0 = C::value_reg(ctx, expr3_0);
|
||||
return Some(expr4_0);
|
||||
}
|
||||
&Opcode::Sshr => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 768.
|
||||
// Rule at src/isa/x64/lower.isle line 819.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0: Type = I64;
|
||||
let expr2_0: u8 = 0;
|
||||
@@ -3149,7 +3212,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
arg: pattern5_1,
|
||||
} => {
|
||||
if let &Opcode::Iabs = &pattern5_0 {
|
||||
// Rule at src/isa/x64/lower.isle line 1151.
|
||||
// Rule at src/isa/x64/lower.isle line 1202.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern5_1);
|
||||
let expr1_0: Type = I64X2;
|
||||
let expr2_0: u64 = 0;
|
||||
@@ -3173,7 +3236,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
} = &pattern4_0
|
||||
{
|
||||
if let &Opcode::Fabs = &pattern5_0 {
|
||||
// Rule at src/isa/x64/lower.isle line 1159.
|
||||
// Rule at src/isa/x64/lower.isle line 1210.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern5_1);
|
||||
let expr1_0: Type = F32X4;
|
||||
let expr2_0 = constructor_vector_all_ones(ctx, expr1_0)?;
|
||||
@@ -3195,7 +3258,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
} = &pattern4_0
|
||||
{
|
||||
if let &Opcode::Fabs = &pattern5_0 {
|
||||
// Rule at src/isa/x64/lower.isle line 1164.
|
||||
// Rule at src/isa/x64/lower.isle line 1215.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern5_1);
|
||||
let expr1_0: Type = F64X2;
|
||||
let expr2_0 = constructor_vector_all_ones(ctx, expr1_0)?;
|
||||
@@ -3228,7 +3291,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
} => {
|
||||
if let &Opcode::BandNot = &pattern4_0 {
|
||||
let (pattern6_0, pattern6_1) = C::unpack_value_array_2(ctx, &pattern4_1);
|
||||
// Rule at src/isa/x64/lower.isle line 1124.
|
||||
// Rule at src/isa/x64/lower.isle line 1175.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern6_1);
|
||||
let expr1_0 = C::put_in_reg_mem(ctx, pattern6_0);
|
||||
let expr2_0 = constructor_sse_and_not(ctx, pattern2_0, expr0_0, &expr1_0)?;
|
||||
@@ -3252,7 +3315,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
if let &Opcode::Imul = &pattern9_0 {
|
||||
let (pattern11_0, pattern11_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern9_1);
|
||||
// Rule at src/isa/x64/lower.isle line 911.
|
||||
// Rule at src/isa/x64/lower.isle line 962.
|
||||
let expr0_0 = C::put_in_reg_mem(ctx, pattern11_0);
|
||||
let expr1_0 = C::put_in_reg(ctx, pattern11_1);
|
||||
let expr2_0 = constructor_vpmullq(ctx, &expr0_0, expr1_0)?;
|
||||
@@ -3273,7 +3336,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
} = &pattern6_0
|
||||
{
|
||||
if let &Opcode::Iabs = &pattern7_0 {
|
||||
// Rule at src/isa/x64/lower.isle line 1141.
|
||||
// Rule at src/isa/x64/lower.isle line 1192.
|
||||
let expr0_0 = C::put_in_reg_mem(ctx, pattern7_1);
|
||||
let expr1_0 = constructor_vpabsq(ctx, &expr0_0)?;
|
||||
let expr2_0 = C::value_reg(ctx, expr1_0);
|
||||
@@ -3296,7 +3359,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::AvgRound => {
|
||||
let (pattern9_0, pattern9_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern7_1);
|
||||
// Rule at src/isa/x64/lower.isle line 819.
|
||||
// Rule at src/isa/x64/lower.isle line 870.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern9_0);
|
||||
let expr1_0 = C::put_in_reg_mem(ctx, pattern9_1);
|
||||
let expr2_0 = constructor_pavgb(ctx, expr0_0, &expr1_0)?;
|
||||
@@ -3380,7 +3443,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::AvgRound => {
|
||||
let (pattern9_0, pattern9_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern7_1);
|
||||
// Rule at src/isa/x64/lower.isle line 823.
|
||||
// Rule at src/isa/x64/lower.isle line 874.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern9_0);
|
||||
let expr1_0 = C::put_in_reg_mem(ctx, pattern9_1);
|
||||
let expr2_0 = constructor_pavgw(ctx, expr0_0, &expr1_0)?;
|
||||
@@ -3493,7 +3556,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
if pattern23_0 == 8 {
|
||||
if pattern23_1 == 16
|
||||
{
|
||||
// Rule at src/isa/x64/lower.isle line 999.
|
||||
// Rule at src/isa/x64/lower.isle line 1050.
|
||||
let expr0_0 = C::put_in_reg_mem(ctx, pattern12_1);
|
||||
let expr1_0 = constructor_pmovsxbw(ctx, &expr0_0)?;
|
||||
let expr2_0 = C::put_in_reg_mem(ctx, pattern20_1);
|
||||
@@ -3551,7 +3614,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
if pattern23_0 == 8 {
|
||||
if pattern23_1 == 16
|
||||
{
|
||||
// Rule at src/isa/x64/lower.isle line 959.
|
||||
// Rule at src/isa/x64/lower.isle line 1010.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern12_1);
|
||||
let expr1_0 = RegMem::Reg {
|
||||
reg: expr0_0,
|
||||
@@ -3627,7 +3690,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
if pattern23_0 == 8 {
|
||||
if pattern23_1 == 16
|
||||
{
|
||||
// Rule at src/isa/x64/lower.isle line 1075.
|
||||
// Rule at src/isa/x64/lower.isle line 1126.
|
||||
let expr0_0 = C::put_in_reg_mem(ctx, pattern12_1);
|
||||
let expr1_0 = constructor_pmovzxbw(ctx, &expr0_0)?;
|
||||
let expr2_0 = C::put_in_reg_mem(ctx, pattern20_1);
|
||||
@@ -3685,7 +3748,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
if pattern23_0 == 8 {
|
||||
if pattern23_1 == 16
|
||||
{
|
||||
// Rule at src/isa/x64/lower.isle line 1035.
|
||||
// Rule at src/isa/x64/lower.isle line 1086.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern12_1);
|
||||
let expr1_0 = RegMem::Reg {
|
||||
reg: expr0_0,
|
||||
@@ -3730,7 +3793,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
}
|
||||
}
|
||||
}
|
||||
// Rule at src/isa/x64/lower.isle line 903.
|
||||
// Rule at src/isa/x64/lower.isle line 954.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern9_0);
|
||||
let expr1_0 = C::put_in_reg_mem(ctx, pattern9_1);
|
||||
let expr2_0 = constructor_pmullw(ctx, expr0_0, &expr1_0)?;
|
||||
@@ -3817,7 +3880,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
if pattern23_0 == 16 {
|
||||
if pattern23_1 == 8
|
||||
{
|
||||
// Rule at src/isa/x64/lower.isle line 1009.
|
||||
// Rule at src/isa/x64/lower.isle line 1060.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern12_1);
|
||||
let expr1_0 = C::put_in_reg(ctx, pattern20_1);
|
||||
let expr2_0 = RegMem::Reg {
|
||||
@@ -3881,7 +3944,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
if pattern23_0 == 16 {
|
||||
if pattern23_1 == 8
|
||||
{
|
||||
// Rule at src/isa/x64/lower.isle line 973.
|
||||
// Rule at src/isa/x64/lower.isle line 1024.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern12_1);
|
||||
let expr1_0 = C::put_in_reg(ctx, pattern20_1);
|
||||
let expr2_0 = RegMem::Reg {
|
||||
@@ -3945,7 +4008,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
if pattern23_0 == 16 {
|
||||
if pattern23_1 == 8
|
||||
{
|
||||
// Rule at src/isa/x64/lower.isle line 1085.
|
||||
// Rule at src/isa/x64/lower.isle line 1136.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern12_1);
|
||||
let expr1_0 = C::put_in_reg(ctx, pattern20_1);
|
||||
let expr2_0 = RegMem::Reg {
|
||||
@@ -4009,7 +4072,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
if pattern23_0 == 16 {
|
||||
if pattern23_1 == 8
|
||||
{
|
||||
// Rule at src/isa/x64/lower.isle line 1049.
|
||||
// Rule at src/isa/x64/lower.isle line 1100.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern12_1);
|
||||
let expr1_0 = C::put_in_reg(ctx, pattern20_1);
|
||||
let expr2_0 = RegMem::Reg {
|
||||
@@ -4042,7 +4105,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
}
|
||||
}
|
||||
}
|
||||
// Rule at src/isa/x64/lower.isle line 906.
|
||||
// Rule at src/isa/x64/lower.isle line 957.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern9_0);
|
||||
let expr1_0 = C::put_in_reg_mem(ctx, pattern9_1);
|
||||
let expr2_0 = constructor_pmulld(ctx, expr0_0, &expr1_0)?;
|
||||
@@ -4129,7 +4192,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
if pattern23_0 == 32 {
|
||||
if pattern23_1 == 4
|
||||
{
|
||||
// Rule at src/isa/x64/lower.isle line 1021.
|
||||
// Rule at src/isa/x64/lower.isle line 1072.
|
||||
let expr0_0 = C::put_in_reg_mem(ctx, pattern12_1);
|
||||
let expr1_0: u8 = 80;
|
||||
let expr2_0 = OperandSize::Size32;
|
||||
@@ -4191,7 +4254,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
if pattern23_0 == 32 {
|
||||
if pattern23_1 == 4
|
||||
{
|
||||
// Rule at src/isa/x64/lower.isle line 985.
|
||||
// Rule at src/isa/x64/lower.isle line 1036.
|
||||
let expr0_0 = C::put_in_reg_mem(ctx, pattern12_1);
|
||||
let expr1_0: u8 = 250;
|
||||
let expr2_0 = OperandSize::Size32;
|
||||
@@ -4253,7 +4316,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
if pattern23_0 == 32 {
|
||||
if pattern23_1 == 4
|
||||
{
|
||||
// Rule at src/isa/x64/lower.isle line 1097.
|
||||
// Rule at src/isa/x64/lower.isle line 1148.
|
||||
let expr0_0 = C::put_in_reg_mem(ctx, pattern12_1);
|
||||
let expr1_0: u8 = 80;
|
||||
let expr2_0 = OperandSize::Size32;
|
||||
@@ -4315,7 +4378,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
if pattern23_0 == 32 {
|
||||
if pattern23_1 == 4
|
||||
{
|
||||
// Rule at src/isa/x64/lower.isle line 1061.
|
||||
// Rule at src/isa/x64/lower.isle line 1112.
|
||||
let expr0_0 = C::put_in_reg_mem(ctx, pattern12_1);
|
||||
let expr1_0: u8 = 250;
|
||||
let expr2_0 = OperandSize::Size32;
|
||||
@@ -4346,7 +4409,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
}
|
||||
}
|
||||
}
|
||||
// Rule at src/isa/x64/lower.isle line 937.
|
||||
// Rule at src/isa/x64/lower.isle line 988.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern9_0);
|
||||
let expr1_0 = C::put_in_reg(ctx, pattern9_1);
|
||||
let expr2_0: u32 = 32;
|
||||
@@ -4424,7 +4487,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Bitselect => {
|
||||
let (pattern7_0, pattern7_1, pattern7_2) =
|
||||
C::unpack_value_array_3(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 1198.
|
||||
// Rule at src/isa/x64/lower.isle line 1249.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg(ctx, pattern7_1);
|
||||
let expr2_0 = RegMem::Reg { reg: expr0_0 };
|
||||
@@ -4440,7 +4503,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Vselect => {
|
||||
let (pattern7_0, pattern7_1, pattern7_2) =
|
||||
C::unpack_value_array_3(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 1212.
|
||||
// Rule at src/isa/x64/lower.isle line 1263.
|
||||
let expr0_0 = C::put_in_reg_mem(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg_mem(ctx, pattern7_1);
|
||||
let expr2_0 = C::put_in_reg(ctx, pattern7_2);
|
||||
@@ -4458,7 +4521,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
arg: pattern5_1,
|
||||
} => {
|
||||
if let &Opcode::Bnot = &pattern5_0 {
|
||||
// Rule at src/isa/x64/lower.isle line 1193.
|
||||
// Rule at src/isa/x64/lower.isle line 1244.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern5_1);
|
||||
let expr1_0 = constructor_vector_all_ones(ctx, pattern2_0)?;
|
||||
let expr2_0 = RegMem::Reg { reg: expr1_0 };
|
||||
@@ -4585,7 +4648,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
if let Some(pattern8_0) = C::simm32_from_value(ctx, pattern7_0) {
|
||||
// Rule at src/isa/x64/lower.isle line 843.
|
||||
// Rule at src/isa/x64/lower.isle line 894.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_1);
|
||||
let expr1_0 =
|
||||
constructor_mul(ctx, pattern3_0, expr0_0, &pattern8_0)?;
|
||||
@@ -4593,7 +4656,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
return Some(expr2_0);
|
||||
}
|
||||
if let Some(pattern8_0) = C::sinkable_load(ctx, pattern7_0) {
|
||||
// Rule at src/isa/x64/lower.isle line 855.
|
||||
// Rule at src/isa/x64/lower.isle line 906.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_1);
|
||||
let expr1_0 = C::sink_load(ctx, &pattern8_0);
|
||||
let expr2_0 = constructor_mul(ctx, pattern3_0, expr0_0, &expr1_0)?;
|
||||
@@ -4601,7 +4664,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
return Some(expr3_0);
|
||||
}
|
||||
if let Some(pattern8_0) = C::simm32_from_value(ctx, pattern7_1) {
|
||||
// Rule at src/isa/x64/lower.isle line 839.
|
||||
// Rule at src/isa/x64/lower.isle line 890.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 =
|
||||
constructor_mul(ctx, pattern3_0, expr0_0, &pattern8_0)?;
|
||||
@@ -4609,14 +4672,14 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
return Some(expr2_0);
|
||||
}
|
||||
if let Some(pattern8_0) = C::sinkable_load(ctx, pattern7_1) {
|
||||
// Rule at src/isa/x64/lower.isle line 849.
|
||||
// Rule at src/isa/x64/lower.isle line 900.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::sink_load(ctx, &pattern8_0);
|
||||
let expr2_0 = constructor_mul(ctx, pattern3_0, expr0_0, &expr1_0)?;
|
||||
let expr3_0 = C::value_reg(ctx, expr2_0);
|
||||
return Some(expr3_0);
|
||||
}
|
||||
// Rule at src/isa/x64/lower.isle line 832.
|
||||
// Rule at src/isa/x64/lower.isle line 883.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 = C::put_in_reg(ctx, pattern7_1);
|
||||
let expr2_0 = RegMemImm::Reg { reg: expr1_0 };
|
||||
@@ -4826,7 +4889,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Ushr => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 639.
|
||||
// Rule at src/isa/x64/lower.isle line 635.
|
||||
let expr0_0 = ExtendKind::Zero;
|
||||
let expr1_0 =
|
||||
constructor_extend_to_reg(ctx, pattern7_0, pattern3_0, &expr0_0)?;
|
||||
@@ -4838,7 +4901,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Sshr => {
|
||||
let (pattern7_0, pattern7_1) =
|
||||
C::unpack_value_array_2(ctx, &pattern5_1);
|
||||
// Rule at src/isa/x64/lower.isle line 678.
|
||||
// Rule at src/isa/x64/lower.isle line 729.
|
||||
let expr0_0 = ExtendKind::Sign;
|
||||
let expr1_0 =
|
||||
constructor_extend_to_reg(ctx, pattern7_0, pattern3_0, &expr0_0)?;
|
||||
@@ -4855,7 +4918,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
arg: pattern5_1,
|
||||
} => {
|
||||
if let &Opcode::Bnot = &pattern5_0 {
|
||||
// Rule at src/isa/x64/lower.isle line 1172.
|
||||
// Rule at src/isa/x64/lower.isle line 1223.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern5_1);
|
||||
let expr1_0 = constructor_not(ctx, pattern3_0, expr0_0)?;
|
||||
let expr2_0 = C::value_reg(ctx, expr1_0);
|
||||
@@ -4899,7 +4962,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
{
|
||||
if let &Opcode::Iconst = &pattern10_0 {
|
||||
let pattern12_0 = C::u64_from_imm64(ctx, pattern10_1);
|
||||
// Rule at src/isa/x64/lower.isle line 801.
|
||||
// Rule at src/isa/x64/lower.isle line 852.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 =
|
||||
C::const_to_type_masked_imm8(ctx, pattern12_0, pattern3_0);
|
||||
@@ -4910,7 +4973,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
}
|
||||
}
|
||||
}
|
||||
// Rule at src/isa/x64/lower.isle line 795.
|
||||
// Rule at src/isa/x64/lower.isle line 846.
|
||||
let expr0_0 = constructor_lo_reg(ctx, pattern7_1)?;
|
||||
let expr1_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr2_0 = Imm8Reg::Reg { reg: expr0_0 };
|
||||
@@ -4938,7 +5001,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
{
|
||||
if let &Opcode::Iconst = &pattern10_0 {
|
||||
let pattern12_0 = C::u64_from_imm64(ctx, pattern10_1);
|
||||
// Rule at src/isa/x64/lower.isle line 786.
|
||||
// Rule at src/isa/x64/lower.isle line 837.
|
||||
let expr0_0 = C::put_in_reg(ctx, pattern7_0);
|
||||
let expr1_0 =
|
||||
C::const_to_type_masked_imm8(ctx, pattern12_0, pattern3_0);
|
||||
@@ -4949,7 +5012,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
}
|
||||
}
|
||||
}
|
||||
// Rule at src/isa/x64/lower.isle line 782.
|
||||
// Rule at src/isa/x64/lower.isle line 833.
|
||||
let expr0_0: Type = I32;
|
||||
let expr1_0 = ExtendKind::Zero;
|
||||
let expr2_0 = constructor_extend_to_reg(ctx, pattern7_1, expr0_0, &expr1_0)?;
|
||||
@@ -5123,12 +5186,12 @@ pub fn constructor_ishl_i8x16_mask<C: Context>(
|
||||
let pattern0_0 = arg0;
|
||||
match pattern0_0 {
|
||||
&RegMemImm::Imm { simm32: pattern1_0 } => {
|
||||
// Rule at src/isa/x64/lower.isle line 598.
|
||||
// Rule at src/isa/x64/lower.isle line 600.
|
||||
let expr0_0 = C::ishl_i8x16_mask_for_const(ctx, pattern1_0);
|
||||
return Some(expr0_0);
|
||||
}
|
||||
&RegMemImm::Reg { reg: pattern1_0 } => {
|
||||
// Rule at src/isa/x64/lower.isle line 605.
|
||||
// Rule at src/isa/x64/lower.isle line 609.
|
||||
let expr0_0 = C::ishl_i8x16_mask_table(ctx);
|
||||
let expr1_0 = constructor_lea(ctx, &expr0_0)?;
|
||||
let expr2_0: Type = I64;
|
||||
@@ -5144,7 +5207,7 @@ pub fn constructor_ishl_i8x16_mask<C: Context>(
|
||||
&RegMemImm::Mem {
|
||||
addr: ref pattern1_0,
|
||||
} => {
|
||||
// Rule at src/isa/x64/lower.isle line 613.
|
||||
// Rule at src/isa/x64/lower.isle line 617.
|
||||
let expr0_0: Type = I64;
|
||||
let expr1_0 = ExtKind::None;
|
||||
let expr2_0 = constructor_x64_load(ctx, expr0_0, &pattern1_0, &expr1_0)?;
|
||||
@@ -5165,7 +5228,7 @@ pub fn constructor_shr_i128<C: Context>(
|
||||
) -> Option<ValueRegs> {
|
||||
let pattern0_0 = arg0;
|
||||
let pattern1_0 = arg1;
|
||||
// Rule at src/isa/x64/lower.isle line 646.
|
||||
// Rule at src/isa/x64/lower.isle line 642.
|
||||
let expr0_0: usize = 0;
|
||||
let expr1_0 = C::value_regs_get(ctx, pattern0_0, expr0_0);
|
||||
let expr2_0: usize = 1;
|
||||
@@ -5219,6 +5282,48 @@ pub fn constructor_shr_i128<C: Context>(
|
||||
return Some(expr49_0);
|
||||
}
|
||||
|
||||
// Generated as internal constructor for term ushr_i8x16_mask.
|
||||
pub fn constructor_ushr_i8x16_mask<C: Context>(
|
||||
ctx: &mut C,
|
||||
arg0: &RegMemImm,
|
||||
) -> Option<SyntheticAmode> {
|
||||
let pattern0_0 = arg0;
|
||||
match pattern0_0 {
|
||||
&RegMemImm::Imm { simm32: pattern1_0 } => {
|
||||
// Rule at src/isa/x64/lower.isle line 694.
|
||||
let expr0_0 = C::ushr_i8x16_mask_for_const(ctx, pattern1_0);
|
||||
return Some(expr0_0);
|
||||
}
|
||||
&RegMemImm::Reg { reg: pattern1_0 } => {
|
||||
// Rule at src/isa/x64/lower.isle line 703.
|
||||
let expr0_0 = C::ushr_i8x16_mask_table(ctx);
|
||||
let expr1_0 = constructor_lea(ctx, &expr0_0)?;
|
||||
let expr2_0: Type = I64;
|
||||
let expr3_0: u8 = 4;
|
||||
let expr4_0 = Imm8Reg::Imm8 { imm: expr3_0 };
|
||||
let expr5_0 = constructor_shl(ctx, expr2_0, pattern1_0, &expr4_0)?;
|
||||
let expr6_0: u32 = 0;
|
||||
let expr7_0: u8 = 0;
|
||||
let expr8_0 = C::amode_imm_reg_reg_shift(ctx, expr6_0, expr1_0, expr5_0, expr7_0);
|
||||
let expr9_0 = C::amode_to_synthetic_amode(ctx, &expr8_0);
|
||||
return Some(expr9_0);
|
||||
}
|
||||
&RegMemImm::Mem {
|
||||
addr: ref pattern1_0,
|
||||
} => {
|
||||
// Rule at src/isa/x64/lower.isle line 711.
|
||||
let expr0_0: Type = I64;
|
||||
let expr1_0 = ExtKind::None;
|
||||
let expr2_0 = constructor_x64_load(ctx, expr0_0, &pattern1_0, &expr1_0)?;
|
||||
let expr3_0 = RegMemImm::Reg { reg: expr2_0 };
|
||||
let expr4_0 = constructor_ushr_i8x16_mask(ctx, &expr3_0)?;
|
||||
return Some(expr4_0);
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
return None;
|
||||
}
|
||||
|
||||
// Generated as internal constructor for term sar_i128.
|
||||
pub fn constructor_sar_i128<C: Context>(
|
||||
ctx: &mut C,
|
||||
@@ -5227,7 +5332,7 @@ pub fn constructor_sar_i128<C: Context>(
|
||||
) -> Option<ValueRegs> {
|
||||
let pattern0_0 = arg0;
|
||||
let pattern1_0 = arg1;
|
||||
// Rule at src/isa/x64/lower.isle line 685.
|
||||
// Rule at src/isa/x64/lower.isle line 736.
|
||||
let expr0_0: usize = 0;
|
||||
let expr1_0 = C::value_regs_get(ctx, pattern0_0, expr0_0);
|
||||
let expr2_0: usize = 1;
|
||||
@@ -5292,14 +5397,14 @@ pub fn constructor_sshr_i8x16_bigger_shift<C: Context>(
|
||||
let pattern1_0 = arg1;
|
||||
match pattern1_0 {
|
||||
&RegMemImm::Imm { simm32: pattern2_0 } => {
|
||||
// Rule at src/isa/x64/lower.isle line 744.
|
||||
// Rule at src/isa/x64/lower.isle line 795.
|
||||
let expr0_0: u32 = 8;
|
||||
let expr1_0 = C::u32_add(ctx, pattern2_0, expr0_0);
|
||||
let expr2_0 = RegMemImm::Imm { simm32: expr1_0 };
|
||||
return Some(expr2_0);
|
||||
}
|
||||
&RegMemImm::Reg { reg: pattern2_0 } => {
|
||||
// Rule at src/isa/x64/lower.isle line 746.
|
||||
// Rule at src/isa/x64/lower.isle line 797.
|
||||
let expr0_0: u32 = 8;
|
||||
let expr1_0 = RegMemImm::Imm { simm32: expr0_0 };
|
||||
let expr2_0 = constructor_add(ctx, pattern0_0, pattern2_0, &expr1_0)?;
|
||||
@@ -5310,7 +5415,7 @@ pub fn constructor_sshr_i8x16_bigger_shift<C: Context>(
|
||||
&RegMemImm::Mem {
|
||||
addr: ref pattern2_0,
|
||||
} => {
|
||||
// Rule at src/isa/x64/lower.isle line 748.
|
||||
// Rule at src/isa/x64/lower.isle line 799.
|
||||
let expr0_0: u64 = 8;
|
||||
let expr1_0 = constructor_imm(ctx, pattern0_0, expr0_0)?;
|
||||
let expr2_0 = constructor_add(ctx, pattern0_0, expr1_0, pattern1_0)?;
|
||||
@@ -5334,21 +5439,21 @@ pub fn constructor_sse_and_not<C: Context>(
|
||||
if pattern0_0 == F32X4 {
|
||||
let pattern2_0 = arg1;
|
||||
let pattern3_0 = arg2;
|
||||
// Rule at src/isa/x64/lower.isle line 1113.
|
||||
// Rule at src/isa/x64/lower.isle line 1164.
|
||||
let expr0_0 = constructor_andnps(ctx, pattern2_0, pattern3_0)?;
|
||||
return Some(expr0_0);
|
||||
}
|
||||
if pattern0_0 == F64X2 {
|
||||
let pattern2_0 = arg1;
|
||||
let pattern3_0 = arg2;
|
||||
// Rule at src/isa/x64/lower.isle line 1114.
|
||||
// Rule at src/isa/x64/lower.isle line 1165.
|
||||
let expr0_0 = constructor_andnpd(ctx, pattern2_0, pattern3_0)?;
|
||||
return Some(expr0_0);
|
||||
}
|
||||
if let Some((pattern1_0, pattern1_1)) = C::multi_lane(ctx, pattern0_0) {
|
||||
let pattern2_0 = arg1;
|
||||
let pattern3_0 = arg2;
|
||||
// Rule at src/isa/x64/lower.isle line 1115.
|
||||
// Rule at src/isa/x64/lower.isle line 1166.
|
||||
let expr0_0 = constructor_pandn(ctx, pattern2_0, pattern3_0)?;
|
||||
return Some(expr0_0);
|
||||
}
|
||||
@@ -5358,7 +5463,7 @@ pub fn constructor_sse_and_not<C: Context>(
|
||||
// Generated as internal constructor for term i128_not.
|
||||
pub fn constructor_i128_not<C: Context>(ctx: &mut C, arg0: Value) -> Option<ValueRegs> {
|
||||
let pattern0_0 = arg0;
|
||||
// Rule at src/isa/x64/lower.isle line 1178.
|
||||
// Rule at src/isa/x64/lower.isle line 1229.
|
||||
let expr0_0 = C::put_in_regs(ctx, pattern0_0);
|
||||
let expr1_0: usize = 0;
|
||||
let expr2_0 = C::value_regs_get(ctx, expr0_0, expr1_0);
|
||||
@@ -5385,7 +5490,7 @@ pub fn constructor_vec_insert_lane<C: Context>(
|
||||
let pattern2_0 = arg1;
|
||||
let pattern3_0 = arg2;
|
||||
let pattern4_0 = arg3;
|
||||
// Rule at src/isa/x64/lower.isle line 1232.
|
||||
// Rule at src/isa/x64/lower.isle line 1283.
|
||||
let expr0_0 = constructor_pinsrb(ctx, pattern2_0, pattern3_0, pattern4_0)?;
|
||||
return Some(expr0_0);
|
||||
}
|
||||
@@ -5393,7 +5498,7 @@ pub fn constructor_vec_insert_lane<C: Context>(
|
||||
let pattern2_0 = arg1;
|
||||
let pattern3_0 = arg2;
|
||||
let pattern4_0 = arg3;
|
||||
// Rule at src/isa/x64/lower.isle line 1235.
|
||||
// Rule at src/isa/x64/lower.isle line 1286.
|
||||
let expr0_0 = constructor_pinsrw(ctx, pattern2_0, pattern3_0, pattern4_0)?;
|
||||
return Some(expr0_0);
|
||||
}
|
||||
@@ -5401,7 +5506,7 @@ pub fn constructor_vec_insert_lane<C: Context>(
|
||||
let pattern2_0 = arg1;
|
||||
let pattern3_0 = arg2;
|
||||
let pattern4_0 = arg3;
|
||||
// Rule at src/isa/x64/lower.isle line 1238.
|
||||
// Rule at src/isa/x64/lower.isle line 1289.
|
||||
let expr0_0 = OperandSize::Size32;
|
||||
let expr1_0 = constructor_pinsrd(ctx, pattern2_0, pattern3_0, pattern4_0, &expr0_0)?;
|
||||
return Some(expr1_0);
|
||||
@@ -5410,7 +5515,7 @@ pub fn constructor_vec_insert_lane<C: Context>(
|
||||
let pattern2_0 = arg1;
|
||||
let pattern3_0 = arg2;
|
||||
let pattern4_0 = arg3;
|
||||
// Rule at src/isa/x64/lower.isle line 1241.
|
||||
// Rule at src/isa/x64/lower.isle line 1292.
|
||||
let expr0_0 = OperandSize::Size64;
|
||||
let expr1_0 = constructor_pinsrd(ctx, pattern2_0, pattern3_0, pattern4_0, &expr0_0)?;
|
||||
return Some(expr1_0);
|
||||
@@ -5419,7 +5524,7 @@ pub fn constructor_vec_insert_lane<C: Context>(
|
||||
let pattern2_0 = arg1;
|
||||
let pattern3_0 = arg2;
|
||||
let pattern4_0 = arg3;
|
||||
// Rule at src/isa/x64/lower.isle line 1244.
|
||||
// Rule at src/isa/x64/lower.isle line 1295.
|
||||
let expr0_0 = C::sse_insertps_lane_imm(ctx, pattern4_0);
|
||||
let expr1_0 = constructor_insertps(ctx, pattern2_0, pattern3_0, expr0_0)?;
|
||||
return Some(expr1_0);
|
||||
@@ -5430,7 +5535,7 @@ pub fn constructor_vec_insert_lane<C: Context>(
|
||||
if let &RegMem::Reg { reg: pattern4_0 } = pattern3_0 {
|
||||
let pattern5_0 = arg3;
|
||||
if pattern5_0 == 0 {
|
||||
// Rule at src/isa/x64/lower.isle line 1265.
|
||||
// Rule at src/isa/x64/lower.isle line 1316.
|
||||
let expr0_0 = RegMem::Reg { reg: pattern4_0 };
|
||||
let expr1_0 = constructor_movsd(ctx, pattern2_0, &expr0_0)?;
|
||||
return Some(expr1_0);
|
||||
@@ -5438,7 +5543,7 @@ pub fn constructor_vec_insert_lane<C: Context>(
|
||||
}
|
||||
let pattern4_0 = arg3;
|
||||
if pattern4_0 == 0 {
|
||||
// Rule at src/isa/x64/lower.isle line 1266.
|
||||
// Rule at src/isa/x64/lower.isle line 1317.
|
||||
let expr0_0 = SseOpcode::Movsd;
|
||||
let expr1_0 = constructor_xmm_unary_rm_r(ctx, &expr0_0, pattern3_0)?;
|
||||
let expr2_0 = RegMem::Reg { reg: expr1_0 };
|
||||
@@ -5446,7 +5551,7 @@ pub fn constructor_vec_insert_lane<C: Context>(
|
||||
return Some(expr3_0);
|
||||
}
|
||||
if pattern4_0 == 1 {
|
||||
// Rule at src/isa/x64/lower.isle line 1274.
|
||||
// Rule at src/isa/x64/lower.isle line 1325.
|
||||
let expr0_0 = constructor_movlhps(ctx, pattern2_0, pattern3_0)?;
|
||||
return Some(expr0_0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user