rust-lang / rust-lang/rust

Tracking Issue for 32-bit ARM DSP intrinsics

Open
#117,237 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

A-SIMD C-tracking-issue O-Arm T-libs
Dominant language
Rust
Stars
119k
Forks
16.2k
PR merge metrics
PR metrics pending

Description

Feature gate: #![feature(stdarch_arm_dsp)]

This is a tracking issue for 32-bit ARM DSP and SIMD32 intrinsics.

Public API
// core::arch::arm
pub struct int8x4_t(i8, i8, i8, i8);
pub struct uint8x4_t(u8, u8, u8, u8);

pub unsafe fn __qadd8(a: int8x4_t, b: int8x4_t) -> int8x4_t;
pub unsafe fn __qsub8(a: int8x4_t, b: int8x4_t) -> int8x4_t;
pub unsafe fn __qsub16(a: int16x2_t, b: int16x2_t) -> int16x2_t;
pub unsafe fn __qadd16(a: int16x2_t, b: int16x2_t) -> int16x2_t;
pub unsafe fn __qasx(a: int16x2_t, b: int16x2_t) -> int16x2_t;
pub unsafe fn __qsax(a: int16x2_t, b: int16x2_t) -> int16x2_t;
pub unsafe fn __sadd16(a: int16x2_t, b: int16x2_t) -> int16x2_t;
pub unsafe fn __sadd8(a: int8x4_t, b: int8x4_t) -> int8x4_t;
pub unsafe fn __smlad(a: int16x2_t, b: int16x2_t, c: i32) -> i32;
pub unsafe fn __smlsd(a: int16x2_t, b: int16x2_t, c: i32) -> i32;
pub unsafe fn __sasx(a: int16x2_t, b: int16x2_t) -> int16x2_t;
pub unsafe fn __sel(a: int8x4_t, b: int8x4_t) -> int8x4_t;
pub unsafe fn __shadd8(a: int8x4_t, b: int8x4_t) -> int8x4_t;
pub unsafe fn __shadd16(a: int16x2_t, b: int16x2_t) -> int16x2_t;
pub unsafe fn __shsub8(a: int8x4_t, b: int8x4_t) -> int8x4_t;
pub unsafe fn __usub8(a: uint8x4_t, b: uint8x4_t) -> uint8x4_t;
pub unsafe fn __ssub8(a: int8x4_t, b: int8x4_t) -> int8x4_t;
pub unsafe fn __shsub16(a: int16x2_t, b: int16x2_t) -> int16x2_t;
pub unsafe fn __smuad(a: int16x2_t, b: int16x2_t) -> i32;
pub unsafe fn __smuadx(a: int16x2_t, b: int16x2_t) -> i32;
pub unsafe fn __smusd(a: int16x2_t, b: int16x2_t) -> i32;
pub unsafe fn __smusdx(a: int16x2_t, b: int16x2_t) -> i32;
pub unsafe fn __usad8(a: int8x4_t, b: int8x4_t) -> u32;
pub unsafe fn __usada8(a: int8x4_t, b: int8x4_t, c: u32) -> u32;

pub struct int16x2_t(i16, i16);
pub struct uint16x2_t(u16, u16);

pub unsafe fn __smulbb(a: int16x2_t, b: int16x2_t) -> i32;
pub unsafe fn __smultb(a: int16x2_t, b: int16x2_t) -> i32;
pub unsafe fn __smulbt(a: int16x2_t, b: int16x2_t) -> i32;
pub unsafe fn __smultt(a: int16x2_t, b: int16x2_t) -> i32;
pub unsafe fn __smulwb(a: int16x2_t, b: i32) -> i32;
pub unsafe fn __smulwt(a: int16x2_t, b: i32) -> i32;
pub unsafe fn __qadd(a: i32, b: i32) -> i32;
pub unsafe fn __qsub(a: i32, b: i32) -> i32;
pub unsafe fn __qdbl(a: i32) -> i32;
pub unsafe fn __smlabb(a: int16x2_t, b: int16x2_t, c: i32) -> i32;
pub unsafe fn __smlabt(a: int16x2_t, b: int16x2_t, c: i32) -> i32;
pub unsafe fn __smlatb(a: int16x2_t, b: int16x2_t, c: i32) -> i32;
pub unsafe fn __smlatt(a: int16x2_t, b: int16x2_t, c: i32) -> i32;
pub unsafe fn __smlawb(a: i32, b: int16x2_t, c: i32) -> i32;
pub unsafe fn __smlawt(a: i32, b: int16x2_t, c: i32) -> i32;
Steps / History
  • Implementation: #...
  • Final comment period (FCP)^1
  • Stabilization PR
Unresolved Questions
  • None yet.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the stdarch_arm_dsp feature gate and the listed core::arch::arm public API. The issue names no implementation files or tests, so locate the relevant Rust standard-library architecture-intrinsics entry points before proceeding. Done requires an implementation PR, completion of the final comment period, and a stabilization PR.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
compilers
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.