Extensions
Forms
1 (1 Legacy)
Data
Intel XED v2026.08.23

ENDBR32 marks the valid targets of indirect CALLs and JMPs in 32-bit code, in legacy protected mode and in compatibility mode, for the indirect branch tracking of Intel’s CET. It is ENDBR64’s twin for those modes, and that page explains the tracking and the 0F 1E hint space that makes both a NOP on processors without it. The two differ only in their last byte: F3 0F 1E FB for ENDBR32, F3 0F 1E FA for ENDBR64.

The mode decides, not the program

Each one ends a tracked branch only in its own modes. In 64-bit mode ENDBR32 is a NOP that does not reset the tracker, so an indirect branch that lands on it there raises #CP as on any other instruction, and in 32-bit code ENDBR64 is just as wrong. What counts is the mode, not the size of pointers: with -mx32 -fcf-protection=branch, GCC 14 and Clang 23 at -O2 still begin functions with ENDBR64, as x32 code runs in 64-bit mode. With -m32 both emit ENDBR32, at the start of every function that can be reached indirectly, as they do with ENDBR64 for 64-bit code.

Tracking state of its own

User and supervisor code have separate trackers, enabled by IA32_U_CET and IA32_S_CET, and ENDBR32 returns the tracker of the current privilege level to idle, as ENDBR64 does. A 32-bit program under a 64-bit kernel runs in compatibility mode, where ENDBR32 is the marker, while the kernel’s own 64-bit code needs ENDBR64.

On this machine

This Zen 5 reported no indirect branch tracking in CPUID (leaf 7, EDX bit 20 clear) and ran both recorded cases as a NOP, changing no register and no flag. AMD’s manuals describe CET’s shadow stacks but list neither ENDBR32 nor ENDBR64; the bytes are a hint NOP there, as on any processor that has no tracking.

Forms

Every encoding of ENDBR32 that Intel XED knows, one row per XED instruction form (iform). How to read the notation.
InstructionEncodingRequires
ENDBR32 ENDBR32F3 0F 1E FBCET

Operation

What the forms do, in pseudocode that our tests run against results recorded on real processors. How to read.

pass                             # a NOP in 64-bit mode
# where it ends the branch, outside 64-bit mode, it clears TRACKER and
# SUPPRESS as ENDBR64 does. In 64-bit mode it does not: after an
# indirect CALL or JMP with tracking on, it is the wrong instruction
# and raises #CP(ENDBRANCH) before it runs, as any but ENDBR64 would

Run on AMD Zen 5 (EPYC 9645): 2 cases. Its cases ran where CPUID reported no CET.

Operands

None: XED lists no operands for this form.

Flags

None: XED records no flag that the forms test or change.

CPUID and processors

Each form belongs to an XED ISA set. A form can be used when the processor reports every CPUID bit of one of its ISA set's alternatives.

CPUID requirements and processors of the XED ISA sets above. Alternatives are separated by “or”; processors follow XED’s chip model, whose AMD processors end with Zen 2, and the CPU data of this site for Zen 3 to Zen 6.
ISA setCPUIDProcessors
CET

CET
CPUID.(EAX=07H,ECX=0):ECX[7] CET

Tiger Lake, Alder Lake, Arrow Lake, Panther Lake, Nova Lake, Sapphire Rapids, Emerald Rapids, Granite Rapids, Diamond Rapids, Sierra Forest, Clearwater Forest, Zen 3, Zen 4, Zen 5, Zen 6

Note: Zen 3 to Zen 6 have the shadow stacks of CET but not its indirect branch tracking, so ENDBR32 and ENDBR64 run on them as hint NOPs. AMD's references for Zen 3, Zen 4 and Zen 5 (55898, 55901, 57238) set CPUID_Fn00000007_ECX_x00[CET_SS] (bit 7) and leave bit 20 of CPUID_Fn00000007_EDX_x00, which Intel gives to indirect branch tracking, reserved and clear.

Note: Zen 6 is listed because Zen 5 has these instructions. GCC's -march sets, which give the other features of Zen 6, leave them out, and AMD has not yet published a Processor Programming Reference for Zen 6.

More CET instructions

Sources

  1. Intel XED v2026.08.23 (commit 0bcb6237345c): forms, encodings, operands, flags, exception classes, attributes, ISA sets, CPUID bits and chip model.
  2. The CPU data of x86-64.net: Zen 3 to Zen 6, from GCC’s -march feature sets and AMD’s Processor Programming References, which the page of each processor cites.
  3. Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 2 (325383-093, September 2026): Volume 2A, page 3-287 (ENDBR32)
  4. Linux kernel documentation: Control-flow Enforcement Technology (CET) Shadow Stack
  5. Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 1 (253665-093, September 2026)
  6. AMD64 Architecture Programmer's Manual, Volume 3: General-Purpose and System Instructions (24594, rev. 3.36, March 2024), Wayback Machine copy of AMD's PDF

The tables are derived from Intel XED, Copyright Intel Corporation, licensed under the Apache License 2.0; x86-64.net converted and reformatted them. The text is our own.