Implement all avx2 intrinsics used by the image crate · rust-lang/rust@4381949 (original) (raw)

`@@ -304,7 +304,9 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(

`

304

304

` fx.bcx.ins().sshr(a_lane, saturated_count)

`

305

305

`});

`

306

306

`}

`

307

``

`-

"llvm.x86.sse2.psad.bw" => {

`

``

307

`+

"llvm.x86.sse2.psad.bw" | "llvm.x86.avx2.psad.bw" => {

`

``

308

`+

// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sad_epu8&ig_expand=5770

`

``

309

`+

// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_sad_epu8&ig_expand=5771

`

308

310

`intrinsic_args!(fx, args => (a, b); intrinsic);

`

309

311

``

310

312

`assert_eq!(a.layout(), b.layout());

`

`@@ -335,7 +337,9 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(

`

335

337

` ret.place_lane(fx, out_lane_idx).write_cvalue(fx, res_lane);

`

336

338

`}

`

337

339

`}

`

338

``

`-

"llvm.x86.ssse3.pmadd.ub.sw.128" => {

`

``

340

`+

"llvm.x86.ssse3.pmadd.ub.sw.128" | "llvm.x86.avx2.pmadd.ub.sw" => {

`

``

341

`+

// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maddubs_epi16&ig_expand=4267

`

``

342

`+

// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_maddubs_epi16&ig_expand=4270

`

339

343

`intrinsic_args!(fx, args => (a, b); intrinsic);

`

340

344

``

341

345

`let (lane_count, lane_ty) = a.layout().ty.simd_size_and_type(fx.tcx);

`

`@@ -374,7 +378,9 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(

`

374

378

` ret.place_lane(fx, out_lane_idx).write_cvalue(fx, res_lane);

`

375

379

`}

`

376

380

`}

`

377

``

`-

"llvm.x86.sse2.pmadd.wd" => {

`

``

381

`+

"llvm.x86.sse2.pmadd.wd" | "llvm.x86.avx2.pmadd.wd" => {

`

``

382

`+

// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_madd_epi16&ig_expand=4231

`

``

383

`+

// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_madd_epi16&ig_expand=4234

`

378

384

`intrinsic_args!(fx, args => (a, b); intrinsic);

`

379

385

``

380

386

`assert_eq!(a.layout(), b.layout());

`