# Porting architecture specific 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: | 25 Sep 2026 |

|  |  |
| --- | --- |
| Author: | Jason Andrews , Arm<br>[GitHub](https://github.com/jasonrandrews)<br>[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) [Arm AGI CPU](https://learn.arm.com/tag/arm-agi-cpu) [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?
After completing this Learning Path, you'll be able to perform the following tasks:
- 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'll need the following prerequisites:
- Some understanding of SIMD concepts.
- An Arm based machine such as Arm AGI CPU 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

**How do I know if my code uses architecture-specific intrinsics?**

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.

**Which option should I use if my codebase mixes SSE and AVX?**

Use SIMD Everywhere (SIMDe). SIMDe supports SSE, MMX, and AVX, while `sse2neon` targets SSE and MMX.

<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.

**What do I configure when using SIMDe?**

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.

**How can I scan a large repository for intrinsics before compiling?**

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.
