Instruction
ENDBR32
Marks a valid target of an indirect call or jump in 32-bit code for CET indirect branch tracking; a NOP on other processors.
- 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
| Instruction | Encoding | Requires |
|---|---|---|
ENDBR32
ENDBR32 | F3 0F 1E FB | CET |
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 wouldRun 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.
| ISA set | CPUID | Processors |
|---|---|---|
CET | 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
- Intel XED v2026.08.23 (commit
0bcb6237345c): forms, encodings, operands, flags, exception classes, attributes, ISA sets, CPUID bits and chip model. - The CPU data of x86-64.net: Zen 3 to Zen 6, from GCC’s
-marchfeature sets and AMD’s Processor Programming References, which the page of each processor cites. - Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 2 (325383-093, September 2026): Volume 2A, page 3-287 (ENDBR32)
- Linux kernel documentation: Control-flow Enforcement Technology (CET) Shadow Stack
- Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 1 (253665-093, September 2026)
- 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.