|
|
|
@@ -63,19 +63,19 @@ pub trait Context {
|
|
|
|
fn sse_insertps_lane_imm(&mut self, arg0: u8) -> u8;
|
|
|
|
fn sse_insertps_lane_imm(&mut self, arg0: u8) -> u8;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// Internal type ProducesFlags: defined at src/isa/x64/inst.isle line 392.
|
|
|
|
/// Internal type ProducesFlags: defined at src/prelude.isle line 230.
|
|
|
|
#[derive(Clone, Debug)]
|
|
|
|
#[derive(Clone, Debug)]
|
|
|
|
pub enum ProducesFlags {
|
|
|
|
pub enum ProducesFlags {
|
|
|
|
ProducesFlags { inst: MInst, result: Reg },
|
|
|
|
ProducesFlags { inst: MInst, result: Reg },
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// Internal type ConsumesFlags: defined at src/isa/x64/inst.isle line 395.
|
|
|
|
/// Internal type ConsumesFlags: defined at src/prelude.isle line 233.
|
|
|
|
#[derive(Clone, Debug)]
|
|
|
|
#[derive(Clone, Debug)]
|
|
|
|
pub enum ConsumesFlags {
|
|
|
|
pub enum ConsumesFlags {
|
|
|
|
ConsumesFlags { inst: MInst, result: Reg },
|
|
|
|
ConsumesFlags { inst: MInst, result: Reg },
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// Internal type ExtendKind: defined at src/isa/x64/inst.isle line 433.
|
|
|
|
/// Internal type ExtendKind: defined at src/isa/x64/inst.isle line 390.
|
|
|
|
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
|
|
|
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
|
|
|
pub enum ExtendKind {
|
|
|
|
pub enum ExtendKind {
|
|
|
|
Sign,
|
|
|
|
Sign,
|
|
|
|
@@ -101,35 +101,6 @@ pub fn constructor_lo_reg<C: Context>(ctx: &mut C, arg0: Value) -> Option<Reg> {
|
|
|
|
return Some(expr2_0);
|
|
|
|
return Some(expr2_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Generated as internal constructor for term operand_size_bits.
|
|
|
|
|
|
|
|
pub fn constructor_operand_size_bits<C: Context>(ctx: &mut C, arg0: &OperandSize) -> Option<u16> {
|
|
|
|
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
|
|
|
|
match pattern0_0 {
|
|
|
|
|
|
|
|
&OperandSize::Size8 => {
|
|
|
|
|
|
|
|
// Rule at src/isa/x64/inst.isle line 80.
|
|
|
|
|
|
|
|
let expr0_0: u16 = 8;
|
|
|
|
|
|
|
|
return Some(expr0_0);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
&OperandSize::Size16 => {
|
|
|
|
|
|
|
|
// Rule at src/isa/x64/inst.isle line 81.
|
|
|
|
|
|
|
|
let expr0_0: u16 = 16;
|
|
|
|
|
|
|
|
return Some(expr0_0);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
&OperandSize::Size32 => {
|
|
|
|
|
|
|
|
// Rule at src/isa/x64/inst.isle line 82.
|
|
|
|
|
|
|
|
let expr0_0: u16 = 32;
|
|
|
|
|
|
|
|
return Some(expr0_0);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
&OperandSize::Size64 => {
|
|
|
|
|
|
|
|
// Rule at src/isa/x64/inst.isle line 83.
|
|
|
|
|
|
|
|
let expr0_0: u16 = 64;
|
|
|
|
|
|
|
|
return Some(expr0_0);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
_ => {}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return None;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Generated as internal constructor for term with_flags.
|
|
|
|
// Generated as internal constructor for term with_flags.
|
|
|
|
pub fn constructor_with_flags<C: Context>(
|
|
|
|
pub fn constructor_with_flags<C: Context>(
|
|
|
|
ctx: &mut C,
|
|
|
|
ctx: &mut C,
|
|
|
|
@@ -148,7 +119,7 @@ pub fn constructor_with_flags<C: Context>(
|
|
|
|
result: pattern3_1,
|
|
|
|
result: pattern3_1,
|
|
|
|
} = pattern2_0
|
|
|
|
} = pattern2_0
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// Rule at src/isa/x64/inst.isle line 405.
|
|
|
|
// Rule at src/prelude.isle line 243.
|
|
|
|
let expr0_0 = C::emit(ctx, &pattern1_0);
|
|
|
|
let expr0_0 = C::emit(ctx, &pattern1_0);
|
|
|
|
let expr1_0 = C::emit(ctx, &pattern3_0);
|
|
|
|
let expr1_0 = C::emit(ctx, &pattern3_0);
|
|
|
|
let expr2_0 = C::value_regs(ctx, pattern1_1, pattern3_1);
|
|
|
|
let expr2_0 = C::value_regs(ctx, pattern1_1, pattern3_1);
|
|
|
|
@@ -176,7 +147,7 @@ pub fn constructor_with_flags_1<C: Context>(
|
|
|
|
result: pattern3_1,
|
|
|
|
result: pattern3_1,
|
|
|
|
} = pattern2_0
|
|
|
|
} = pattern2_0
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// Rule at src/isa/x64/inst.isle line 413.
|
|
|
|
// Rule at src/prelude.isle line 251.
|
|
|
|
let expr0_0 = C::emit(ctx, &pattern1_0);
|
|
|
|
let expr0_0 = C::emit(ctx, &pattern1_0);
|
|
|
|
let expr1_0 = C::emit(ctx, &pattern3_0);
|
|
|
|
let expr1_0 = C::emit(ctx, &pattern3_0);
|
|
|
|
return Some(pattern3_1);
|
|
|
|
return Some(pattern3_1);
|
|
|
|
@@ -210,7 +181,7 @@ pub fn constructor_with_flags_2<C: Context>(
|
|
|
|
result: pattern5_1,
|
|
|
|
result: pattern5_1,
|
|
|
|
} = pattern4_0
|
|
|
|
} = pattern4_0
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// Rule at src/isa/x64/inst.isle line 423.
|
|
|
|
// Rule at src/prelude.isle line 261.
|
|
|
|
let expr0_0 = C::emit(ctx, &pattern1_0);
|
|
|
|
let expr0_0 = C::emit(ctx, &pattern1_0);
|
|
|
|
let expr1_0 = C::emit(ctx, &pattern3_0);
|
|
|
|
let expr1_0 = C::emit(ctx, &pattern3_0);
|
|
|
|
let expr2_0 = C::emit(ctx, &pattern5_0);
|
|
|
|
let expr2_0 = C::emit(ctx, &pattern5_0);
|
|
|
|
@@ -222,6 +193,35 @@ pub fn constructor_with_flags_2<C: Context>(
|
|
|
|
return None;
|
|
|
|
return None;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Generated as internal constructor for term operand_size_bits.
|
|
|
|
|
|
|
|
pub fn constructor_operand_size_bits<C: Context>(ctx: &mut C, arg0: &OperandSize) -> Option<u16> {
|
|
|
|
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
|
|
|
|
match pattern0_0 {
|
|
|
|
|
|
|
|
&OperandSize::Size8 => {
|
|
|
|
|
|
|
|
// Rule at src/isa/x64/inst.isle line 80.
|
|
|
|
|
|
|
|
let expr0_0: u16 = 8;
|
|
|
|
|
|
|
|
return Some(expr0_0);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
&OperandSize::Size16 => {
|
|
|
|
|
|
|
|
// Rule at src/isa/x64/inst.isle line 81.
|
|
|
|
|
|
|
|
let expr0_0: u16 = 16;
|
|
|
|
|
|
|
|
return Some(expr0_0);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
&OperandSize::Size32 => {
|
|
|
|
|
|
|
|
// Rule at src/isa/x64/inst.isle line 82.
|
|
|
|
|
|
|
|
let expr0_0: u16 = 32;
|
|
|
|
|
|
|
|
return Some(expr0_0);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
&OperandSize::Size64 => {
|
|
|
|
|
|
|
|
// Rule at src/isa/x64/inst.isle line 83.
|
|
|
|
|
|
|
|
let expr0_0: u16 = 64;
|
|
|
|
|
|
|
|
return Some(expr0_0);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
_ => {}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return None;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Generated as internal constructor for term extend_to_reg.
|
|
|
|
// Generated as internal constructor for term extend_to_reg.
|
|
|
|
pub fn constructor_extend_to_reg<C: Context>(
|
|
|
|
pub fn constructor_extend_to_reg<C: Context>(
|
|
|
|
ctx: &mut C,
|
|
|
|
ctx: &mut C,
|
|
|
|
@@ -234,12 +234,12 @@ pub fn constructor_extend_to_reg<C: Context>(
|
|
|
|
let pattern2_0 = arg1;
|
|
|
|
let pattern2_0 = arg1;
|
|
|
|
if pattern2_0 == pattern1_0 {
|
|
|
|
if pattern2_0 == pattern1_0 {
|
|
|
|
let pattern4_0 = arg2;
|
|
|
|
let pattern4_0 = arg2;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 445.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 402.
|
|
|
|
let expr0_0 = C::put_in_reg(ctx, pattern0_0);
|
|
|
|
let expr0_0 = C::put_in_reg(ctx, pattern0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
let pattern3_0 = arg2;
|
|
|
|
let pattern3_0 = arg2;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 448.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 405.
|
|
|
|
let expr0_0 = C::ty_bits(ctx, pattern1_0);
|
|
|
|
let expr0_0 = C::ty_bits(ctx, pattern1_0);
|
|
|
|
let expr1_0 = C::operand_size_of_type(ctx, pattern2_0);
|
|
|
|
let expr1_0 = C::operand_size_of_type(ctx, pattern2_0);
|
|
|
|
let expr2_0 = constructor_operand_size_bits(ctx, &expr1_0)?;
|
|
|
|
let expr2_0 = constructor_operand_size_bits(ctx, &expr1_0)?;
|
|
|
|
@@ -263,7 +263,7 @@ pub fn constructor_extend<C: Context>(
|
|
|
|
let pattern2_0 = arg1;
|
|
|
|
let pattern2_0 = arg1;
|
|
|
|
let pattern3_0 = arg2;
|
|
|
|
let pattern3_0 = arg2;
|
|
|
|
let pattern4_0 = arg3;
|
|
|
|
let pattern4_0 = arg3;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 468.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 425.
|
|
|
|
let expr0_0 = constructor_movsx(ctx, pattern2_0, pattern3_0, pattern4_0)?;
|
|
|
|
let expr0_0 = constructor_movsx(ctx, pattern2_0, pattern3_0, pattern4_0)?;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@@ -271,7 +271,7 @@ pub fn constructor_extend<C: Context>(
|
|
|
|
let pattern2_0 = arg1;
|
|
|
|
let pattern2_0 = arg1;
|
|
|
|
let pattern3_0 = arg2;
|
|
|
|
let pattern3_0 = arg2;
|
|
|
|
let pattern4_0 = arg3;
|
|
|
|
let pattern4_0 = arg3;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 464.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 421.
|
|
|
|
let expr0_0 = constructor_movzx(ctx, pattern2_0, pattern3_0, pattern4_0)?;
|
|
|
|
let expr0_0 = constructor_movzx(ctx, pattern2_0, pattern3_0, pattern4_0)?;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@@ -284,17 +284,17 @@ pub fn constructor_extend<C: Context>(
|
|
|
|
pub fn constructor_sse_xor_op<C: Context>(ctx: &mut C, arg0: Type) -> Option<SseOpcode> {
|
|
|
|
pub fn constructor_sse_xor_op<C: Context>(ctx: &mut C, arg0: Type) -> Option<SseOpcode> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
if pattern0_0 == F32X4 {
|
|
|
|
if pattern0_0 == F32X4 {
|
|
|
|
// Rule at src/isa/x64/inst.isle line 475.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 432.
|
|
|
|
let expr0_0 = SseOpcode::Xorps;
|
|
|
|
let expr0_0 = SseOpcode::Xorps;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if pattern0_0 == F64X2 {
|
|
|
|
if pattern0_0 == F64X2 {
|
|
|
|
// Rule at src/isa/x64/inst.isle line 476.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 433.
|
|
|
|
let expr0_0 = SseOpcode::Xorpd;
|
|
|
|
let expr0_0 = SseOpcode::Xorpd;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if let Some((pattern1_0, pattern1_1)) = C::multi_lane(ctx, pattern0_0) {
|
|
|
|
if let Some((pattern1_0, pattern1_1)) = C::multi_lane(ctx, pattern0_0) {
|
|
|
|
// Rule at src/isa/x64/inst.isle line 477.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 434.
|
|
|
|
let expr0_0 = SseOpcode::Pxor;
|
|
|
|
let expr0_0 = SseOpcode::Pxor;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@@ -311,7 +311,7 @@ pub fn constructor_sse_xor<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/inst.isle line 481.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 438.
|
|
|
|
let expr0_0 = constructor_sse_xor_op(ctx, pattern0_0)?;
|
|
|
|
let expr0_0 = constructor_sse_xor_op(ctx, pattern0_0)?;
|
|
|
|
let expr1_0 = constructor_xmm_rm_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
let expr1_0 = constructor_xmm_rm_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -321,40 +321,40 @@ pub fn constructor_sse_xor<C: Context>(
|
|
|
|
pub fn constructor_sse_cmp_op<C: Context>(ctx: &mut C, arg0: Type) -> Option<SseOpcode> {
|
|
|
|
pub fn constructor_sse_cmp_op<C: Context>(ctx: &mut C, arg0: Type) -> Option<SseOpcode> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
if pattern0_0 == F32X4 {
|
|
|
|
if pattern0_0 == F32X4 {
|
|
|
|
// Rule at src/isa/x64/inst.isle line 490.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 447.
|
|
|
|
let expr0_0 = SseOpcode::Cmpps;
|
|
|
|
let expr0_0 = SseOpcode::Cmpps;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if pattern0_0 == F64X2 {
|
|
|
|
if pattern0_0 == F64X2 {
|
|
|
|
// Rule at src/isa/x64/inst.isle line 491.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 448.
|
|
|
|
let expr0_0 = SseOpcode::Cmppd;
|
|
|
|
let expr0_0 = SseOpcode::Cmppd;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if let Some((pattern1_0, pattern1_1)) = C::multi_lane(ctx, pattern0_0) {
|
|
|
|
if let Some((pattern1_0, pattern1_1)) = C::multi_lane(ctx, pattern0_0) {
|
|
|
|
if pattern1_0 == 8 {
|
|
|
|
if pattern1_0 == 8 {
|
|
|
|
if pattern1_1 == 16 {
|
|
|
|
if pattern1_1 == 16 {
|
|
|
|
// Rule at src/isa/x64/inst.isle line 486.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 443.
|
|
|
|
let expr0_0 = SseOpcode::Pcmpeqb;
|
|
|
|
let expr0_0 = SseOpcode::Pcmpeqb;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if pattern1_0 == 16 {
|
|
|
|
if pattern1_0 == 16 {
|
|
|
|
if pattern1_1 == 8 {
|
|
|
|
if pattern1_1 == 8 {
|
|
|
|
// Rule at src/isa/x64/inst.isle line 487.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 444.
|
|
|
|
let expr0_0 = SseOpcode::Pcmpeqw;
|
|
|
|
let expr0_0 = SseOpcode::Pcmpeqw;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if pattern1_0 == 32 {
|
|
|
|
if pattern1_0 == 32 {
|
|
|
|
if pattern1_1 == 4 {
|
|
|
|
if pattern1_1 == 4 {
|
|
|
|
// Rule at src/isa/x64/inst.isle line 488.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 445.
|
|
|
|
let expr0_0 = SseOpcode::Pcmpeqd;
|
|
|
|
let expr0_0 = SseOpcode::Pcmpeqd;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if pattern1_0 == 64 {
|
|
|
|
if pattern1_0 == 64 {
|
|
|
|
if pattern1_1 == 2 {
|
|
|
|
if pattern1_1 == 2 {
|
|
|
|
// Rule at src/isa/x64/inst.isle line 489.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 446.
|
|
|
|
let expr0_0 = SseOpcode::Pcmpeqq;
|
|
|
|
let expr0_0 = SseOpcode::Pcmpeqq;
|
|
|
|
return Some(expr0_0);
|
|
|
|
return Some(expr0_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@@ -366,7 +366,7 @@ pub fn constructor_sse_cmp_op<C: Context>(ctx: &mut C, arg0: Type) -> Option<Sse
|
|
|
|
// Generated as internal constructor for term vector_all_ones.
|
|
|
|
// Generated as internal constructor for term vector_all_ones.
|
|
|
|
pub fn constructor_vector_all_ones<C: Context>(ctx: &mut C, arg0: Type) -> Option<Reg> {
|
|
|
|
pub fn constructor_vector_all_ones<C: Context>(ctx: &mut C, arg0: Type) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 505.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 462.
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::writable_reg_to_reg(ctx, expr0_0);
|
|
|
|
let expr1_0 = C::writable_reg_to_reg(ctx, expr0_0);
|
|
|
|
let expr2_0: Type = I32X4;
|
|
|
|
let expr2_0: Type = I32X4;
|
|
|
|
@@ -394,7 +394,7 @@ pub fn constructor_alu_rmi_r<C: Context>(
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern3_0 = arg3;
|
|
|
|
let pattern3_0 = arg3;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 529.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 486.
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::operand_size_of_type(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::operand_size_of_type(ctx, pattern0_0);
|
|
|
|
let expr2_0 = MInst::AluRmiR {
|
|
|
|
let expr2_0 = MInst::AluRmiR {
|
|
|
|
@@ -419,7 +419,7 @@ pub fn constructor_add<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/inst.isle line 537.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 494.
|
|
|
|
let expr0_0 = AluRmiROpcode::Add;
|
|
|
|
let expr0_0 = AluRmiROpcode::Add;
|
|
|
|
let expr1_0 = constructor_alu_rmi_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
let expr1_0 = constructor_alu_rmi_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -435,7 +435,7 @@ pub fn constructor_add_with_flags<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/inst.isle line 545.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 502.
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::operand_size_of_type(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::operand_size_of_type(ctx, pattern0_0);
|
|
|
|
let expr2_0 = AluRmiROpcode::Add;
|
|
|
|
let expr2_0 = AluRmiROpcode::Add;
|
|
|
|
@@ -464,7 +464,7 @@ pub fn constructor_adc<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/inst.isle line 556.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 513.
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::operand_size_of_type(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::operand_size_of_type(ctx, pattern0_0);
|
|
|
|
let expr2_0 = AluRmiROpcode::Adc;
|
|
|
|
let expr2_0 = AluRmiROpcode::Adc;
|
|
|
|
@@ -493,7 +493,7 @@ pub fn constructor_sub<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/inst.isle line 567.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 524.
|
|
|
|
let expr0_0 = AluRmiROpcode::Sub;
|
|
|
|
let expr0_0 = AluRmiROpcode::Sub;
|
|
|
|
let expr1_0 = constructor_alu_rmi_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
let expr1_0 = constructor_alu_rmi_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -509,7 +509,7 @@ pub fn constructor_sub_with_flags<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/inst.isle line 575.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 532.
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::operand_size_of_type(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::operand_size_of_type(ctx, pattern0_0);
|
|
|
|
let expr2_0 = AluRmiROpcode::Sub;
|
|
|
|
let expr2_0 = AluRmiROpcode::Sub;
|
|
|
|
@@ -538,7 +538,7 @@ pub fn constructor_sbb<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/inst.isle line 586.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 543.
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::operand_size_of_type(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::operand_size_of_type(ctx, pattern0_0);
|
|
|
|
let expr2_0 = AluRmiROpcode::Sbb;
|
|
|
|
let expr2_0 = AluRmiROpcode::Sbb;
|
|
|
|
@@ -567,7 +567,7 @@ pub fn constructor_mul<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/inst.isle line 597.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 554.
|
|
|
|
let expr0_0 = AluRmiROpcode::Mul;
|
|
|
|
let expr0_0 = AluRmiROpcode::Mul;
|
|
|
|
let expr1_0 = constructor_alu_rmi_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
let expr1_0 = constructor_alu_rmi_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -583,7 +583,7 @@ pub fn constructor_m_and<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/inst.isle line 608.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 565.
|
|
|
|
let expr0_0 = AluRmiROpcode::And;
|
|
|
|
let expr0_0 = AluRmiROpcode::And;
|
|
|
|
let expr1_0 = constructor_alu_rmi_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
let expr1_0 = constructor_alu_rmi_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -599,7 +599,7 @@ pub fn constructor_or<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/inst.isle line 616.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 573.
|
|
|
|
let expr0_0 = AluRmiROpcode::Or;
|
|
|
|
let expr0_0 = AluRmiROpcode::Or;
|
|
|
|
let expr1_0 = constructor_alu_rmi_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
let expr1_0 = constructor_alu_rmi_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -615,7 +615,7 @@ pub fn constructor_xor<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/inst.isle line 624.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 581.
|
|
|
|
let expr0_0 = AluRmiROpcode::Xor;
|
|
|
|
let expr0_0 = AluRmiROpcode::Xor;
|
|
|
|
let expr1_0 = constructor_alu_rmi_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
let expr1_0 = constructor_alu_rmi_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -627,7 +627,7 @@ pub fn constructor_imm<C: Context>(ctx: &mut C, arg0: Type, arg1: u64) -> Option
|
|
|
|
if pattern0_0 == I64 {
|
|
|
|
if pattern0_0 == I64 {
|
|
|
|
let pattern2_0 = arg1;
|
|
|
|
let pattern2_0 = arg1;
|
|
|
|
if let Some(pattern3_0) = C::nonzero_u64_fits_in_u32(ctx, pattern2_0) {
|
|
|
|
if let Some(pattern3_0) = C::nonzero_u64_fits_in_u32(ctx, pattern2_0) {
|
|
|
|
// Rule at src/isa/x64/inst.isle line 653.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 610.
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr0_0: Type = I64;
|
|
|
|
let expr1_0 = C::temp_writable_reg(ctx, expr0_0);
|
|
|
|
let expr1_0 = C::temp_writable_reg(ctx, expr0_0);
|
|
|
|
let expr2_0 = OperandSize::Size32;
|
|
|
|
let expr2_0 = OperandSize::Size32;
|
|
|
|
@@ -644,7 +644,7 @@ pub fn constructor_imm<C: Context>(ctx: &mut C, arg0: Type, arg1: u64) -> Option
|
|
|
|
if pattern0_0 == F32 {
|
|
|
|
if pattern0_0 == F32 {
|
|
|
|
let pattern2_0 = arg1;
|
|
|
|
let pattern2_0 = arg1;
|
|
|
|
if pattern2_0 == 0 {
|
|
|
|
if pattern2_0 == 0 {
|
|
|
|
// Rule at src/isa/x64/inst.isle line 682.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 639.
|
|
|
|
let expr0_0: Type = F32;
|
|
|
|
let expr0_0: Type = F32;
|
|
|
|
let expr1_0 = C::temp_writable_reg(ctx, expr0_0);
|
|
|
|
let expr1_0 = C::temp_writable_reg(ctx, expr0_0);
|
|
|
|
let expr2_0 = C::writable_reg_to_reg(ctx, expr1_0);
|
|
|
|
let expr2_0 = C::writable_reg_to_reg(ctx, expr1_0);
|
|
|
|
@@ -659,7 +659,7 @@ pub fn constructor_imm<C: Context>(ctx: &mut C, arg0: Type, arg1: u64) -> Option
|
|
|
|
let expr6_0 = C::emit(ctx, &expr5_0);
|
|
|
|
let expr6_0 = C::emit(ctx, &expr5_0);
|
|
|
|
return Some(expr2_0);
|
|
|
|
return Some(expr2_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Rule at src/isa/x64/inst.isle line 641.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 598.
|
|
|
|
let expr0_0: Type = F32;
|
|
|
|
let expr0_0: Type = F32;
|
|
|
|
let expr1_0 = SseOpcode::Movd;
|
|
|
|
let expr1_0 = SseOpcode::Movd;
|
|
|
|
let expr2_0: Type = I32;
|
|
|
|
let expr2_0: Type = I32;
|
|
|
|
@@ -672,7 +672,7 @@ pub fn constructor_imm<C: Context>(ctx: &mut C, arg0: Type, arg1: u64) -> Option
|
|
|
|
if pattern0_0 == F64 {
|
|
|
|
if pattern0_0 == F64 {
|
|
|
|
let pattern2_0 = arg1;
|
|
|
|
let pattern2_0 = arg1;
|
|
|
|
if pattern2_0 == 0 {
|
|
|
|
if pattern2_0 == 0 {
|
|
|
|
// Rule at src/isa/x64/inst.isle line 694.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 651.
|
|
|
|
let expr0_0: Type = F64;
|
|
|
|
let expr0_0: Type = F64;
|
|
|
|
let expr1_0 = C::temp_writable_reg(ctx, expr0_0);
|
|
|
|
let expr1_0 = C::temp_writable_reg(ctx, expr0_0);
|
|
|
|
let expr2_0 = C::writable_reg_to_reg(ctx, expr1_0);
|
|
|
|
let expr2_0 = C::writable_reg_to_reg(ctx, expr1_0);
|
|
|
|
@@ -687,7 +687,7 @@ pub fn constructor_imm<C: Context>(ctx: &mut C, arg0: Type, arg1: u64) -> Option
|
|
|
|
let expr6_0 = C::emit(ctx, &expr5_0);
|
|
|
|
let expr6_0 = C::emit(ctx, &expr5_0);
|
|
|
|
return Some(expr2_0);
|
|
|
|
return Some(expr2_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Rule at src/isa/x64/inst.isle line 645.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 602.
|
|
|
|
let expr0_0: Type = F64;
|
|
|
|
let expr0_0: Type = F64;
|
|
|
|
let expr1_0 = SseOpcode::Movq;
|
|
|
|
let expr1_0 = SseOpcode::Movq;
|
|
|
|
let expr2_0: Type = I64;
|
|
|
|
let expr2_0: Type = I64;
|
|
|
|
@@ -700,7 +700,7 @@ pub fn constructor_imm<C: Context>(ctx: &mut C, arg0: Type, arg1: u64) -> Option
|
|
|
|
if let Some((pattern1_0, pattern1_1)) = C::multi_lane(ctx, pattern0_0) {
|
|
|
|
if let Some((pattern1_0, pattern1_1)) = C::multi_lane(ctx, pattern0_0) {
|
|
|
|
let pattern2_0 = arg1;
|
|
|
|
let pattern2_0 = arg1;
|
|
|
|
if pattern2_0 == 0 {
|
|
|
|
if pattern2_0 == 0 {
|
|
|
|
// Rule at src/isa/x64/inst.isle line 672.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 629.
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::writable_reg_to_reg(ctx, expr0_0);
|
|
|
|
let expr1_0 = C::writable_reg_to_reg(ctx, expr0_0);
|
|
|
|
let expr2_0 = constructor_sse_xor_op(ctx, pattern0_0)?;
|
|
|
|
let expr2_0 = constructor_sse_xor_op(ctx, pattern0_0)?;
|
|
|
|
@@ -717,7 +717,7 @@ pub fn constructor_imm<C: Context>(ctx: &mut C, arg0: Type, arg1: u64) -> Option
|
|
|
|
}
|
|
|
|
}
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
if pattern1_0 == 0 {
|
|
|
|
if pattern1_0 == 0 {
|
|
|
|
// Rule at src/isa/x64/inst.isle line 659.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 616.
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::writable_reg_to_reg(ctx, expr0_0);
|
|
|
|
let expr1_0 = C::writable_reg_to_reg(ctx, expr0_0);
|
|
|
|
let expr2_0 = C::operand_size_of_type(ctx, pattern0_0);
|
|
|
|
let expr2_0 = C::operand_size_of_type(ctx, pattern0_0);
|
|
|
|
@@ -733,7 +733,7 @@ pub fn constructor_imm<C: Context>(ctx: &mut C, arg0: Type, arg1: u64) -> Option
|
|
|
|
let expr6_0 = C::emit(ctx, &expr5_0);
|
|
|
|
let expr6_0 = C::emit(ctx, &expr5_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Rule at src/isa/x64/inst.isle line 634.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 591.
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::operand_size_of_type(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::operand_size_of_type(ctx, pattern0_0);
|
|
|
|
let expr2_0 = MInst::Imm {
|
|
|
|
let expr2_0 = MInst::Imm {
|
|
|
|
@@ -758,7 +758,7 @@ pub fn constructor_shift_r<C: Context>(
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern3_0 = arg3;
|
|
|
|
let pattern3_0 = arg3;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 707.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 664.
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::operand_size_of_type(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::operand_size_of_type(ctx, pattern0_0);
|
|
|
|
let expr2_0 = MInst::ShiftR {
|
|
|
|
let expr2_0 = MInst::ShiftR {
|
|
|
|
@@ -783,7 +783,7 @@ pub fn constructor_m_rotl<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/inst.isle line 716.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 673.
|
|
|
|
let expr0_0 = ShiftKind::RotateLeft;
|
|
|
|
let expr0_0 = ShiftKind::RotateLeft;
|
|
|
|
let expr1_0 = constructor_shift_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
let expr1_0 = constructor_shift_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -799,7 +799,7 @@ pub fn constructor_shl<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/inst.isle line 721.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 678.
|
|
|
|
let expr0_0 = ShiftKind::ShiftLeft;
|
|
|
|
let expr0_0 = ShiftKind::ShiftLeft;
|
|
|
|
let expr1_0 = constructor_shift_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
let expr1_0 = constructor_shift_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -815,7 +815,7 @@ pub fn constructor_shr<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/inst.isle line 726.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 683.
|
|
|
|
let expr0_0 = ShiftKind::ShiftRightLogical;
|
|
|
|
let expr0_0 = ShiftKind::ShiftRightLogical;
|
|
|
|
let expr1_0 = constructor_shift_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
let expr1_0 = constructor_shift_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -831,7 +831,7 @@ pub fn constructor_sar<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/inst.isle line 731.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 688.
|
|
|
|
let expr0_0 = ShiftKind::ShiftRightArithmetic;
|
|
|
|
let expr0_0 = ShiftKind::ShiftRightArithmetic;
|
|
|
|
let expr1_0 = constructor_shift_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
let expr1_0 = constructor_shift_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -849,7 +849,7 @@ pub fn constructor_cmp_rmi_r<C: Context>(
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern3_0 = arg3;
|
|
|
|
let pattern3_0 = arg3;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 736.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 693.
|
|
|
|
let expr0_0 = MInst::CmpRmiR {
|
|
|
|
let expr0_0 = MInst::CmpRmiR {
|
|
|
|
size: pattern0_0.clone(),
|
|
|
|
size: pattern0_0.clone(),
|
|
|
|
opcode: pattern1_0.clone(),
|
|
|
|
opcode: pattern1_0.clone(),
|
|
|
|
@@ -874,7 +874,7 @@ pub fn constructor_cmp<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/inst.isle line 745.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 702.
|
|
|
|
let expr0_0 = CmpOpcode::Cmp;
|
|
|
|
let expr0_0 = CmpOpcode::Cmp;
|
|
|
|
let expr1_0 = constructor_cmp_rmi_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
let expr1_0 = constructor_cmp_rmi_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -890,7 +890,7 @@ pub fn constructor_test<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/inst.isle line 750.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 707.
|
|
|
|
let expr0_0 = CmpOpcode::Test;
|
|
|
|
let expr0_0 = CmpOpcode::Test;
|
|
|
|
let expr1_0 = constructor_cmp_rmi_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
let expr1_0 = constructor_cmp_rmi_r(ctx, pattern0_0, &expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -908,7 +908,7 @@ pub fn constructor_cmove<C: Context>(
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern3_0 = arg3;
|
|
|
|
let pattern3_0 = arg3;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 755.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 712.
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::operand_size_of_type(ctx, pattern0_0);
|
|
|
|
let expr1_0 = C::operand_size_of_type(ctx, pattern0_0);
|
|
|
|
let expr2_0 = MInst::Cmove {
|
|
|
|
let expr2_0 = MInst::Cmove {
|
|
|
|
@@ -936,7 +936,7 @@ pub fn constructor_movzx<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/inst.isle line 763.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 720.
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr1_0 = MInst::MovzxRmR {
|
|
|
|
let expr1_0 = MInst::MovzxRmR {
|
|
|
|
ext_mode: pattern1_0.clone(),
|
|
|
|
ext_mode: pattern1_0.clone(),
|
|
|
|
@@ -958,7 +958,7 @@ pub fn constructor_movsx<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/inst.isle line 770.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 727.
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr1_0 = MInst::MovsxRmR {
|
|
|
|
let expr1_0 = MInst::MovsxRmR {
|
|
|
|
ext_mode: pattern1_0.clone(),
|
|
|
|
ext_mode: pattern1_0.clone(),
|
|
|
|
@@ -982,7 +982,7 @@ pub fn constructor_xmm_rm_r<C: Context>(
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern3_0 = arg3;
|
|
|
|
let pattern3_0 = arg3;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 777.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 734.
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr1_0 = MInst::XmmRmR {
|
|
|
|
let expr1_0 = MInst::XmmRmR {
|
|
|
|
op: pattern1_0.clone(),
|
|
|
|
op: pattern1_0.clone(),
|
|
|
|
@@ -999,7 +999,7 @@ pub fn constructor_xmm_rm_r<C: Context>(
|
|
|
|
pub fn constructor_paddb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_paddb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 784.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 741.
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr1_0 = SseOpcode::Paddb;
|
|
|
|
let expr1_0 = SseOpcode::Paddb;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1010,7 +1010,7 @@ pub fn constructor_paddb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> O
|
|
|
|
pub fn constructor_paddw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_paddw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 789.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 746.
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr1_0 = SseOpcode::Paddw;
|
|
|
|
let expr1_0 = SseOpcode::Paddw;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1021,7 +1021,7 @@ pub fn constructor_paddw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> O
|
|
|
|
pub fn constructor_paddd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_paddd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 794.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 751.
|
|
|
|
let expr0_0: Type = I32X4;
|
|
|
|
let expr0_0: Type = I32X4;
|
|
|
|
let expr1_0 = SseOpcode::Paddd;
|
|
|
|
let expr1_0 = SseOpcode::Paddd;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1032,7 +1032,7 @@ pub fn constructor_paddd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> O
|
|
|
|
pub fn constructor_paddq<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_paddq<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 799.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 756.
|
|
|
|
let expr0_0: Type = I64X2;
|
|
|
|
let expr0_0: Type = I64X2;
|
|
|
|
let expr1_0 = SseOpcode::Paddq;
|
|
|
|
let expr1_0 = SseOpcode::Paddq;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1043,7 +1043,7 @@ pub fn constructor_paddq<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> O
|
|
|
|
pub fn constructor_paddsb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_paddsb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 804.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 761.
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr1_0 = SseOpcode::Paddsb;
|
|
|
|
let expr1_0 = SseOpcode::Paddsb;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1054,7 +1054,7 @@ pub fn constructor_paddsb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) ->
|
|
|
|
pub fn constructor_paddsw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_paddsw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 809.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 766.
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr1_0 = SseOpcode::Paddsw;
|
|
|
|
let expr1_0 = SseOpcode::Paddsw;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1065,7 +1065,7 @@ pub fn constructor_paddsw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) ->
|
|
|
|
pub fn constructor_paddusb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_paddusb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 814.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 771.
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr1_0 = SseOpcode::Paddusb;
|
|
|
|
let expr1_0 = SseOpcode::Paddusb;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1076,7 +1076,7 @@ pub fn constructor_paddusb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) ->
|
|
|
|
pub fn constructor_paddusw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_paddusw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 819.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 776.
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr1_0 = SseOpcode::Paddusw;
|
|
|
|
let expr1_0 = SseOpcode::Paddusw;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1087,7 +1087,7 @@ pub fn constructor_paddusw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) ->
|
|
|
|
pub fn constructor_psubb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_psubb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 824.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 781.
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr1_0 = SseOpcode::Psubb;
|
|
|
|
let expr1_0 = SseOpcode::Psubb;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1098,7 +1098,7 @@ pub fn constructor_psubb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> O
|
|
|
|
pub fn constructor_psubw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_psubw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 829.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 786.
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr1_0 = SseOpcode::Psubw;
|
|
|
|
let expr1_0 = SseOpcode::Psubw;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1109,7 +1109,7 @@ pub fn constructor_psubw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> O
|
|
|
|
pub fn constructor_psubd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_psubd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 834.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 791.
|
|
|
|
let expr0_0: Type = I32X4;
|
|
|
|
let expr0_0: Type = I32X4;
|
|
|
|
let expr1_0 = SseOpcode::Psubd;
|
|
|
|
let expr1_0 = SseOpcode::Psubd;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1120,7 +1120,7 @@ pub fn constructor_psubd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> O
|
|
|
|
pub fn constructor_psubq<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_psubq<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 839.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 796.
|
|
|
|
let expr0_0: Type = I64X2;
|
|
|
|
let expr0_0: Type = I64X2;
|
|
|
|
let expr1_0 = SseOpcode::Psubq;
|
|
|
|
let expr1_0 = SseOpcode::Psubq;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1131,7 +1131,7 @@ pub fn constructor_psubq<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> O
|
|
|
|
pub fn constructor_psubsb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_psubsb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 844.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 801.
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr1_0 = SseOpcode::Psubsb;
|
|
|
|
let expr1_0 = SseOpcode::Psubsb;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1142,7 +1142,7 @@ pub fn constructor_psubsb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) ->
|
|
|
|
pub fn constructor_psubsw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_psubsw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 849.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 806.
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr1_0 = SseOpcode::Psubsw;
|
|
|
|
let expr1_0 = SseOpcode::Psubsw;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1153,7 +1153,7 @@ pub fn constructor_psubsw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) ->
|
|
|
|
pub fn constructor_psubusb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_psubusb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 854.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 811.
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr1_0 = SseOpcode::Psubusb;
|
|
|
|
let expr1_0 = SseOpcode::Psubusb;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1164,7 +1164,7 @@ pub fn constructor_psubusb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) ->
|
|
|
|
pub fn constructor_psubusw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_psubusw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 859.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 816.
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr1_0 = SseOpcode::Psubusw;
|
|
|
|
let expr1_0 = SseOpcode::Psubusw;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1175,7 +1175,7 @@ pub fn constructor_psubusw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) ->
|
|
|
|
pub fn constructor_pavgb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_pavgb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 864.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 821.
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr1_0 = SseOpcode::Pavgb;
|
|
|
|
let expr1_0 = SseOpcode::Pavgb;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1186,7 +1186,7 @@ pub fn constructor_pavgb<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> O
|
|
|
|
pub fn constructor_pavgw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_pavgw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 869.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 826.
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr1_0 = SseOpcode::Pavgw;
|
|
|
|
let expr1_0 = SseOpcode::Pavgw;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1197,7 +1197,7 @@ pub fn constructor_pavgw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> O
|
|
|
|
pub fn constructor_pand<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_pand<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 874.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 831.
|
|
|
|
let expr0_0: Type = F32X4;
|
|
|
|
let expr0_0: Type = F32X4;
|
|
|
|
let expr1_0 = SseOpcode::Pand;
|
|
|
|
let expr1_0 = SseOpcode::Pand;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1208,7 +1208,7 @@ pub fn constructor_pand<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Op
|
|
|
|
pub fn constructor_andps<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_andps<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 879.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 836.
|
|
|
|
let expr0_0: Type = F32X4;
|
|
|
|
let expr0_0: Type = F32X4;
|
|
|
|
let expr1_0 = SseOpcode::Andps;
|
|
|
|
let expr1_0 = SseOpcode::Andps;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1219,7 +1219,7 @@ pub fn constructor_andps<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> O
|
|
|
|
pub fn constructor_andpd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_andpd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 884.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 841.
|
|
|
|
let expr0_0: Type = F64X2;
|
|
|
|
let expr0_0: Type = F64X2;
|
|
|
|
let expr1_0 = SseOpcode::Andpd;
|
|
|
|
let expr1_0 = SseOpcode::Andpd;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1230,7 +1230,7 @@ pub fn constructor_andpd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> O
|
|
|
|
pub fn constructor_por<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_por<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 889.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 846.
|
|
|
|
let expr0_0: Type = F32X4;
|
|
|
|
let expr0_0: Type = F32X4;
|
|
|
|
let expr1_0 = SseOpcode::Por;
|
|
|
|
let expr1_0 = SseOpcode::Por;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1241,7 +1241,7 @@ pub fn constructor_por<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Opt
|
|
|
|
pub fn constructor_orps<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_orps<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 894.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 851.
|
|
|
|
let expr0_0: Type = F32X4;
|
|
|
|
let expr0_0: Type = F32X4;
|
|
|
|
let expr1_0 = SseOpcode::Orps;
|
|
|
|
let expr1_0 = SseOpcode::Orps;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1252,7 +1252,7 @@ pub fn constructor_orps<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Op
|
|
|
|
pub fn constructor_orpd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_orpd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 899.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 856.
|
|
|
|
let expr0_0: Type = F64X2;
|
|
|
|
let expr0_0: Type = F64X2;
|
|
|
|
let expr1_0 = SseOpcode::Orpd;
|
|
|
|
let expr1_0 = SseOpcode::Orpd;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1263,7 +1263,7 @@ pub fn constructor_orpd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Op
|
|
|
|
pub fn constructor_pxor<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_pxor<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 904.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 861.
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr1_0 = SseOpcode::Pxor;
|
|
|
|
let expr1_0 = SseOpcode::Pxor;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1274,7 +1274,7 @@ pub fn constructor_pxor<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Op
|
|
|
|
pub fn constructor_xorps<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_xorps<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 909.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 866.
|
|
|
|
let expr0_0: Type = F32X4;
|
|
|
|
let expr0_0: Type = F32X4;
|
|
|
|
let expr1_0 = SseOpcode::Xorps;
|
|
|
|
let expr1_0 = SseOpcode::Xorps;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1285,7 +1285,7 @@ pub fn constructor_xorps<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> O
|
|
|
|
pub fn constructor_xorpd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_xorpd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 914.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 871.
|
|
|
|
let expr0_0: Type = F64X2;
|
|
|
|
let expr0_0: Type = F64X2;
|
|
|
|
let expr1_0 = SseOpcode::Xorpd;
|
|
|
|
let expr1_0 = SseOpcode::Xorpd;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1296,7 +1296,7 @@ pub fn constructor_xorpd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> O
|
|
|
|
pub fn constructor_pmullw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_pmullw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 919.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 876.
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr1_0 = SseOpcode::Pmullw;
|
|
|
|
let expr1_0 = SseOpcode::Pmullw;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1307,7 +1307,7 @@ pub fn constructor_pmullw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) ->
|
|
|
|
pub fn constructor_pmulld<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_pmulld<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 924.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 881.
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr1_0 = SseOpcode::Pmulld;
|
|
|
|
let expr1_0 = SseOpcode::Pmulld;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1318,7 +1318,7 @@ pub fn constructor_pmulld<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) ->
|
|
|
|
pub fn constructor_pmulhw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_pmulhw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 929.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 886.
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr1_0 = SseOpcode::Pmulhw;
|
|
|
|
let expr1_0 = SseOpcode::Pmulhw;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1329,7 +1329,7 @@ pub fn constructor_pmulhw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) ->
|
|
|
|
pub fn constructor_pmulhuw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_pmulhuw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 934.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 891.
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr1_0 = SseOpcode::Pmulhuw;
|
|
|
|
let expr1_0 = SseOpcode::Pmulhuw;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1340,7 +1340,7 @@ pub fn constructor_pmulhuw<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) ->
|
|
|
|
pub fn constructor_pmuldq<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_pmuldq<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 939.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 896.
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr1_0 = SseOpcode::Pmuldq;
|
|
|
|
let expr1_0 = SseOpcode::Pmuldq;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1351,7 +1351,7 @@ pub fn constructor_pmuldq<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) ->
|
|
|
|
pub fn constructor_pmuludq<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_pmuludq<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 944.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 901.
|
|
|
|
let expr0_0: Type = I64X2;
|
|
|
|
let expr0_0: Type = I64X2;
|
|
|
|
let expr1_0 = SseOpcode::Pmuludq;
|
|
|
|
let expr1_0 = SseOpcode::Pmuludq;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1362,7 +1362,7 @@ pub fn constructor_pmuludq<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) ->
|
|
|
|
pub fn constructor_punpckhwd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_punpckhwd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 949.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 906.
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr1_0 = SseOpcode::Punpckhwd;
|
|
|
|
let expr1_0 = SseOpcode::Punpckhwd;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1373,7 +1373,7 @@ pub fn constructor_punpckhwd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem)
|
|
|
|
pub fn constructor_punpcklwd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_punpcklwd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 954.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 911.
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr0_0: Type = I16X8;
|
|
|
|
let expr1_0 = SseOpcode::Punpcklwd;
|
|
|
|
let expr1_0 = SseOpcode::Punpcklwd;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1384,7 +1384,7 @@ pub fn constructor_punpcklwd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem)
|
|
|
|
pub fn constructor_andnps<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_andnps<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 959.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 916.
|
|
|
|
let expr0_0: Type = F32X4;
|
|
|
|
let expr0_0: Type = F32X4;
|
|
|
|
let expr1_0 = SseOpcode::Andnps;
|
|
|
|
let expr1_0 = SseOpcode::Andnps;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1395,7 +1395,7 @@ pub fn constructor_andnps<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) ->
|
|
|
|
pub fn constructor_andnpd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_andnpd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 964.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 921.
|
|
|
|
let expr0_0: Type = F64X2;
|
|
|
|
let expr0_0: Type = F64X2;
|
|
|
|
let expr1_0 = SseOpcode::Andnpd;
|
|
|
|
let expr1_0 = SseOpcode::Andnpd;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1406,7 +1406,7 @@ pub fn constructor_andnpd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) ->
|
|
|
|
pub fn constructor_pandn<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_pandn<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 969.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 926.
|
|
|
|
let expr0_0: Type = F64X2;
|
|
|
|
let expr0_0: Type = F64X2;
|
|
|
|
let expr1_0 = SseOpcode::Pandn;
|
|
|
|
let expr1_0 = SseOpcode::Pandn;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1427,7 +1427,7 @@ pub fn constructor_xmm_rm_r_imm<C: Context>(
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern3_0 = arg3;
|
|
|
|
let pattern3_0 = arg3;
|
|
|
|
let pattern4_0 = arg4;
|
|
|
|
let pattern4_0 = arg4;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 974.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 931.
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr1_0 = C::temp_writable_reg(ctx, expr0_0);
|
|
|
|
let expr1_0 = C::temp_writable_reg(ctx, expr0_0);
|
|
|
|
let expr2_0 = MInst::XmmRmRImm {
|
|
|
|
let expr2_0 = MInst::XmmRmRImm {
|
|
|
|
@@ -1455,7 +1455,7 @@ pub fn constructor_palignr<C: Context>(
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern3_0 = arg3;
|
|
|
|
let pattern3_0 = arg3;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 986.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 943.
|
|
|
|
let expr0_0 = SseOpcode::Palignr;
|
|
|
|
let expr0_0 = SseOpcode::Palignr;
|
|
|
|
let expr1_0 = constructor_xmm_rm_r_imm(
|
|
|
|
let expr1_0 = constructor_xmm_rm_r_imm(
|
|
|
|
ctx, &expr0_0, pattern0_0, pattern1_0, pattern2_0, pattern3_0,
|
|
|
|
ctx, &expr0_0, pattern0_0, pattern1_0, pattern2_0, pattern3_0,
|
|
|
|
@@ -1473,7 +1473,7 @@ pub fn constructor_pshufd<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/inst.isle line 995.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 952.
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr1_0 = C::temp_writable_reg(ctx, expr0_0);
|
|
|
|
let expr1_0 = C::temp_writable_reg(ctx, expr0_0);
|
|
|
|
let expr2_0 = C::writable_reg_to_reg(ctx, expr1_0);
|
|
|
|
let expr2_0 = C::writable_reg_to_reg(ctx, expr1_0);
|
|
|
|
@@ -1498,7 +1498,7 @@ pub fn constructor_xmm_unary_rm_r<C: Context>(
|
|
|
|
) -> Option<Reg> {
|
|
|
|
) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1008.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 965.
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr1_0 = C::temp_writable_reg(ctx, expr0_0);
|
|
|
|
let expr1_0 = C::temp_writable_reg(ctx, expr0_0);
|
|
|
|
let expr2_0 = MInst::XmmUnaryRmR {
|
|
|
|
let expr2_0 = MInst::XmmUnaryRmR {
|
|
|
|
@@ -1514,7 +1514,7 @@ pub fn constructor_xmm_unary_rm_r<C: Context>(
|
|
|
|
// Generated as internal constructor for term pmovsxbw.
|
|
|
|
// Generated as internal constructor for term pmovsxbw.
|
|
|
|
pub fn constructor_pmovsxbw<C: Context>(ctx: &mut C, arg0: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_pmovsxbw<C: Context>(ctx: &mut C, arg0: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1015.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 972.
|
|
|
|
let expr0_0 = SseOpcode::Pmovsxbw;
|
|
|
|
let expr0_0 = SseOpcode::Pmovsxbw;
|
|
|
|
let expr1_0 = constructor_xmm_unary_rm_r(ctx, &expr0_0, pattern0_0)?;
|
|
|
|
let expr1_0 = constructor_xmm_unary_rm_r(ctx, &expr0_0, pattern0_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -1523,7 +1523,7 @@ pub fn constructor_pmovsxbw<C: Context>(ctx: &mut C, arg0: &RegMem) -> Option<Re
|
|
|
|
// Generated as internal constructor for term pmovzxbw.
|
|
|
|
// Generated as internal constructor for term pmovzxbw.
|
|
|
|
pub fn constructor_pmovzxbw<C: Context>(ctx: &mut C, arg0: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_pmovzxbw<C: Context>(ctx: &mut C, arg0: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1020.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 977.
|
|
|
|
let expr0_0 = SseOpcode::Pmovzxbw;
|
|
|
|
let expr0_0 = SseOpcode::Pmovzxbw;
|
|
|
|
let expr1_0 = constructor_xmm_unary_rm_r(ctx, &expr0_0, pattern0_0)?;
|
|
|
|
let expr1_0 = constructor_xmm_unary_rm_r(ctx, &expr0_0, pattern0_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -1539,7 +1539,7 @@ pub fn constructor_xmm_rm_r_evex<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/inst.isle line 1025.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 982.
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr1_0 = C::temp_writable_reg(ctx, expr0_0);
|
|
|
|
let expr1_0 = C::temp_writable_reg(ctx, expr0_0);
|
|
|
|
let expr2_0 = MInst::XmmRmREvex {
|
|
|
|
let expr2_0 = MInst::XmmRmREvex {
|
|
|
|
@@ -1557,7 +1557,7 @@ pub fn constructor_xmm_rm_r_evex<C: Context>(
|
|
|
|
pub fn constructor_vpmullq<C: Context>(ctx: &mut C, arg0: &RegMem, arg1: Reg) -> Option<Reg> {
|
|
|
|
pub fn constructor_vpmullq<C: Context>(ctx: &mut C, arg0: &RegMem, arg1: Reg) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1037.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 994.
|
|
|
|
let expr0_0 = Avx512Opcode::Vpmullq;
|
|
|
|
let expr0_0 = Avx512Opcode::Vpmullq;
|
|
|
|
let expr1_0 = constructor_xmm_rm_r_evex(ctx, &expr0_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr1_0 = constructor_xmm_rm_r_evex(ctx, &expr0_0, pattern0_0, pattern1_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -1573,7 +1573,7 @@ pub fn constructor_xmm_rmi_reg<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/inst.isle line 1044.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1001.
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr1_0 = C::temp_writable_reg(ctx, expr0_0);
|
|
|
|
let expr1_0 = C::temp_writable_reg(ctx, expr0_0);
|
|
|
|
let expr2_0 = MInst::XmmRmiReg {
|
|
|
|
let expr2_0 = MInst::XmmRmiReg {
|
|
|
|
@@ -1591,7 +1591,7 @@ pub fn constructor_xmm_rmi_reg<C: Context>(
|
|
|
|
pub fn constructor_psllq<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMemImm) -> Option<Reg> {
|
|
|
|
pub fn constructor_psllq<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMemImm) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1054.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1011.
|
|
|
|
let expr0_0 = SseOpcode::Psllq;
|
|
|
|
let expr0_0 = SseOpcode::Psllq;
|
|
|
|
let expr1_0 = constructor_xmm_rmi_reg(ctx, &expr0_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr1_0 = constructor_xmm_rmi_reg(ctx, &expr0_0, pattern0_0, pattern1_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -1601,7 +1601,7 @@ pub fn constructor_psllq<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMemImm) -
|
|
|
|
pub fn constructor_psrld<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMemImm) -> Option<Reg> {
|
|
|
|
pub fn constructor_psrld<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMemImm) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1059.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1016.
|
|
|
|
let expr0_0 = SseOpcode::Psrld;
|
|
|
|
let expr0_0 = SseOpcode::Psrld;
|
|
|
|
let expr1_0 = constructor_xmm_rmi_reg(ctx, &expr0_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr1_0 = constructor_xmm_rmi_reg(ctx, &expr0_0, pattern0_0, pattern1_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -1611,7 +1611,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> {
|
|
|
|
pub fn constructor_psrlq<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMemImm) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1064.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1021.
|
|
|
|
let expr0_0 = SseOpcode::Psrlq;
|
|
|
|
let expr0_0 = SseOpcode::Psrlq;
|
|
|
|
let expr1_0 = constructor_xmm_rmi_reg(ctx, &expr0_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr1_0 = constructor_xmm_rmi_reg(ctx, &expr0_0, pattern0_0, pattern1_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -1629,7 +1629,7 @@ pub fn constructor_mul_hi<C: Context>(
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern3_0 = arg3;
|
|
|
|
let pattern3_0 = arg3;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1071.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1028.
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr1_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(ctx, pattern0_0);
|
|
|
|
let expr2_0 = C::operand_size_of_type(ctx, pattern0_0);
|
|
|
|
@@ -1658,7 +1658,7 @@ pub fn constructor_mulhi_u<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/inst.isle line 1087.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1044.
|
|
|
|
let expr0_0: bool = false;
|
|
|
|
let expr0_0: bool = false;
|
|
|
|
let expr1_0 = constructor_mul_hi(ctx, pattern0_0, expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
let expr1_0 = constructor_mul_hi(ctx, pattern0_0, expr0_0, pattern1_0, pattern2_0)?;
|
|
|
|
return Some(expr1_0);
|
|
|
|
return Some(expr1_0);
|
|
|
|
@@ -1674,7 +1674,7 @@ pub fn constructor_cmpps<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/inst.isle line 1092.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1049.
|
|
|
|
let expr0_0 = SseOpcode::Cmpps;
|
|
|
|
let expr0_0 = SseOpcode::Cmpps;
|
|
|
|
let expr1_0 = C::encode_fcmp_imm(ctx, pattern2_0);
|
|
|
|
let expr1_0 = C::encode_fcmp_imm(ctx, pattern2_0);
|
|
|
|
let expr2_0 = OperandSize::Size32;
|
|
|
|
let expr2_0 = OperandSize::Size32;
|
|
|
|
@@ -1693,7 +1693,7 @@ pub fn constructor_cmppd<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/inst.isle line 1105.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1062.
|
|
|
|
let expr0_0 = SseOpcode::Cmppd;
|
|
|
|
let expr0_0 = SseOpcode::Cmppd;
|
|
|
|
let expr1_0 = C::encode_fcmp_imm(ctx, pattern2_0);
|
|
|
|
let expr1_0 = C::encode_fcmp_imm(ctx, pattern2_0);
|
|
|
|
let expr2_0 = OperandSize::Size32;
|
|
|
|
let expr2_0 = OperandSize::Size32;
|
|
|
|
@@ -1714,7 +1714,7 @@ pub fn constructor_gpr_to_xmm<C: Context>(
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern3_0 = arg3;
|
|
|
|
let pattern3_0 = arg3;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1114.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1071.
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr0_0 = C::temp_writable_reg(ctx, pattern0_0);
|
|
|
|
let expr1_0 = MInst::GprToXmm {
|
|
|
|
let expr1_0 = MInst::GprToXmm {
|
|
|
|
op: pattern1_0.clone(),
|
|
|
|
op: pattern1_0.clone(),
|
|
|
|
@@ -1737,7 +1737,7 @@ pub fn constructor_pinsrb<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/inst.isle line 1121.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1078.
|
|
|
|
let expr0_0 = SseOpcode::Pinsrb;
|
|
|
|
let expr0_0 = SseOpcode::Pinsrb;
|
|
|
|
let expr1_0 = OperandSize::Size32;
|
|
|
|
let expr1_0 = OperandSize::Size32;
|
|
|
|
let expr2_0 =
|
|
|
|
let expr2_0 =
|
|
|
|
@@ -1755,7 +1755,7 @@ pub fn constructor_pinsrw<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/inst.isle line 1126.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1083.
|
|
|
|
let expr0_0 = SseOpcode::Pinsrw;
|
|
|
|
let expr0_0 = SseOpcode::Pinsrw;
|
|
|
|
let expr1_0 = OperandSize::Size32;
|
|
|
|
let expr1_0 = OperandSize::Size32;
|
|
|
|
let expr2_0 =
|
|
|
|
let expr2_0 =
|
|
|
|
@@ -1775,7 +1775,7 @@ pub fn constructor_pinsrd<C: Context>(
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern2_0 = arg2;
|
|
|
|
let pattern3_0 = arg3;
|
|
|
|
let pattern3_0 = arg3;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1131.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1088.
|
|
|
|
let expr0_0 = SseOpcode::Pinsrd;
|
|
|
|
let expr0_0 = SseOpcode::Pinsrd;
|
|
|
|
let expr1_0 = constructor_xmm_rm_r_imm(
|
|
|
|
let expr1_0 = constructor_xmm_rm_r_imm(
|
|
|
|
ctx, &expr0_0, pattern0_0, pattern1_0, pattern2_0, pattern3_0,
|
|
|
|
ctx, &expr0_0, pattern0_0, pattern1_0, pattern2_0, pattern3_0,
|
|
|
|
@@ -1793,7 +1793,7 @@ pub fn constructor_insertps<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/inst.isle line 1136.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1093.
|
|
|
|
let expr0_0 = SseOpcode::Insertps;
|
|
|
|
let expr0_0 = SseOpcode::Insertps;
|
|
|
|
let expr1_0 = OperandSize::Size32;
|
|
|
|
let expr1_0 = OperandSize::Size32;
|
|
|
|
let expr2_0 =
|
|
|
|
let expr2_0 =
|
|
|
|
@@ -1805,7 +1805,7 @@ pub fn constructor_insertps<C: Context>(
|
|
|
|
pub fn constructor_movsd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_movsd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1141.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1098.
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr1_0 = SseOpcode::Movsd;
|
|
|
|
let expr1_0 = SseOpcode::Movsd;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
@@ -1816,7 +1816,7 @@ pub fn constructor_movsd<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> O
|
|
|
|
pub fn constructor_movlhps<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
pub fn constructor_movlhps<C: Context>(ctx: &mut C, arg0: Reg, arg1: &RegMem) -> Option<Reg> {
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern0_0 = arg0;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
let pattern1_0 = arg1;
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1146.
|
|
|
|
// Rule at src/isa/x64/inst.isle line 1103.
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr0_0: Type = I8X16;
|
|
|
|
let expr1_0 = SseOpcode::Movlhps;
|
|
|
|
let expr1_0 = SseOpcode::Movlhps;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
let expr2_0 = constructor_xmm_rm_r(ctx, expr0_0, &expr1_0, pattern0_0, pattern1_0)?;
|
|
|
|
|