armhub.dev
Cortex-M · 24 pages
Cortex-M

Cortex-M architecture comparison

Every Cortex-M core side by side — pipeline depth, DMIPS/MHz, ISA profile, MPU, FPU, cache, TCM, TrustZone, vector ops, and typical silicon clocks. The single reference table.

5 min read · 1,064 wordsupdated · May 13, 2026

There are now nine commercially relevant Cortex-M cores, spanning three architecture profiles (ARMv6-M, ARMv7-M, ARMv8-M) and four generations of microarchitecture. Picking the right one for a new design is most of the work of picking an MCU — and it's harder than it sounds because vendors mix-and-match optional features. An M33 from STM might have FPU+DSP+TrustZone; an M33 from a low-cost competitor might have only the base feature set. This page is the single reference for what each core can do, not what any specific part does.

The table below covers the architectural envelope. For per-vendor option choices, you have to read the datasheet — there is no shortcut.

At-a-glance summary
Smallest
Cortex-M0 — ~12k gates, no MPU, no divide
Lowest-power for new designs
Cortex-M0+ — 2-stage pipeline, optional MPU, MTB trace
Smallest with TrustZone-M
Cortex-M23 — v8-M Baseline
Default mid-tier
Cortex-M33 — TrustZone, optional FPU+DSP, replaces M3 and M4 for new work
Highest-performance
Cortex-M85 — 3.0 CoreMark/MHz, branch prediction, PAC/BTI
Best for ML inference
Cortex-M55 + Ethos-U — Helium MVE plus dedicated NPU
Highest-clocked legacy
Cortex-M7 — still shipping at 400–550 MHz, no TrustZone

The master comparison table

Cortex-M lineup
sort:
CoreArchPipeDMIPSFPUDSPMPUTZMVENotes
Cortex-M0ARMv6-M3-stage0.84/MHz—Subset of Thumb-2.
Cortex-M0+ARMv6-M2-stage0.95/MHz—Single-cycle I/O port.
Cortex-M23ARMv8-M Baseline2-stage0.99/MHz—Secure & non-secure worlds.
Cortex-M3ARMv7-M3-stage1.25/MHz—The classic mid-range core.
Cortex-M33ARMv8-M Mainline3-stage1.50/MHzSPUsed in nRF53, STM32L5/U5.
Cortex-M4ARMv7E-M3-stage1.25/MHzSPMost popular general-purpose MCU core.
Cortex-M55ARMv8.1-M4-stage1.6/MHzSP/DP4–5× DSP/ML uplift vs. M4.
Cortex-M7ARMv7E-M6-stage2.14/MHzSP/DPUsed in i.MX RT, STM32H7.
Cortex-M85ARMv8.1-M7-stage3.0/MHzSP/DPi.MX RT700, Renesas RA8.

Pipeline depth and IPC

Pipeline depth is a rough proxy for clock-frequency headroom — deeper pipelines mean smaller per-stage logic and faster clocks, at the cost of larger mispredict penalties.

CorePipelineBranch mispredictTypical max silicon clock
M032 cycles~50 MHz (mainstream), 100 MHz (aggressive)
M0+21 cycle~50 MHz (mainstream), 133 MHz (RP2040)
M2321 cycle~32–48 MHz typical
M332 cycles~72–168 MHz
M432 cycles~80–180 MHz
M3332 cycles~64–250 MHz
M5543 cycles~300–500 MHz
M765–7 cycles~400–550 MHz
M8575–7 cycles~400–750 MHz

Note the M85's deeper pipeline doesn't kill perf because of branch prediction — a correctly predicted branch is zero penalty. The M7, with weaker prediction, eats its 5–7 cycle penalty on every mispredicted branch.

Cortex-M0 (3-stage, single-issue) processing four instructions
cycle 1cycle 2cycle 3cycle 4cycle 5cycle 6stage legendFDEXLDR r0, [r1]FDEXADD r2, r0, #1stallFDEXMUL r3, r2, r4stallstallFDEXSTR r3, [r5]stallstallstallFDEX
M0 retires roughly one instruction per cycle through a 3-stage in-order pipe — simple, deterministic, ~0.84 DMIPS/MHz.
Cortex-M7 (6-stage, dual-issue) processing the same workload
cycle 1cycle 2cycle 3cycle 4cycle 5cycle 6cycle 7stage legendF1F2DISEX1EX2LDR r0, [r1] (A)F1F2DISEX1EX2ADD r2, r6, #1 (B)F1F2DISEX1EX2MUL r3, r2, r4 (A)stallF1F2DISEX1EX2STR r3, [r5] (B)stallF1F2DISEX1EX2
M7 issues two independent instructions per cycle through a deeper 6-stage pipe — ~2.14 DMIPS/MHz on cache-friendly code. The cost is a 5–7 cycle mispredict penalty and the cache/DMA coherency burden.

ISA features

What instructions you actually have, by core:

ISA featureM0/M0+M23M3/M4/M7M33M55/M85
Thumb-2 (full)nonoyesyesyes
UDIV / SDIVnoyesyesyesyes
CBZ / CBNZnoyesyesyesyes
IT blocksnonoyesyesyes
DSP saturating (QADD etc.)nonoM4/M7 yesoptionalyes
Bit-bandnonoM3/M4 yes (M7 no)nono
LDREX / STREXnoLDA/STL (v8)yesLDA/STLLDA/STL
CLZnoyesyesyesyes
Helium MVEnonononoyes
PAC / BTInonononoM85 only

Bit-banding (the M3/M4-only feature that aliases each bit of a register region to a word at a different address) is dead in v8-M. Don't write portable code that depends on it.

Memory and bus

CoreBus typeI-cacheD-cacheITCMDTCM
M0von Neumann, single AHBnononono
M0+von Neumann (+ optional SIO)nononono
M23von Neumann, single AHBnononono
M3Harvard (I/D/S buses)nononono
M4Harvardnononono
M33Harvardnonono (vendor SRAM may emulate)no
M55Harvardoptional 4–64 KBoptional 4–64 KBoptional ≤16 MBoptional ≤16 MB
M7Harvard, multiple AHByes 4–64 KByes 4–64 KByes ≤16 MByes ≤16 MB
M85Harvardoptional 4–64 KBoptional 4–64 KBoptional ≤16 MBoptional ≤16 MB

Cache and TCM are big lever points. Cached cores get high mean throughput from flash but require DMA coherency management. TCM gets deterministic single-cycle latency without cache management — the right place for ISRs and DMA buffers.

Security: MPU, TrustZone, PAC/BTI

CoreMPUTrustZone-MPACBTI
M0nononono
M0+optional (v6-M MPU, 8 regions)nonono
M23optional (v8-M MPU, 8 or 16 regions)optionalnono
M3optional (v7-M MPU, 8 regions)nonono
M4optional (v7-M MPU, 8 regions)nonono
M33optional (v8-M MPU, 8 or 16 regions per state)optionalnono
M55optional (v8-M MPU, 16 regions per state)optionalnono
M7optional (v7-M MPU, 8 or 16 regions)nonono
M85optional (v8-M MPU, 16 regions per state)optionalyesyes

The M85 stands alone with PAC and BTI. For products that need certified control-flow integrity, this is currently the only Cortex-M option.

Floating-point

CoreFPUPrecisionLazy stacking
M0/M0+nonesoftware onlyn/a
M23nonesoftware onlyn/a
M3nonesoftware onlyn/a
M4optional FPv4-SPsingleyes
M7optional FPv5-SP, FPv5-DPsingle or doubleyes
M33optional FPv5-SPsingle onlyyes
M55FPv5-SP, optional FPv5-DP, MVE shares regssingle + double + vectoryes
M85FPv5-SP, FPv5-DP, optional MVEsingle + double + vectoryes

If you need double precision, your only choices are M7, M55, or M85. The M33 is single-precision only; double-precision FP on M33 goes through software helpers and is roughly 100× slower than single-precision native.

NVIC priorities and IRQ count

CoreMax IRQsPriority bitsBASEPRIFAULTMASK
M0/M0+322nono
M23240up to 4nono
M3/M4240up to 8yesyes
M33480up to 8yesyes
M55/M85480up to 8yesyes
M7240up to 8yesyes

Most actual silicon ships with 3 or 4 priority bits regardless of architectural maximum. Vendors trim NVIC area aggressively.

DMIPS and CoreMark

CoreDMIPS/MHzCoreMark/MHz
M00.842.33
M0+0.952.46
M230.992.50
M31.253.32
M41.253.40
M331.504.02
M551.604.50 (scalar)
M72.145.04
M853.136.30

Numbers are ARM-published reference benchmarks. Real silicon varies — memory latency, flash wait states, and cache hit rates all skew real-world results by 10–30%.

Choosing a core for a new design

A reasonable decision tree:

  1. Need security partition (TrustZone-M)? → M23, M33, M55, or M85. Skip M0/M0+/M3/M4/M7.
  2. Need ML inference at low power? → M55 + Ethos-U. M85 if no NPU is available.
  3. Need maximum single-thread perf? → M85 (new design) or M7 (legacy / cheaper silicon today).
  4. Need DSP/SIMD without ML? → M33+DSP, M55, or M85. M4 if cost dominates.
  5. Need FPU? → M4, M7, M33+FPU, M55, or M85.
  6. Just need a small low-power core? → M0+ first, M23 if security is required.

Treat M0, M3, and M4 as legacy for new designs — they're fine in established product families but offer nothing v8-M alternatives don't. M7 is the exception: still has the highest deployed install base for high-perf MCU work, and the SP/DP FPU is sometimes cheaper than M85.

Cross-references