Enable the simd_i16x8_q15mulr_sat_s test on AArch64
Copyright (c) 2021, Arm Limited.
This commit is contained in:
@@ -2228,6 +2228,14 @@ impl MachInstEmit for Inst {
|
||||
VecALUOp::Zip1 => (0b01001110_00_0 | enc_size << 1, 0b001110),
|
||||
VecALUOp::Smull => (0b000_01110_00_1 | enc_size << 1, 0b110000),
|
||||
VecALUOp::Smull2 => (0b010_01110_00_1 | enc_size << 1, 0b110000),
|
||||
VecALUOp::Sqrdmulh => {
|
||||
debug_assert!(
|
||||
size.lane_size() == ScalarSize::Size16
|
||||
|| size.lane_size() == ScalarSize::Size32
|
||||
);
|
||||
|
||||
(0b001_01110_00_1 | enc_size << 1, 0b101101)
|
||||
}
|
||||
};
|
||||
let top11 = match alu_op {
|
||||
VecALUOp::Smull | VecALUOp::Smull2 => top11,
|
||||
|
||||
@@ -3610,6 +3610,30 @@ fn test_aarch64_binemit() {
|
||||
"smull2 v8.2d, v12.4s, v14.4s",
|
||||
));
|
||||
|
||||
insns.push((
|
||||
Inst::VecRRR {
|
||||
alu_op: VecALUOp::Sqrdmulh,
|
||||
rd: writable_vreg(31),
|
||||
rn: vreg(0),
|
||||
rm: vreg(31),
|
||||
size: VectorSize::Size16x8,
|
||||
},
|
||||
"1FB47F6E",
|
||||
"sqrdmulh v31.8h, v0.8h, v31.8h",
|
||||
));
|
||||
|
||||
insns.push((
|
||||
Inst::VecRRR {
|
||||
alu_op: VecALUOp::Sqrdmulh,
|
||||
rd: writable_vreg(7),
|
||||
rn: vreg(7),
|
||||
rm: vreg(23),
|
||||
size: VectorSize::Size32x2,
|
||||
},
|
||||
"E7B4B72E",
|
||||
"sqrdmulh v7.2s, v7.2s, v23.2s",
|
||||
));
|
||||
|
||||
insns.push((
|
||||
Inst::VecMisc {
|
||||
op: VecMisc2::Not,
|
||||
|
||||
@@ -311,6 +311,8 @@ pub enum VecALUOp {
|
||||
Smull,
|
||||
/// Signed multiply long (high halves)
|
||||
Smull2,
|
||||
/// Signed saturating rounding doubling multiply returning high half
|
||||
Sqrdmulh,
|
||||
}
|
||||
|
||||
/// A Vector miscellaneous operation with two registers.
|
||||
@@ -3980,6 +3982,7 @@ impl Inst {
|
||||
VecALUOp::Zip1 => ("zip1", size),
|
||||
VecALUOp::Smull => ("smull", size),
|
||||
VecALUOp::Smull2 => ("smull2", size),
|
||||
VecALUOp::Sqrdmulh => ("sqrdmulh", size),
|
||||
};
|
||||
let rd_size = match alu_op {
|
||||
VecALUOp::Umlal | VecALUOp::Smull | VecALUOp::Smull2 => size.widen(),
|
||||
|
||||
Reference in New Issue
Block a user