|
1 | | -use crate::dsl::{Feature::*, Inst, Length::*, Location::*}; |
2 | | -use crate::dsl::{align, fmt, inst, r, rex, vex, w}; |
| 1 | +use crate::dsl::{Feature::*, Inst, Length::*, Location::*, TupleType::*}; |
| 2 | +use crate::dsl::{align, evex, fmt, inst, r, rex, vex, w}; |
3 | 3 |
|
4 | 4 | #[rustfmt::skip] // Keeps instructions on a single line. |
5 | 5 | pub fn list() -> Vec<Inst> { |
6 | 6 | vec![ |
7 | 7 | inst("pabsb", fmt("A", [w(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x38, 0x1C]), _64b | compat | ssse3).alt(avx, "vpabsb_a"), |
8 | 8 | inst("vpabsb", fmt("A", [w(xmm1), r(xmm_m128)]), vex(L128)._66()._0f38().op(0x1C), _64b | compat | avx), |
| 9 | + // FIXME: uncomment once the avx512bw feature is bound |
| 10 | + // inst("vpabsb", fmt("B", [w(xmm1), r(xmm_m128)]), evex(L128, FullMem)._66()._0f38().wig().op(0x1C).r(), _64b | compat | avx512vl | avx512bw), |
9 | 11 | inst("pabsw", fmt("A", [w(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x38, 0x1D]), _64b | compat | ssse3).alt(avx, "vpabsw_a"), |
10 | 12 | inst("vpabsw", fmt("A", [w(xmm1), r(xmm_m128)]), vex(L128)._66()._0f38().op(0x1D), _64b | compat | avx), |
| 13 | + // FIXME: uncomment once the avx512bw feature is bound |
| 14 | + // inst("vpabsw", fmt("B", [w(xmm1), r(xmm_m128)]), evex(L128, FullMem)._66()._0f38().wig().op(0x1D).r(), _64b | compat | avx512vl | avx512bw), |
11 | 15 | inst("pabsd", fmt("A", [w(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x38, 0x1E]), _64b | compat | ssse3).alt(avx, "vpabsd_a"), |
12 | 16 | inst("vpabsd", fmt("A", [w(xmm1), r(xmm_m128)]), vex(L128)._66()._0f38().op(0x1E), _64b | compat | avx), |
| 17 | + inst("vpabsd", fmt("C", [w(xmm1), r(xmm_m128)]), evex(L128, Full)._66()._0f38().w0().op(0x1E).r(), _64b | compat | avx512vl | avx512f), |
| 18 | + inst("vpabsq", fmt("C", [w(xmm1), r(xmm_m128)]), evex(L128, Full)._66()._0f38().w1().op(0x1F).r(), _64b | compat | avx512vl | avx512f), |
13 | 19 | ] |
14 | 20 | } |
0 commit comments