# [Porting architecture specific intrinsics](https://learn.arm.com/learning-paths/cross-platform/intrinsics/)

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/cross-platform/intrinsics/)
- [Code Migration to Arm](https://learn.arm.com/learning-paths/cross-platform/intrinsics/intro/)
- [Use sse2neon to port code to Arm](https://learn.arm.com/learning-paths/cross-platform/intrinsics/sse2neon/)
- [Use SIMD Everywhere to port code to Arm](https://learn.arm.com/learning-paths/cross-platform/intrinsics/simde/)
- [Find intrinsics in large code bases](https://learn.arm.com/learning-paths/cross-platform/intrinsics/advisor/)
- [Next Steps](https://learn.arm.com/learning-paths/cross-platform/intrinsics/_next-steps/)

## About this Learning Path

|               |               |
|---------------|---------------|
| Skill level:  | Advanced      |
| Reading time: | 30 min        |
| Last updated: | 03 Aug 2026   |

|               |                 |
|---------------|-----------------|
| Author:       | Jason Andrews, Arm [GitHub](https://github.com/jasonrandrews) [LinkedIn](https://linkedin.com/in/jason-andrews-7b05a8) |
| Arm IP:       | [Neoverse](https://support.arm.com/?tab=compute-ip&Product%20Type=Infrastructure%20Processors) [Cortex-A](https://support.arm.com/?tab=compute-ip&Product%20Type=Application%20Processors) |
| Tags:         | [Performance and Architecture](https://learn.arm.com/tag/performance-and-architecture) [Linux](https://learn.arm.com/tag/linux) [Neon](https://learn.arm.com/tag/neon) [SVE](https://learn.arm.com/tag/sve) [Intrinsics](https://learn.arm.com/tag/intrinsics) [Runbook](https://learn.arm.com/tag/runbook) |

### Who is this for?

This is an advanced topic for software developers interested in porting architecture specific intrinsics to Arm processors.

### What will you learn?

Upon completion of this Learning Path, you will be able to:

- Describe what intrinsics are and how to find them in code.
- Evaluate options and use header-only libraries to port architecture-specific intrinsics to Arm.

### Prerequisites

Before starting, you will need the following:

- Some understanding of SIMD concepts.
- An Arm based machine or [cloud instance](https://learn.arm.com/learning-paths/servers-and-cloud-computing/csp/) running Ubuntu Linux.
- Optionally, an `x86_64` machine also running Ubuntu.

### Summary

You’ll port x64 SIMD code to Arm by identifying architecture-specific intrinsics and mapping them to Arm equivalents. You’ll use `sse2neon` for SSE or MMX code, or SIMD Everywhere (SIMDe) when a project also contains AVX. You’ll adjust headers, add the required shim or macros, rebuild on Arm, and use Porting Advisor for Graviton to locate intrinsics in larger repositories.

### Frequently asked questions

<details>
<summary>How do I know if my code uses architecture-specific intrinsics?</summary>
Look for function-like calls from SIMD headers tied to a specific instruction set architecture (ISA), such as SSE, MMX, or AVX on x64. These compiler-provided functions aren’t standard library APIs.
</details>

<details>
<summary>Which option should I use if my codebase mixes SSE and AVX?</summary>
Use SIMD Everywhere (SIMDe). SIMDe supports SSE, MMX, and AVX, while `sse2neon` targets SSE and MMX.
</details>

<details>
<summary>What changes do I need when applying `sse2neon`?</summary>
Adjust the SSE-specific headers for Arm, include `sse2neon.h`, and update the compiler flags for the Arm target. Then, rebuild on an Arm-based platform.
</details>

<details>
<summary>What do I configure when using SIMDe?</summary>
Select the SIMDe header that matches your intrinsics, define the macro shown in the project documentation, and rebuild. SIMDe then maps the intrinsics to portable Arm implementations.
</details>

<details>
<summary>How can I scan a large repository for intrinsics before compiling?</summary>
Use Porting Advisor for Graviton to assess portability and locate intrinsics across the codebase. Install and run the tool, then review its report before editing the sources.
</details>
