|
|
|
@@ -4577,7 +4577,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
} = &pattern5_0
|
|
|
|
} = &pattern5_0
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if let &Opcode::Popcnt = pattern6_0 {
|
|
|
|
if let &Opcode::Popcnt = pattern6_0 {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1729.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1730.
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr1_0 = C::put_in_regs(ctx, pattern6_1);
|
|
|
|
let expr1_0 = C::put_in_regs(ctx, pattern6_1);
|
|
|
|
let expr2_0: usize = 0;
|
|
|
|
let expr2_0: usize = 0;
|
|
|
|
@@ -4612,7 +4612,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
} = &pattern6_0
|
|
|
|
} = &pattern6_0
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if let &Opcode::Popcnt = pattern7_0 {
|
|
|
|
if let &Opcode::Popcnt = pattern7_0 {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1821.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1822.
|
|
|
|
let expr0_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_vpopcntb(ctx, &expr0_0)?;
|
|
|
|
let expr1_0 = constructor_vpopcntb(ctx, &expr0_0)?;
|
|
|
|
let expr2_0 = constructor_output_xmm(ctx, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_output_xmm(ctx, expr1_0)?;
|
|
|
|
@@ -4631,7 +4631,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
} = &pattern5_0
|
|
|
|
} = &pattern5_0
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if let &Opcode::Clz = pattern6_0 {
|
|
|
|
if let &Opcode::Clz = pattern6_0 {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1637.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1638.
|
|
|
|
let expr0_0 = constructor_put_in_gpr(ctx, pattern6_1)?;
|
|
|
|
let expr0_0 = constructor_put_in_gpr(ctx, pattern6_1)?;
|
|
|
|
let expr1_0 = constructor_lzcnt(ctx, pattern3_0, expr0_0)?;
|
|
|
|
let expr1_0 = constructor_lzcnt(ctx, pattern3_0, expr0_0)?;
|
|
|
|
let expr2_0 = constructor_output_gpr(ctx, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_output_gpr(ctx, expr1_0)?;
|
|
|
|
@@ -4647,7 +4647,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
} = &pattern5_0
|
|
|
|
} = &pattern5_0
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if let &Opcode::Ctz = pattern6_0 {
|
|
|
|
if let &Opcode::Ctz = pattern6_0 {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1679.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1680.
|
|
|
|
let expr0_0 = constructor_put_in_gpr(ctx, pattern6_1)?;
|
|
|
|
let expr0_0 = constructor_put_in_gpr(ctx, pattern6_1)?;
|
|
|
|
let expr1_0 = constructor_tzcnt(ctx, pattern3_0, expr0_0)?;
|
|
|
|
let expr1_0 = constructor_tzcnt(ctx, pattern3_0, expr0_0)?;
|
|
|
|
let expr2_0 = constructor_output_gpr(ctx, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_output_gpr(ctx, expr1_0)?;
|
|
|
|
@@ -4663,7 +4663,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
} = &pattern5_0
|
|
|
|
} = &pattern5_0
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if let &Opcode::Popcnt = pattern6_0 {
|
|
|
|
if let &Opcode::Popcnt = pattern6_0 {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1715.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1716.
|
|
|
|
let expr0_0 = constructor_put_in_gpr(ctx, pattern6_1)?;
|
|
|
|
let expr0_0 = constructor_put_in_gpr(ctx, pattern6_1)?;
|
|
|
|
let expr1_0 = constructor_x64_popcnt(ctx, pattern3_0, expr0_0)?;
|
|
|
|
let expr1_0 = constructor_x64_popcnt(ctx, pattern3_0, expr0_0)?;
|
|
|
|
let expr2_0 = constructor_output_gpr(ctx, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_output_gpr(ctx, expr1_0)?;
|
|
|
|
@@ -4681,7 +4681,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
} = &pattern5_0
|
|
|
|
} = &pattern5_0
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if let &Opcode::Popcnt = pattern6_0 {
|
|
|
|
if let &Opcode::Popcnt = pattern6_0 {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1722.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1723.
|
|
|
|
let expr0_0: Type = I32;
|
|
|
|
let expr0_0: Type = I32;
|
|
|
|
let expr1_0: Type = I32;
|
|
|
|
let expr1_0: Type = I32;
|
|
|
|
let expr2_0 = ExtendKind::Zero;
|
|
|
|
let expr2_0 = ExtendKind::Zero;
|
|
|
|
@@ -4702,7 +4702,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
opcode: ref pattern2_0,
|
|
|
|
opcode: ref pattern2_0,
|
|
|
|
} => {
|
|
|
|
} => {
|
|
|
|
if let &Opcode::Debugtrap = pattern2_0 {
|
|
|
|
if let &Opcode::Debugtrap = pattern2_0 {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2107.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2108.
|
|
|
|
let expr0_0 = constructor_hlt(ctx)?;
|
|
|
|
let expr0_0 = constructor_hlt(ctx)?;
|
|
|
|
let expr1_0 = constructor_side_effect(ctx, &expr0_0)?;
|
|
|
|
let expr1_0 = constructor_side_effect(ctx, &expr0_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -4813,14 +4813,12 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
let expr26_0 = constructor_reg_to_gpr_mem_imm(ctx, expr23_0)?;
|
|
|
|
let expr26_0 = constructor_reg_to_gpr_mem_imm(ctx, expr23_0)?;
|
|
|
|
let expr27_0 = constructor_x64_and(ctx, expr24_0, expr25_0, &expr26_0)?;
|
|
|
|
let expr27_0 = constructor_x64_and(ctx, expr24_0, expr25_0, &expr26_0)?;
|
|
|
|
let expr28_0 = C::gpr_to_reg(ctx, expr27_0);
|
|
|
|
let expr28_0 = C::gpr_to_reg(ctx, expr27_0);
|
|
|
|
let expr29_0: Type = I64;
|
|
|
|
let expr29_0 = OperandSize::Size64;
|
|
|
|
let expr30_0 = C::gpr_new(ctx, expr28_0);
|
|
|
|
let expr30_0: u32 = 1;
|
|
|
|
let expr31_0: u32 = 1;
|
|
|
|
let expr31_0 = RegMemImm::Imm { simm32: expr30_0 };
|
|
|
|
let expr32_0 = RegMemImm::Imm { simm32: expr31_0 };
|
|
|
|
let expr32_0 = C::gpr_mem_imm_new(ctx, &expr31_0);
|
|
|
|
let expr33_0 = C::gpr_mem_imm_new(ctx, &expr32_0);
|
|
|
|
let expr33_0 = C::gpr_new(ctx, expr28_0);
|
|
|
|
let expr34_0 = constructor_x64_and_with_flags_paired(
|
|
|
|
let expr34_0 = constructor_test(ctx, &expr29_0, &expr32_0, expr33_0)?;
|
|
|
|
ctx, expr29_0, expr30_0, &expr33_0,
|
|
|
|
|
|
|
|
)?;
|
|
|
|
|
|
|
|
let expr35_0 = CC::NZ;
|
|
|
|
let expr35_0 = CC::NZ;
|
|
|
|
let expr36_0 = constructor_setcc(ctx, &expr35_0)?;
|
|
|
|
let expr36_0 = constructor_setcc(ctx, &expr35_0)?;
|
|
|
|
let expr37_0 = constructor_with_flags(ctx, &expr34_0, &expr36_0)?;
|
|
|
|
let expr37_0 = constructor_with_flags(ctx, &expr34_0, &expr36_0)?;
|
|
|
|
@@ -4828,7 +4826,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr38_0);
|
|
|
|
return Some(expr38_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&IntCC::NotEqual => {
|
|
|
|
&IntCC::NotEqual => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1533.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1534.
|
|
|
|
let expr0_0 = C::put_in_regs(ctx, pattern4_0);
|
|
|
|
let expr0_0 = C::put_in_regs(ctx, pattern4_0);
|
|
|
|
let expr1_0: usize = 0;
|
|
|
|
let expr1_0: usize = 0;
|
|
|
|
let expr2_0 = constructor_value_regs_get_gpr(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_value_regs_get_gpr(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -4858,14 +4856,12 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
let expr26_0 = constructor_reg_to_gpr_mem_imm(ctx, expr23_0)?;
|
|
|
|
let expr26_0 = constructor_reg_to_gpr_mem_imm(ctx, expr23_0)?;
|
|
|
|
let expr27_0 = constructor_or(ctx, expr24_0, expr25_0, &expr26_0)?;
|
|
|
|
let expr27_0 = constructor_or(ctx, expr24_0, expr25_0, &expr26_0)?;
|
|
|
|
let expr28_0 = C::gpr_to_reg(ctx, expr27_0);
|
|
|
|
let expr28_0 = C::gpr_to_reg(ctx, expr27_0);
|
|
|
|
let expr29_0: Type = I64;
|
|
|
|
let expr29_0 = OperandSize::Size64;
|
|
|
|
let expr30_0 = C::gpr_new(ctx, expr28_0);
|
|
|
|
let expr30_0: u32 = 1;
|
|
|
|
let expr31_0: u32 = 1;
|
|
|
|
let expr31_0 = RegMemImm::Imm { simm32: expr30_0 };
|
|
|
|
let expr32_0 = RegMemImm::Imm { simm32: expr31_0 };
|
|
|
|
let expr32_0 = C::gpr_mem_imm_new(ctx, &expr31_0);
|
|
|
|
let expr33_0 = C::gpr_mem_imm_new(ctx, &expr32_0);
|
|
|
|
let expr33_0 = C::gpr_new(ctx, expr28_0);
|
|
|
|
let expr34_0 = constructor_x64_and_with_flags_paired(
|
|
|
|
let expr34_0 = constructor_test(ctx, &expr29_0, &expr32_0, expr33_0)?;
|
|
|
|
ctx, expr29_0, expr30_0, &expr33_0,
|
|
|
|
|
|
|
|
)?;
|
|
|
|
|
|
|
|
let expr35_0 = CC::NZ;
|
|
|
|
let expr35_0 = CC::NZ;
|
|
|
|
let expr36_0 = constructor_setcc(ctx, &expr35_0)?;
|
|
|
|
let expr36_0 = constructor_setcc(ctx, &expr35_0)?;
|
|
|
|
let expr37_0 = constructor_with_flags(ctx, &expr34_0, &expr36_0)?;
|
|
|
|
let expr37_0 = constructor_with_flags(ctx, &expr34_0, &expr36_0)?;
|
|
|
|
@@ -5038,7 +5034,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
&Opcode::IsNull => {
|
|
|
|
&Opcode::IsNull => {
|
|
|
|
let pattern4_0 = C::value_type(ctx, pattern2_1);
|
|
|
|
let pattern4_0 = C::value_type(ctx, pattern2_1);
|
|
|
|
if pattern4_0 == R64 {
|
|
|
|
if pattern4_0 == R64 {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1950.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1951.
|
|
|
|
let expr0_0 = OperandSize::Size64;
|
|
|
|
let expr0_0 = OperandSize::Size64;
|
|
|
|
let expr1_0: u32 = 0;
|
|
|
|
let expr1_0: u32 = 0;
|
|
|
|
let expr2_0 = constructor_put_in_gpr(ctx, pattern2_1)?;
|
|
|
|
let expr2_0 = constructor_put_in_gpr(ctx, pattern2_1)?;
|
|
|
|
@@ -5053,7 +5049,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
&Opcode::IsInvalid => {
|
|
|
|
&Opcode::IsInvalid => {
|
|
|
|
let pattern4_0 = C::value_type(ctx, pattern2_1);
|
|
|
|
let pattern4_0 = C::value_type(ctx, pattern2_1);
|
|
|
|
if pattern4_0 == R64 {
|
|
|
|
if pattern4_0 == R64 {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1958.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1959.
|
|
|
|
let expr0_0 = OperandSize::Size64;
|
|
|
|
let expr0_0 = OperandSize::Size64;
|
|
|
|
let expr1_0: u32 = 4294967295;
|
|
|
|
let expr1_0: u32 = 4294967295;
|
|
|
|
let expr2_0 = constructor_put_in_gpr(ctx, pattern2_1)?;
|
|
|
|
let expr2_0 = constructor_put_in_gpr(ctx, pattern2_1)?;
|
|
|
|
@@ -5184,7 +5180,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
} = &pattern4_0
|
|
|
|
} = &pattern4_0
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if let &Opcode::Bitrev = pattern5_0 {
|
|
|
|
if let &Opcode::Bitrev = pattern5_0 {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1872.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1873.
|
|
|
|
let expr0_0: Type = I32;
|
|
|
|
let expr0_0: Type = I32;
|
|
|
|
let expr1_0 = constructor_put_in_gpr(ctx, pattern5_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_gpr(ctx, pattern5_1)?;
|
|
|
|
let expr2_0 = constructor_do_bitrev8(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_do_bitrev8(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -5201,7 +5197,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
} = &pattern4_0
|
|
|
|
} = &pattern4_0
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if let &Opcode::Bitrev = pattern5_0 {
|
|
|
|
if let &Opcode::Bitrev = pattern5_0 {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1875.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1876.
|
|
|
|
let expr0_0: Type = I32;
|
|
|
|
let expr0_0: Type = I32;
|
|
|
|
let expr1_0 = constructor_put_in_gpr(ctx, pattern5_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_gpr(ctx, pattern5_1)?;
|
|
|
|
let expr2_0 = constructor_do_bitrev16(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_do_bitrev16(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -5218,7 +5214,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
} = &pattern4_0
|
|
|
|
} = &pattern4_0
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if let &Opcode::Bitrev = pattern5_0 {
|
|
|
|
if let &Opcode::Bitrev = pattern5_0 {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1878.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1879.
|
|
|
|
let expr0_0: Type = I32;
|
|
|
|
let expr0_0: Type = I32;
|
|
|
|
let expr1_0 = constructor_put_in_gpr(ctx, pattern5_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_gpr(ctx, pattern5_1)?;
|
|
|
|
let expr2_0 = constructor_do_bitrev32(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_do_bitrev32(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -5236,7 +5232,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
{
|
|
|
|
{
|
|
|
|
match pattern5_0 {
|
|
|
|
match pattern5_0 {
|
|
|
|
&Opcode::Bitrev => {
|
|
|
|
&Opcode::Bitrev => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1881.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1882.
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr1_0 = constructor_put_in_gpr(ctx, pattern5_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_gpr(ctx, pattern5_1)?;
|
|
|
|
let expr2_0 = constructor_do_bitrev64(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_do_bitrev64(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -5258,7 +5254,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
&Opcode::Iadd => {
|
|
|
|
&Opcode::Iadd => {
|
|
|
|
let (pattern14_0, pattern14_1) =
|
|
|
|
let (pattern14_0, pattern14_1) =
|
|
|
|
C::unpack_value_array_2(ctx, pattern12_1);
|
|
|
|
C::unpack_value_array_2(ctx, pattern12_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1997.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1998.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_output_value(ctx, pattern5_1)?;
|
|
|
|
constructor_output_value(ctx, pattern5_1)?;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
@@ -5266,7 +5262,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
&Opcode::Isub => {
|
|
|
|
&Opcode::Isub => {
|
|
|
|
let (pattern14_0, pattern14_1) =
|
|
|
|
let (pattern14_0, pattern14_1) =
|
|
|
|
C::unpack_value_array_2(ctx, pattern12_1);
|
|
|
|
C::unpack_value_array_2(ctx, pattern12_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2003.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2004.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_output_value(ctx, pattern5_1)?;
|
|
|
|
constructor_output_value(ctx, pattern5_1)?;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
@@ -5274,7 +5270,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
&Opcode::Imul => {
|
|
|
|
&Opcode::Imul => {
|
|
|
|
let (pattern14_0, pattern14_1) =
|
|
|
|
let (pattern14_0, pattern14_1) =
|
|
|
|
C::unpack_value_array_2(ctx, pattern12_1);
|
|
|
|
C::unpack_value_array_2(ctx, pattern12_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2006.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2007.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_output_value(ctx, pattern5_1)?;
|
|
|
|
constructor_output_value(ctx, pattern5_1)?;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
@@ -5282,7 +5278,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
&Opcode::IaddIfcout => {
|
|
|
|
&Opcode::IaddIfcout => {
|
|
|
|
let (pattern14_0, pattern14_1) =
|
|
|
|
let (pattern14_0, pattern14_1) =
|
|
|
|
C::unpack_value_array_2(ctx, pattern12_1);
|
|
|
|
C::unpack_value_array_2(ctx, pattern12_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2000.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2001.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_output_value(ctx, pattern5_1)?;
|
|
|
|
constructor_output_value(ctx, pattern5_1)?;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
@@ -5290,7 +5286,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
&Opcode::Band => {
|
|
|
|
&Opcode::Band => {
|
|
|
|
let (pattern14_0, pattern14_1) =
|
|
|
|
let (pattern14_0, pattern14_1) =
|
|
|
|
C::unpack_value_array_2(ctx, pattern12_1);
|
|
|
|
C::unpack_value_array_2(ctx, pattern12_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2009.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2010.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_output_value(ctx, pattern5_1)?;
|
|
|
|
constructor_output_value(ctx, pattern5_1)?;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
@@ -5298,7 +5294,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
&Opcode::Bor => {
|
|
|
|
&Opcode::Bor => {
|
|
|
|
let (pattern14_0, pattern14_1) =
|
|
|
|
let (pattern14_0, pattern14_1) =
|
|
|
|
C::unpack_value_array_2(ctx, pattern12_1);
|
|
|
|
C::unpack_value_array_2(ctx, pattern12_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2012.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2013.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_output_value(ctx, pattern5_1)?;
|
|
|
|
constructor_output_value(ctx, pattern5_1)?;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
@@ -5306,7 +5302,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
&Opcode::Bxor => {
|
|
|
|
&Opcode::Bxor => {
|
|
|
|
let (pattern14_0, pattern14_1) =
|
|
|
|
let (pattern14_0, pattern14_1) =
|
|
|
|
C::unpack_value_array_2(ctx, pattern12_1);
|
|
|
|
C::unpack_value_array_2(ctx, pattern12_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2015.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2016.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_output_value(ctx, pattern5_1)?;
|
|
|
|
constructor_output_value(ctx, pattern5_1)?;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
@@ -5314,7 +5310,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
&Opcode::Ishl => {
|
|
|
|
&Opcode::Ishl => {
|
|
|
|
let (pattern14_0, pattern14_1) =
|
|
|
|
let (pattern14_0, pattern14_1) =
|
|
|
|
C::unpack_value_array_2(ctx, pattern12_1);
|
|
|
|
C::unpack_value_array_2(ctx, pattern12_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2018.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2019.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_output_value(ctx, pattern5_1)?;
|
|
|
|
constructor_output_value(ctx, pattern5_1)?;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
@@ -5322,7 +5318,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
&Opcode::Ushr => {
|
|
|
|
&Opcode::Ushr => {
|
|
|
|
let (pattern14_0, pattern14_1) =
|
|
|
|
let (pattern14_0, pattern14_1) =
|
|
|
|
C::unpack_value_array_2(ctx, pattern12_1);
|
|
|
|
C::unpack_value_array_2(ctx, pattern12_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2021.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2022.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_output_value(ctx, pattern5_1)?;
|
|
|
|
constructor_output_value(ctx, pattern5_1)?;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
@@ -5337,7 +5333,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
offset: pattern12_3,
|
|
|
|
offset: pattern12_3,
|
|
|
|
} => {
|
|
|
|
} => {
|
|
|
|
if let &Opcode::Uload32 = pattern12_0 {
|
|
|
|
if let &Opcode::Uload32 = pattern12_0 {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2024.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2025.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_output_value(ctx, pattern5_1)?;
|
|
|
|
constructor_output_value(ctx, pattern5_1)?;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
@@ -5350,7 +5346,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
let pattern7_0 = C::value_type(ctx, pattern5_1);
|
|
|
|
let pattern7_0 = C::value_type(ctx, pattern5_1);
|
|
|
|
if let Some(pattern8_0) = C::fits_in_32(ctx, pattern7_0) {
|
|
|
|
if let Some(pattern8_0) = C::fits_in_32(ctx, pattern7_0) {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1979.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1980.
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr1_0 = ExtendKind::Zero;
|
|
|
|
let expr1_0 = ExtendKind::Zero;
|
|
|
|
let expr2_0 =
|
|
|
|
let expr2_0 =
|
|
|
|
@@ -5609,7 +5605,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Bitrev => {
|
|
|
|
&Opcode::Bitrev => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1884.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1885.
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr1_0 = C::put_in_regs(ctx, pattern5_1);
|
|
|
|
let expr1_0 = C::put_in_regs(ctx, pattern5_1);
|
|
|
|
let expr2_0: usize = 1;
|
|
|
|
let expr2_0: usize = 1;
|
|
|
|
@@ -5627,7 +5623,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr13_0);
|
|
|
|
return Some(expr13_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Clz => {
|
|
|
|
&Opcode::Clz => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1654.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1655.
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr1_0: Type = I64;
|
|
|
|
let expr1_0: Type = I64;
|
|
|
|
let expr2_0 = C::put_in_regs(ctx, pattern5_1);
|
|
|
|
let expr2_0 = C::put_in_regs(ctx, pattern5_1);
|
|
|
|
@@ -5664,7 +5660,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr31_0);
|
|
|
|
return Some(expr31_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Ctz => {
|
|
|
|
&Opcode::Ctz => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1696.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1697.
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr1_0: Type = I64;
|
|
|
|
let expr1_0: Type = I64;
|
|
|
|
let expr2_0 = C::put_in_regs(ctx, pattern5_1);
|
|
|
|
let expr2_0 = C::put_in_regs(ctx, pattern5_1);
|
|
|
|
@@ -5701,7 +5697,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr31_0);
|
|
|
|
return Some(expr31_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Popcnt => {
|
|
|
|
&Opcode::Popcnt => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1748.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1749.
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr1_0 = C::put_in_regs(ctx, pattern5_1);
|
|
|
|
let expr1_0 = C::put_in_regs(ctx, pattern5_1);
|
|
|
|
let expr2_0: usize = 0;
|
|
|
|
let expr2_0: usize = 0;
|
|
|
|
@@ -5724,7 +5720,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr18_0);
|
|
|
|
return Some(expr18_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Bint => {
|
|
|
|
&Opcode::Bint => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2099.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2100.
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr1_0 = constructor_put_in_gpr(ctx, pattern5_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_gpr(ctx, pattern5_1)?;
|
|
|
|
let expr2_0: u32 = 1;
|
|
|
|
let expr2_0: u32 = 1;
|
|
|
|
@@ -5742,7 +5738,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
&Opcode::Uextend => {
|
|
|
|
&Opcode::Uextend => {
|
|
|
|
let pattern7_0 = C::value_type(ctx, pattern5_1);
|
|
|
|
let pattern7_0 = C::value_type(ctx, pattern5_1);
|
|
|
|
if pattern7_0 == I64 {
|
|
|
|
if pattern7_0 == I64 {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1971.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1972.
|
|
|
|
let expr0_0 = C::put_in_reg(ctx, pattern5_1);
|
|
|
|
let expr0_0 = C::put_in_reg(ctx, pattern5_1);
|
|
|
|
let expr1_0: Type = I64;
|
|
|
|
let expr1_0: Type = I64;
|
|
|
|
let expr2_0: u64 = 0;
|
|
|
|
let expr2_0: u64 = 0;
|
|
|
|
@@ -5752,7 +5748,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr5_0);
|
|
|
|
return Some(expr5_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if let Some(pattern8_0) = C::fits_in_32(ctx, pattern7_0) {
|
|
|
|
if let Some(pattern8_0) = C::fits_in_32(ctx, pattern7_0) {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1975.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1976.
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr1_0 = ExtendKind::Zero;
|
|
|
|
let expr1_0 = ExtendKind::Zero;
|
|
|
|
let expr2_0 =
|
|
|
|
let expr2_0 =
|
|
|
|
@@ -5812,7 +5808,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
match pattern5_0 {
|
|
|
|
match pattern5_0 {
|
|
|
|
&Opcode::Fadd => {
|
|
|
|
&Opcode::Fadd => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2122.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2123.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_addss(ctx, expr0_0, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_addss(ctx, expr0_0, &expr1_0)?;
|
|
|
|
@@ -5821,7 +5817,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Fsub => {
|
|
|
|
&Opcode::Fsub => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2133.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2134.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_subss(ctx, expr0_0, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_subss(ctx, expr0_0, &expr1_0)?;
|
|
|
|
@@ -5830,7 +5826,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Fmul => {
|
|
|
|
&Opcode::Fmul => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2144.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2145.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_mulss(ctx, expr0_0, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_mulss(ctx, expr0_0, &expr1_0)?;
|
|
|
|
@@ -5839,7 +5835,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Fdiv => {
|
|
|
|
&Opcode::Fdiv => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2155.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2156.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_divss(ctx, expr0_0, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_divss(ctx, expr0_0, &expr1_0)?;
|
|
|
|
@@ -5848,7 +5844,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Fmin => {
|
|
|
|
&Opcode::Fmin => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2166.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2167.
|
|
|
|
let expr0_0: Type = F32;
|
|
|
|
let expr0_0: Type = F32;
|
|
|
|
let expr1_0: bool = true;
|
|
|
|
let expr1_0: bool = true;
|
|
|
|
let expr2_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr2_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
@@ -5860,7 +5856,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::FminPseudo => {
|
|
|
|
&Opcode::FminPseudo => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2335.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2336.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr2_0 = constructor_minss(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_minss(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -5869,7 +5865,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Fmax => {
|
|
|
|
&Opcode::Fmax => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2238.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2239.
|
|
|
|
let expr0_0: Type = F32;
|
|
|
|
let expr0_0: Type = F32;
|
|
|
|
let expr1_0: bool = false;
|
|
|
|
let expr1_0: bool = false;
|
|
|
|
let expr2_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr2_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
@@ -5881,7 +5877,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::FmaxPseudo => {
|
|
|
|
&Opcode::FmaxPseudo => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2346.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2347.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr2_0 = constructor_maxss(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_maxss(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -5902,7 +5898,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
match pattern5_0 {
|
|
|
|
match pattern5_0 {
|
|
|
|
&Opcode::Fadd => {
|
|
|
|
&Opcode::Fadd => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2124.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2125.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_addsd(ctx, expr0_0, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_addsd(ctx, expr0_0, &expr1_0)?;
|
|
|
|
@@ -5911,7 +5907,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Fsub => {
|
|
|
|
&Opcode::Fsub => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2135.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2136.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_subsd(ctx, expr0_0, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_subsd(ctx, expr0_0, &expr1_0)?;
|
|
|
|
@@ -5920,7 +5916,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Fmul => {
|
|
|
|
&Opcode::Fmul => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2146.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2147.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_mulsd(ctx, expr0_0, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_mulsd(ctx, expr0_0, &expr1_0)?;
|
|
|
|
@@ -5929,7 +5925,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Fdiv => {
|
|
|
|
&Opcode::Fdiv => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2157.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2158.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_divsd(ctx, expr0_0, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_divsd(ctx, expr0_0, &expr1_0)?;
|
|
|
|
@@ -5938,7 +5934,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Fmin => {
|
|
|
|
&Opcode::Fmin => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2168.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2169.
|
|
|
|
let expr0_0: Type = F64;
|
|
|
|
let expr0_0: Type = F64;
|
|
|
|
let expr1_0: bool = true;
|
|
|
|
let expr1_0: bool = true;
|
|
|
|
let expr2_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr2_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
@@ -5950,7 +5946,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::FminPseudo => {
|
|
|
|
&Opcode::FminPseudo => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2337.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2338.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr2_0 = constructor_minsd(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_minsd(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -5959,7 +5955,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Fmax => {
|
|
|
|
&Opcode::Fmax => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2240.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2241.
|
|
|
|
let expr0_0: Type = F64;
|
|
|
|
let expr0_0: Type = F64;
|
|
|
|
let expr1_0: bool = false;
|
|
|
|
let expr1_0: bool = false;
|
|
|
|
let expr2_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr2_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
@@ -5971,7 +5967,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::FmaxPseudo => {
|
|
|
|
&Opcode::FmaxPseudo => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2348.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2349.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr2_0 = constructor_maxsd(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_maxsd(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -6110,7 +6106,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr2_0);
|
|
|
|
return Some(expr2_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Popcnt => {
|
|
|
|
&Opcode::Popcnt => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1855.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1856.
|
|
|
|
let expr0_0 = C::popcount_4bit_table(ctx);
|
|
|
|
let expr0_0 = C::popcount_4bit_table(ctx);
|
|
|
|
let expr1_0: Type = I8X16;
|
|
|
|
let expr1_0: Type = I8X16;
|
|
|
|
let expr2_0 = C::popcount_low_mask(ctx);
|
|
|
|
let expr2_0 = C::popcount_low_mask(ctx);
|
|
|
|
@@ -6327,7 +6323,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::WideningPairwiseDotProductS => {
|
|
|
|
&Opcode::WideningPairwiseDotProductS => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2112.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2113.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_pmaddwd(ctx, expr0_0, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_pmaddwd(ctx, expr0_0, &expr1_0)?;
|
|
|
|
@@ -6466,7 +6462,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
match pattern5_0 {
|
|
|
|
match pattern5_0 {
|
|
|
|
&Opcode::Fadd => {
|
|
|
|
&Opcode::Fadd => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2126.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2127.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_addps(ctx, expr0_0, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_addps(ctx, expr0_0, &expr1_0)?;
|
|
|
|
@@ -6475,7 +6471,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Fsub => {
|
|
|
|
&Opcode::Fsub => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2137.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2138.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_subps(ctx, expr0_0, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_subps(ctx, expr0_0, &expr1_0)?;
|
|
|
|
@@ -6484,7 +6480,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Fmul => {
|
|
|
|
&Opcode::Fmul => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2148.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2149.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_mulps(ctx, expr0_0, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_mulps(ctx, expr0_0, &expr1_0)?;
|
|
|
|
@@ -6493,7 +6489,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Fdiv => {
|
|
|
|
&Opcode::Fdiv => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2159.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2160.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_divps(ctx, expr0_0, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_divps(ctx, expr0_0, &expr1_0)?;
|
|
|
|
@@ -6502,7 +6498,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Fmin => {
|
|
|
|
&Opcode::Fmin => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2183.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2184.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_minps(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_minps(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -6527,7 +6523,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::FminPseudo => {
|
|
|
|
&Opcode::FminPseudo => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2339.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2340.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr2_0 = constructor_minps(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_minps(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -6536,7 +6532,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Fmax => {
|
|
|
|
&Opcode::Fmax => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2246.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2247.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_maxps(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_maxps(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -6563,7 +6559,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::FmaxPseudo => {
|
|
|
|
&Opcode::FmaxPseudo => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2350.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2351.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr2_0 = constructor_maxps(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_maxps(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -6605,7 +6601,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
match pattern5_0 {
|
|
|
|
match pattern5_0 {
|
|
|
|
&Opcode::Fadd => {
|
|
|
|
&Opcode::Fadd => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2128.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2129.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_addpd(ctx, expr0_0, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_addpd(ctx, expr0_0, &expr1_0)?;
|
|
|
|
@@ -6614,7 +6610,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Fsub => {
|
|
|
|
&Opcode::Fsub => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2139.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2140.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_subpd(ctx, expr0_0, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_subpd(ctx, expr0_0, &expr1_0)?;
|
|
|
|
@@ -6623,7 +6619,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Fmul => {
|
|
|
|
&Opcode::Fmul => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2150.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2151.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_mulpd(ctx, expr0_0, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_mulpd(ctx, expr0_0, &expr1_0)?;
|
|
|
|
@@ -6632,7 +6628,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Fdiv => {
|
|
|
|
&Opcode::Fdiv => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2161.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2162.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm_mem(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_divpd(ctx, expr0_0, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_divpd(ctx, expr0_0, &expr1_0)?;
|
|
|
|
@@ -6641,7 +6637,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Fmin => {
|
|
|
|
&Opcode::Fmin => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2226.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2227.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_minpd(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_minpd(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -6666,7 +6662,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::FminPseudo => {
|
|
|
|
&Opcode::FminPseudo => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2341.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2342.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr2_0 = constructor_minpd(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_minpd(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -6675,7 +6671,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Fmax => {
|
|
|
|
&Opcode::Fmax => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2289.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2290.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr2_0 = constructor_maxpd(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_maxpd(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -6702,7 +6698,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::FmaxPseudo => {
|
|
|
|
&Opcode::FmaxPseudo => {
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
let (pattern7_0, pattern7_1) = C::unpack_value_array_2(ctx, pattern5_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2352.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2353.
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr0_0 = constructor_put_in_xmm(ctx, pattern7_1)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_xmm(ctx, pattern7_0)?;
|
|
|
|
let expr2_0 = constructor_maxpd(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_maxpd(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -6781,7 +6777,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
C::unpack_value_array_2(ctx, pattern9_1);
|
|
|
|
C::unpack_value_array_2(ctx, pattern9_1);
|
|
|
|
match pattern9_2 {
|
|
|
|
match pattern9_2 {
|
|
|
|
&FloatCC::Equal => {
|
|
|
|
&FloatCC::Equal => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1625.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1626.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_fpcmp(ctx, pattern11_0, pattern11_1)?;
|
|
|
|
constructor_fpcmp(ctx, pattern11_0, pattern11_1)?;
|
|
|
|
let expr1_0 = CC::NZ;
|
|
|
|
let expr1_0 = CC::NZ;
|
|
|
|
@@ -6796,7 +6792,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr5_0);
|
|
|
|
return Some(expr5_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&FloatCC::GreaterThan => {
|
|
|
|
&FloatCC::GreaterThan => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1577.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1578.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_fpcmp(ctx, pattern11_1, pattern11_0)?;
|
|
|
|
constructor_fpcmp(ctx, pattern11_1, pattern11_0)?;
|
|
|
|
let expr1_0 = CC::NBE;
|
|
|
|
let expr1_0 = CC::NBE;
|
|
|
|
@@ -6809,7 +6805,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr4_0);
|
|
|
|
return Some(expr4_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&FloatCC::GreaterThanOrEqual => {
|
|
|
|
&FloatCC::GreaterThanOrEqual => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1580.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1581.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_fpcmp(ctx, pattern11_1, pattern11_0)?;
|
|
|
|
constructor_fpcmp(ctx, pattern11_1, pattern11_0)?;
|
|
|
|
let expr1_0 = CC::NB;
|
|
|
|
let expr1_0 = CC::NB;
|
|
|
|
@@ -6822,7 +6818,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr4_0);
|
|
|
|
return Some(expr4_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&FloatCC::LessThan => {
|
|
|
|
&FloatCC::LessThan => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1600.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1601.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_fpcmp(ctx, pattern11_0, pattern11_1)?;
|
|
|
|
constructor_fpcmp(ctx, pattern11_0, pattern11_1)?;
|
|
|
|
let expr1_0 = CC::NBE;
|
|
|
|
let expr1_0 = CC::NBE;
|
|
|
|
@@ -6835,7 +6831,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr4_0);
|
|
|
|
return Some(expr4_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&FloatCC::LessThanOrEqual => {
|
|
|
|
&FloatCC::LessThanOrEqual => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1603.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1604.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_fpcmp(ctx, pattern11_0, pattern11_1)?;
|
|
|
|
constructor_fpcmp(ctx, pattern11_0, pattern11_1)?;
|
|
|
|
let expr1_0 = CC::NB;
|
|
|
|
let expr1_0 = CC::NB;
|
|
|
|
@@ -6848,7 +6844,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr4_0);
|
|
|
|
return Some(expr4_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&FloatCC::NotEqual => {
|
|
|
|
&FloatCC::NotEqual => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1628.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1629.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_fpcmp(ctx, pattern11_0, pattern11_1)?;
|
|
|
|
constructor_fpcmp(ctx, pattern11_0, pattern11_1)?;
|
|
|
|
let expr1_0 = CC::NZ;
|
|
|
|
let expr1_0 = CC::NZ;
|
|
|
|
@@ -6863,7 +6859,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr5_0);
|
|
|
|
return Some(expr5_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&FloatCC::Ordered => {
|
|
|
|
&FloatCC::Ordered => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1571.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1572.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_fpcmp(ctx, pattern11_1, pattern11_0)?;
|
|
|
|
constructor_fpcmp(ctx, pattern11_1, pattern11_0)?;
|
|
|
|
let expr1_0 = CC::NP;
|
|
|
|
let expr1_0 = CC::NP;
|
|
|
|
@@ -6876,7 +6872,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr4_0);
|
|
|
|
return Some(expr4_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&FloatCC::Unordered => {
|
|
|
|
&FloatCC::Unordered => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1574.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1575.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_fpcmp(ctx, pattern11_1, pattern11_0)?;
|
|
|
|
constructor_fpcmp(ctx, pattern11_1, pattern11_0)?;
|
|
|
|
let expr1_0 = CC::P;
|
|
|
|
let expr1_0 = CC::P;
|
|
|
|
@@ -6889,7 +6885,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr4_0);
|
|
|
|
return Some(expr4_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&FloatCC::UnorderedOrGreaterThan => {
|
|
|
|
&FloatCC::UnorderedOrGreaterThan => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1606.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1607.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_fpcmp(ctx, pattern11_0, pattern11_1)?;
|
|
|
|
constructor_fpcmp(ctx, pattern11_0, pattern11_1)?;
|
|
|
|
let expr1_0 = CC::B;
|
|
|
|
let expr1_0 = CC::B;
|
|
|
|
@@ -6902,7 +6898,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr4_0);
|
|
|
|
return Some(expr4_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&FloatCC::UnorderedOrGreaterThanOrEqual => {
|
|
|
|
&FloatCC::UnorderedOrGreaterThanOrEqual => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1609.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1610.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_fpcmp(ctx, pattern11_0, pattern11_1)?;
|
|
|
|
constructor_fpcmp(ctx, pattern11_0, pattern11_1)?;
|
|
|
|
let expr1_0 = CC::BE;
|
|
|
|
let expr1_0 = CC::BE;
|
|
|
|
@@ -6915,7 +6911,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr4_0);
|
|
|
|
return Some(expr4_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&FloatCC::UnorderedOrLessThan => {
|
|
|
|
&FloatCC::UnorderedOrLessThan => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1583.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1584.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_fpcmp(ctx, pattern11_1, pattern11_0)?;
|
|
|
|
constructor_fpcmp(ctx, pattern11_1, pattern11_0)?;
|
|
|
|
let expr1_0 = CC::B;
|
|
|
|
let expr1_0 = CC::B;
|
|
|
|
@@ -6928,7 +6924,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr4_0);
|
|
|
|
return Some(expr4_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&FloatCC::UnorderedOrLessThanOrEqual => {
|
|
|
|
&FloatCC::UnorderedOrLessThanOrEqual => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1586.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1587.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_fpcmp(ctx, pattern11_1, pattern11_0)?;
|
|
|
|
constructor_fpcmp(ctx, pattern11_1, pattern11_0)?;
|
|
|
|
let expr1_0 = CC::BE;
|
|
|
|
let expr1_0 = CC::BE;
|
|
|
|
@@ -6955,14 +6951,14 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
&Opcode::Breduce => {
|
|
|
|
&Opcode::Breduce => {
|
|
|
|
let pattern6_0 = C::value_type(ctx, pattern4_1);
|
|
|
|
let pattern6_0 = C::value_type(ctx, pattern4_1);
|
|
|
|
if pattern6_0 == pattern2_0 {
|
|
|
|
if pattern6_0 == pattern2_0 {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2085.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2086.
|
|
|
|
let expr0_0 = constructor_output_value(ctx, pattern4_1)?;
|
|
|
|
let expr0_0 = constructor_output_value(ctx, pattern4_1)?;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Bextend => {
|
|
|
|
&Opcode::Bextend => {
|
|
|
|
let pattern6_0 = C::value_type(ctx, pattern4_1);
|
|
|
|
let pattern6_0 = C::value_type(ctx, pattern4_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2066.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2067.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_generic_sextend(ctx, pattern4_1, pattern6_0, pattern2_0)?;
|
|
|
|
constructor_generic_sextend(ctx, pattern4_1, pattern6_0, pattern2_0)?;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
@@ -6970,7 +6966,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
&Opcode::Ireduce => {
|
|
|
|
&Opcode::Ireduce => {
|
|
|
|
let pattern6_0 = C::value_type(ctx, pattern4_1);
|
|
|
|
let pattern6_0 = C::value_type(ctx, pattern4_1);
|
|
|
|
if pattern6_0 == pattern2_0 {
|
|
|
|
if pattern6_0 == pattern2_0 {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2074.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2075.
|
|
|
|
let expr0_0 = constructor_output_value(ctx, pattern4_1)?;
|
|
|
|
let expr0_0 = constructor_output_value(ctx, pattern4_1)?;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@@ -6978,14 +6974,14 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
&Opcode::Uextend => {
|
|
|
|
&Opcode::Uextend => {
|
|
|
|
let pattern6_0 = C::value_type(ctx, pattern4_1);
|
|
|
|
let pattern6_0 = C::value_type(ctx, pattern4_1);
|
|
|
|
if pattern6_0 == pattern2_0 {
|
|
|
|
if pattern6_0 == pattern2_0 {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1967.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1968.
|
|
|
|
let expr0_0 = constructor_output_value(ctx, pattern4_1)?;
|
|
|
|
let expr0_0 = constructor_output_value(ctx, pattern4_1)?;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Sextend => {
|
|
|
|
&Opcode::Sextend => {
|
|
|
|
let pattern6_0 = C::value_type(ctx, pattern4_1);
|
|
|
|
let pattern6_0 = C::value_type(ctx, pattern4_1);
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2060.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2061.
|
|
|
|
let expr0_0 =
|
|
|
|
let expr0_0 =
|
|
|
|
constructor_generic_sextend(ctx, pattern4_1, pattern6_0, pattern2_0)?;
|
|
|
|
constructor_generic_sextend(ctx, pattern4_1, pattern6_0, pattern2_0)?;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
@@ -8181,7 +8177,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
if let &Opcode::Uextend = pattern5_0 {
|
|
|
|
if let &Opcode::Uextend = pattern5_0 {
|
|
|
|
let pattern7_0 = C::value_type(ctx, pattern5_1);
|
|
|
|
let pattern7_0 = C::value_type(ctx, pattern5_1);
|
|
|
|
if let Some(pattern8_0) = C::fits_in_32(ctx, pattern7_0) {
|
|
|
|
if let Some(pattern8_0) = C::fits_in_32(ctx, pattern7_0) {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1983.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1984.
|
|
|
|
let expr0_0: Type = I32;
|
|
|
|
let expr0_0: Type = I32;
|
|
|
|
let expr1_0 = ExtendKind::Zero;
|
|
|
|
let expr1_0 = ExtendKind::Zero;
|
|
|
|
let expr2_0 =
|
|
|
|
let expr2_0 =
|
|
|
|
@@ -8618,7 +8614,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr2_0);
|
|
|
|
return Some(expr2_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Breduce => {
|
|
|
|
&Opcode::Breduce => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2088.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2089.
|
|
|
|
let expr0_0 = C::put_in_regs(ctx, pattern5_1);
|
|
|
|
let expr0_0 = C::put_in_regs(ctx, pattern5_1);
|
|
|
|
let expr1_0: usize = 0;
|
|
|
|
let expr1_0: usize = 0;
|
|
|
|
let expr2_0 = constructor_value_regs_get_gpr(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_value_regs_get_gpr(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -8626,7 +8622,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr3_0);
|
|
|
|
return Some(expr3_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Bint => {
|
|
|
|
&Opcode::Bint => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2096.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2097.
|
|
|
|
let expr0_0 = constructor_put_in_gpr(ctx, pattern5_1)?;
|
|
|
|
let expr0_0 = constructor_put_in_gpr(ctx, pattern5_1)?;
|
|
|
|
let expr1_0: u32 = 1;
|
|
|
|
let expr1_0: u32 = 1;
|
|
|
|
let expr2_0 = RegMemImm::Imm { simm32: expr1_0 };
|
|
|
|
let expr2_0 = RegMemImm::Imm { simm32: expr1_0 };
|
|
|
|
@@ -8636,7 +8632,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr5_0);
|
|
|
|
return Some(expr5_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Ireduce => {
|
|
|
|
&Opcode::Ireduce => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2080.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2081.
|
|
|
|
let expr0_0 = C::put_in_regs(ctx, pattern5_1);
|
|
|
|
let expr0_0 = C::put_in_regs(ctx, pattern5_1);
|
|
|
|
let expr1_0: usize = 0;
|
|
|
|
let expr1_0: usize = 0;
|
|
|
|
let expr2_0 = constructor_value_regs_get_gpr(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_value_regs_get_gpr(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -8750,21 +8746,21 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
} => {
|
|
|
|
} => {
|
|
|
|
match pattern5_0 {
|
|
|
|
match pattern5_0 {
|
|
|
|
&Opcode::Clz => {
|
|
|
|
&Opcode::Clz => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1644.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1645.
|
|
|
|
let expr0_0 = constructor_put_in_gpr(ctx, pattern5_1)?;
|
|
|
|
let expr0_0 = constructor_put_in_gpr(ctx, pattern5_1)?;
|
|
|
|
let expr1_0 = constructor_do_clz(ctx, pattern3_0, pattern3_0, expr0_0)?;
|
|
|
|
let expr1_0 = constructor_do_clz(ctx, pattern3_0, pattern3_0, expr0_0)?;
|
|
|
|
let expr2_0 = constructor_output_gpr(ctx, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_output_gpr(ctx, expr1_0)?;
|
|
|
|
return Some(expr2_0);
|
|
|
|
return Some(expr2_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Ctz => {
|
|
|
|
&Opcode::Ctz => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1686.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1687.
|
|
|
|
let expr0_0 = constructor_put_in_gpr(ctx, pattern5_1)?;
|
|
|
|
let expr0_0 = constructor_put_in_gpr(ctx, pattern5_1)?;
|
|
|
|
let expr1_0 = constructor_do_ctz(ctx, pattern3_0, pattern3_0, expr0_0)?;
|
|
|
|
let expr1_0 = constructor_do_ctz(ctx, pattern3_0, pattern3_0, expr0_0)?;
|
|
|
|
let expr2_0 = constructor_output_gpr(ctx, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_output_gpr(ctx, expr1_0)?;
|
|
|
|
return Some(expr2_0);
|
|
|
|
return Some(expr2_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Popcnt => {
|
|
|
|
&Opcode::Popcnt => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1738.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1739.
|
|
|
|
let expr0_0 = constructor_put_in_gpr(ctx, pattern5_1)?;
|
|
|
|
let expr0_0 = constructor_put_in_gpr(ctx, pattern5_1)?;
|
|
|
|
let expr1_0 = constructor_do_popcnt(ctx, pattern3_0, expr0_0)?;
|
|
|
|
let expr1_0 = constructor_do_popcnt(ctx, pattern3_0, expr0_0)?;
|
|
|
|
let expr2_0 = constructor_output_gpr(ctx, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_output_gpr(ctx, expr1_0)?;
|
|
|
|
@@ -8867,7 +8863,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
} => {
|
|
|
|
} => {
|
|
|
|
match pattern5_0 {
|
|
|
|
match pattern5_0 {
|
|
|
|
&Opcode::Clz => {
|
|
|
|
&Opcode::Clz => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1649.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1650.
|
|
|
|
let expr0_0: Type = I32;
|
|
|
|
let expr0_0: Type = I32;
|
|
|
|
let expr1_0: Type = I32;
|
|
|
|
let expr1_0: Type = I32;
|
|
|
|
let expr2_0 = ExtendKind::Zero;
|
|
|
|
let expr2_0 = ExtendKind::Zero;
|
|
|
|
@@ -8878,7 +8874,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr5_0);
|
|
|
|
return Some(expr5_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Ctz => {
|
|
|
|
&Opcode::Ctz => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1691.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1692.
|
|
|
|
let expr0_0: Type = I32;
|
|
|
|
let expr0_0: Type = I32;
|
|
|
|
let expr1_0: Type = I32;
|
|
|
|
let expr1_0: Type = I32;
|
|
|
|
let expr2_0 = ExtendKind::Zero;
|
|
|
|
let expr2_0 = ExtendKind::Zero;
|
|
|
|
@@ -8889,7 +8885,7 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<InstOutp
|
|
|
|
return Some(expr5_0);
|
|
|
|
return Some(expr5_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&Opcode::Popcnt => {
|
|
|
|
&Opcode::Popcnt => {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1743.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1744.
|
|
|
|
let expr0_0: Type = I32;
|
|
|
|
let expr0_0: Type = I32;
|
|
|
|
let expr1_0: Type = I32;
|
|
|
|
let expr1_0: Type = I32;
|
|
|
|
let expr2_0 = ExtendKind::Zero;
|
|
|
|
let expr2_0 = ExtendKind::Zero;
|
|
|
|
@@ -9521,7 +9517,7 @@ pub fn constructor_do_clz<C: Context>(
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1669.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1670.
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr1_0: i64 = -1;
|
|
|
|
let expr1_0: i64 = -1;
|
|
|
|
let expr2_0 = constructor_imm_i64(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_imm_i64(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -9548,7 +9544,7 @@ pub fn constructor_do_ctz<C: Context>(
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1710.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1711.
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr1_0 = C::ty_bits_u64(ctx, pattern1_0);
|
|
|
|
let expr1_0 = C::ty_bits_u64(ctx, pattern1_0);
|
|
|
|
let expr2_0 = constructor_imm(ctx, expr0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_imm(ctx, expr0_0, expr1_0)?;
|
|
|
|
@@ -9562,7 +9558,7 @@ pub fn constructor_do_popcnt<C: Context>(ctx: &mut C, arg0: Type, arg1: Gpr) ->
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
if pattern0_0 == I32 {
|
|
|
|
if pattern0_0 == I32 {
|
|
|
|
let pattern2_0 = arg1;
|
|
|
|
let pattern2_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1801.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1802.
|
|
|
|
let expr0_0: Type = I32;
|
|
|
|
let expr0_0: Type = I32;
|
|
|
|
let expr1_0: u8 = 1;
|
|
|
|
let expr1_0: u8 = 1;
|
|
|
|
let expr2_0 = Imm8Reg::Imm8 { imm: expr1_0 };
|
|
|
|
let expr2_0 = Imm8Reg::Imm8 { imm: expr1_0 };
|
|
|
|
@@ -9627,7 +9623,7 @@ pub fn constructor_do_popcnt<C: Context>(ctx: &mut C, arg0: Type, arg1: Gpr) ->
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if pattern0_0 == I64 {
|
|
|
|
if pattern0_0 == I64 {
|
|
|
|
let pattern2_0 = arg1;
|
|
|
|
let pattern2_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1758.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1759.
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr1_0: u8 = 1;
|
|
|
|
let expr1_0: u8 = 1;
|
|
|
|
let expr2_0 = Imm8Reg::Imm8 { imm: expr1_0 };
|
|
|
|
let expr2_0 = Imm8Reg::Imm8 { imm: expr1_0 };
|
|
|
|
@@ -9701,7 +9697,7 @@ pub fn constructor_do_popcnt<C: Context>(ctx: &mut C, arg0: Type, arg1: Gpr) ->
|
|
|
|
pub fn constructor_do_bitrev8<C: Context>(ctx: &mut C, arg0: Type, arg1: Gpr) -> Option<Gpr> {
|
|
|
|
pub fn constructor_do_bitrev8<C: Context>(ctx: &mut C, arg0: Type, arg1: Gpr) -> Option<Gpr> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1890.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1891.
|
|
|
|
let expr0_0 = C::ty_mask(ctx, pattern0_0);
|
|
|
|
let expr0_0 = C::ty_mask(ctx, pattern0_0);
|
|
|
|
let expr1_0: u64 = 6148914691236517205;
|
|
|
|
let expr1_0: u64 = 6148914691236517205;
|
|
|
|
let expr2_0 = C::u64_and(ctx, expr0_0, expr1_0);
|
|
|
|
let expr2_0 = C::u64_and(ctx, expr0_0, expr1_0);
|
|
|
|
@@ -9764,7 +9760,7 @@ pub fn constructor_do_bitrev8<C: Context>(ctx: &mut C, arg0: Type, arg1: Gpr) ->
|
|
|
|
pub fn constructor_do_bitrev16<C: Context>(ctx: &mut C, arg0: Type, arg1: Gpr) -> Option<Gpr> {
|
|
|
|
pub fn constructor_do_bitrev16<C: Context>(ctx: &mut C, arg0: Type, arg1: Gpr) -> Option<Gpr> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1913.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1914.
|
|
|
|
let expr0_0 = constructor_do_bitrev8(ctx, pattern0_0, pattern1_0)?;
|
|
|
|
let expr0_0 = constructor_do_bitrev8(ctx, pattern0_0, pattern1_0)?;
|
|
|
|
let expr1_0 = C::ty_mask(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::ty_mask(ctx, pattern0_0);
|
|
|
|
let expr2_0: u64 = 71777214294589695;
|
|
|
|
let expr2_0: u64 = 71777214294589695;
|
|
|
|
@@ -9792,7 +9788,7 @@ pub fn constructor_do_bitrev16<C: Context>(ctx: &mut C, arg0: Type, arg1: Gpr) -
|
|
|
|
pub fn constructor_do_bitrev32<C: Context>(ctx: &mut C, arg0: Type, arg1: Gpr) -> Option<Gpr> {
|
|
|
|
pub fn constructor_do_bitrev32<C: Context>(ctx: &mut C, arg0: Type, arg1: Gpr) -> Option<Gpr> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1925.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1926.
|
|
|
|
let expr0_0 = constructor_do_bitrev16(ctx, pattern0_0, pattern1_0)?;
|
|
|
|
let expr0_0 = constructor_do_bitrev16(ctx, pattern0_0, pattern1_0)?;
|
|
|
|
let expr1_0 = C::ty_mask(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::ty_mask(ctx, pattern0_0);
|
|
|
|
let expr2_0: u64 = 281470681808895;
|
|
|
|
let expr2_0: u64 = 281470681808895;
|
|
|
|
@@ -9821,7 +9817,7 @@ pub fn constructor_do_bitrev64<C: Context>(ctx: &mut C, arg0: Type, arg1: Gpr) -
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
if pattern0_0 == I64 {
|
|
|
|
if pattern0_0 == I64 {
|
|
|
|
let pattern2_0 = arg1;
|
|
|
|
let pattern2_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1937.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 1938.
|
|
|
|
let expr0_0 = constructor_do_bitrev32(ctx, pattern0_0, pattern2_0)?;
|
|
|
|
let expr0_0 = constructor_do_bitrev32(ctx, pattern0_0, pattern2_0)?;
|
|
|
|
let expr1_0: u64 = 4294967295;
|
|
|
|
let expr1_0: u64 = 4294967295;
|
|
|
|
let expr2_0 = constructor_imm(ctx, pattern0_0, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_imm(ctx, pattern0_0, expr1_0)?;
|
|
|
|
@@ -9855,7 +9851,7 @@ pub fn constructor_generic_sextend<C: Context>(
|
|
|
|
if let Some(pattern2_0) = C::fits_in_32(ctx, pattern1_0) {
|
|
|
|
if let Some(pattern2_0) = C::fits_in_32(ctx, pattern1_0) {
|
|
|
|
let pattern3_0 = arg2;
|
|
|
|
let pattern3_0 = arg2;
|
|
|
|
if let Some(pattern4_0) = C::fits_in_32(ctx, pattern3_0) {
|
|
|
|
if let Some(pattern4_0) = C::fits_in_32(ctx, pattern3_0) {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2057.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2058.
|
|
|
|
let expr0_0: Type = I32;
|
|
|
|
let expr0_0: Type = I32;
|
|
|
|
let expr1_0 = ExtendKind::Sign;
|
|
|
|
let expr1_0 = ExtendKind::Sign;
|
|
|
|
let expr2_0 = constructor_extend_to_gpr(ctx, pattern0_0, expr0_0, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_extend_to_gpr(ctx, pattern0_0, expr0_0, &expr1_0)?;
|
|
|
|
@@ -9863,7 +9859,7 @@ pub fn constructor_generic_sextend<C: Context>(
|
|
|
|
return Some(expr3_0);
|
|
|
|
return Some(expr3_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if let Some(pattern4_0) = C::ty_int_bool_64(ctx, pattern3_0) {
|
|
|
|
if let Some(pattern4_0) = C::ty_int_bool_64(ctx, pattern3_0) {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2053.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2054.
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr1_0 = ExtendKind::Sign;
|
|
|
|
let expr1_0 = ExtendKind::Sign;
|
|
|
|
let expr2_0 = constructor_extend_to_gpr(ctx, pattern0_0, expr0_0, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_extend_to_gpr(ctx, pattern0_0, expr0_0, &expr1_0)?;
|
|
|
|
@@ -9871,7 +9867,7 @@ pub fn constructor_generic_sextend<C: Context>(
|
|
|
|
return Some(expr3_0);
|
|
|
|
return Some(expr3_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if let Some(pattern4_0) = C::ty_int_bool_128(ctx, pattern3_0) {
|
|
|
|
if let Some(pattern4_0) = C::ty_int_bool_128(ctx, pattern3_0) {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2047.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2048.
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr1_0 = ExtendKind::Sign;
|
|
|
|
let expr1_0 = ExtendKind::Sign;
|
|
|
|
let expr2_0 = constructor_extend_to_gpr(ctx, pattern0_0, expr0_0, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_extend_to_gpr(ctx, pattern0_0, expr0_0, &expr1_0)?;
|
|
|
|
@@ -9886,7 +9882,7 @@ pub fn constructor_generic_sextend<C: Context>(
|
|
|
|
if let Some(pattern2_0) = C::ty_int_bool_64(ctx, pattern1_0) {
|
|
|
|
if let Some(pattern2_0) = C::ty_int_bool_64(ctx, pattern1_0) {
|
|
|
|
let pattern3_0 = arg2;
|
|
|
|
let pattern3_0 = arg2;
|
|
|
|
if let Some(pattern4_0) = C::ty_int_bool_128(ctx, pattern3_0) {
|
|
|
|
if let Some(pattern4_0) = C::ty_int_bool_128(ctx, pattern3_0) {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2043.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2044.
|
|
|
|
let expr0_0 = C::put_in_reg(ctx, pattern0_0);
|
|
|
|
let expr0_0 = C::put_in_reg(ctx, pattern0_0);
|
|
|
|
let expr1_0 = constructor_put_in_gpr(ctx, pattern0_0)?;
|
|
|
|
let expr1_0 = constructor_put_in_gpr(ctx, pattern0_0)?;
|
|
|
|
let expr2_0 = constructor_spread_sign_bit(ctx, expr1_0)?;
|
|
|
|
let expr2_0 = constructor_spread_sign_bit(ctx, expr1_0)?;
|
|
|
|
@@ -9898,7 +9894,7 @@ pub fn constructor_generic_sextend<C: Context>(
|
|
|
|
}
|
|
|
|
}
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
if pattern2_0 == pattern1_0 {
|
|
|
|
if pattern2_0 == pattern1_0 {
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2033.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2034.
|
|
|
|
let expr0_0 = constructor_output_value(ctx, pattern0_0)?;
|
|
|
|
let expr0_0 = constructor_output_value(ctx, pattern0_0)?;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@@ -9908,7 +9904,7 @@ pub fn constructor_generic_sextend<C: Context>(
|
|
|
|
// Generated as internal constructor for term spread_sign_bit.
|
|
|
|
// Generated as internal constructor for term spread_sign_bit.
|
|
|
|
pub fn constructor_spread_sign_bit<C: Context>(ctx: &mut C, arg0: Gpr) -> Option<Gpr> {
|
|
|
|
pub fn constructor_spread_sign_bit<C: Context>(ctx: &mut C, arg0: Gpr) -> Option<Gpr> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2039.
|
|
|
|
// Rule at src/isa/x64/lower.isle line 2040.
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr1_0: u8 = 63;
|
|
|
|
let expr1_0: u8 = 63;
|
|
|
|
let expr2_0 = Imm8Reg::Imm8 { imm: expr1_0 };
|
|
|
|
let expr2_0 = Imm8Reg::Imm8 { imm: expr1_0 };
|
|
|
|
|