Logo
Articles Compilers Libraries Books MiniBooklets Assembly C++ Rust Go Linux CPU Others Videos
Advertisement

Article by Ayman Alheraki on January 11 2026 10:34 AM

M Series ARM64 Registers Overview

M Series ARM64 Registers Overview

Apple’s M Series processors, including the M1, M1 Pro, M1 Max, M1 Ultra, and M2, are based on the ARM64 architecture. ARM processors use a Reduced Instruction Set Computing (RISC) architecture, and the M Series chips follow the ARMv8-A architecture (or later), which supports the 64-bit instruction set. Understanding the ARM64 registers is essential for working with low-level programming on these chips.

The ARM64 architecture has different types of registers for handling various tasks. These include general-purpose registers, special-purpose registers, and floating-point registers. Below is a detailed description of each type of register used in ARM64 along with tables that declare them.

1. General-Purpose Registers (GPRs)

In ARM64, there are 31 general-purpose registers, typically used for holding data, pointers, and addresses. These registers are 64 bits wide and are named X0 to X30. Each register can also be accessed in a 32-bit form, named W0 to W30, for operations that need less data.

  • X0 to X30: These are 64-bit registers used for integer operations, addresses, and general data storage.

  • W0 to W30: These are the 32-bit low halves of the 64-bit registers, used for operations requiring 32-bit data.

Additionally, ARM64 has a special-purpose general register called the Zero Register, which behaves differently based on how it’s used:

  • XZR: The 64-bit zero register always returns zero when read from.

  • WZR: The 32-bit zero register is the 32-bit version, also always returning zero.

General-Purpose Registers Table

Register64-bit Name32-bit NameDescription
X0X0W0First argument or return value
X1X1W1Second argument or return value
X2X2W2Third argument
X3X3W3Fourth argument
X4X4W4Fifth argument
X5X5W5Sixth argument
X6X6W6Seventh argument
X7X7W7Eighth argument
X8X8W8Indirect result location or scratch
X9X9W9Temporary/scratch register
X10X10W10Temporary/scratch register
X11X11W11Temporary/scratch register
X12X12W12Temporary/scratch register
X13X13W13Temporary/scratch register
X14X14W14Temporary/scratch register
X15X15W15Temporary/scratch register
X16X16W16Intra-Procedure-call scratch (IP0)
X17X17W17Intra-Procedure-call scratch (IP1)
X18X18W18Platform-specific (e.g., TLS pointer)
X19X19W19Callee-saved register
X20X20W20Callee-saved register
X21X21W21Callee-saved register
X22X22W22Callee-saved register
X23X23W23Callee-saved register
X24X24W24Callee-saved register
X25X25W25Callee-saved register
X26X26W26Callee-saved register
X27X27W27Callee-saved register
X28X28W28Callee-saved register
X29X29W29Frame pointer (FP)
X30X30W30Link register (LR)
XZRXZRWZRZero register

2. Special-Purpose Registers

ARM64 also includes a number of special-purpose registers used for specific tasks like managing the program flow, memory access, and system control. Some of the key special-purpose registers are:

  • SP (Stack Pointer): Points to the top of the stack in memory. The stack is used for storing local variables and managing function calls.

  • PC (Program Counter): Holds the address of the next instruction to be executed.

  • FP (Frame Pointer): Typically used to maintain a stable reference point in the stack for local variables and function arguments.

  • LR (Link Register): Stores the return address for function calls.

Special-Purpose Registers Table

RegisterDescription
SPStack Pointer, points to the top of the current stack
PCProgram Counter, holds the next instruction address
FPFrame Pointer, used to manage stack frames
LRLink Register, stores the return address for functions

3. Floating-Point and SIMD Registers (Neon Registers)

The M series ARM64 architecture includes 32 floating-point registers, labeled V0 to V31. These registers are 128 bits wide and are used for both floating-point and SIMD (Single Instruction Multiple Data) operations. SIMD is used in vectorized operations, where a single instruction operates on multiple data points, enabling higher performance in tasks like multimedia processing, scientific computations, and cryptography.

Each floating-point register can be accessed in different widths depending on the operation:

  • Vn: Full 128-bit register.

  • Dn: 64-bit subset of the V register.

  • Sn: 32-bit subset of the V register.

  • Hn: 16-bit subset of the V register.

Floating-Point and SIMD Registers Table

Register128-bit Name64-bit Name32-bit Name16-bit NameDescription
V0V0D0S0H0Floating-point/SIMD register 0
V1V1D1S1H1Floating-point/SIMD register 1
V2V2D2S2H2Floating-point/SIMD register 2
V3V3D3S3H3Floating-point/SIMD register 3
V4V4D4S4H4Floating-point/SIMD register 4
V5V5D5S5H5Floating-point/SIMD register 5
V6V6D6S6H6Floating-point/SIMD register 6
V7V7D7S7H7Floating-point/SIMD register 7
V8V8D8S8H8Floating-point/SIMD register 8
V9V9D9S9H9Floating-point/SIMD register 9
V10V10D10S10H10Floating-point/SIMD register 10
V11V11D11S11H11Floating-point/SIMD register 11
V12V12D12S12H12Floating-point/SIMD register 12
V13V13D13S13H13Floating-point/SIMD register 13
V14V14D14S14H14Floating-point/SIMD register 14
V15V15D15S15H15Floating-point/SIMD register 15
V16V16D16S16H16Floating-point/SIMD register 16
V17V17D17S17H17Floating-point/SIMD register 17
V18V18D18S18H18Floating-point/SIMD register 18
V19V19D19S19H19Floating-point/SIMD register 19
V20V20D20S20H20Floating-point/SIMD register 20
V21V21D21S21H21Floating-point/SIMD register 21
V22V22D22S22H22Floating-point/SIMD register 22
V23V23D23S23H23Floating-point/SIMD register 23
V24V24D24S24H24Floating-point/SIMD register 24
V25V25D25S25H25Floating-point/SIMD register 25
V26V26D26S26H26Floating-point/SIMD register 26
V27V27D27S27H27Floating-point/SIMD register 27
V28V28D28S28H28Floating-point/SIMD register 28
V29V29D29S29H29Floating-point/SIMD register 29
V30V30D30S30H30Floating-point/SIMD register 30
V31V31D31S31H31Floating-point/SIMD register 31

4. System Control Registers

ARM64 also includes system control registers, used for managing the operating environment, controlling caches, enabling exceptions, and more. These registers are typically accessible only in privileged (kernel or supervisor) modes.

Examples of system control registers include:

  • SCTLR (System Control Register): Controls cache, memory alignment, and other system features.

  • TTBR (Translation Table Base Register): Stores the base address of page tables for memory management.

  • ESR (Exception Syndrome Register): Holds information about the cause of an exception.

The ARM64 architecture in Apple’s M Series chips provides a set of powerful registers, each designed to optimize the handling of data, memory addresses, floating-point operations, and system control. Understanding these registers is key to effectively programming low-level applications or performing optimizations for Apple Silicon-powered devices.

Advertisements

Responsive Counter
General Counter
1275053
Daily Counter
293