Instruction
SYSENTER
Enters the kernel at the address and stack in the SYSENTER MSRs at ring 0, without saving a return point; used by 32-bit systems.
- Extensions
- Forms
- 1 (1 Legacy)
- Data
- Intel XED v2026.08.23
SYSENTER switches to privilege level 0 using three MSRs: IA32_SYSENTER_CS (174H) gives the kernel’s code segment, and the stack segment follows it in the GDT; IA32_SYSENTER_EIP (176H) the entry point; IA32_SYSENTER_ESP (175H) the kernel stack pointer. It saves neither the return address nor the user’s stack pointer, and it clears IF, so the kernel starts with interrupts off. Executed in IA-32e mode it enters 64-bit mode.
The caller must leave its return address and stack pointer where the kernel can find them. SYSEXIT returns to privilege level 3 at the address in RDX (EDX) with the stack pointer in RCX (ECX), to 32-bit code or, with REX.W, to 64-bit code. On 32-bit Linux a function of the vDSO wraps the pair, so programs never execute SYSENTER themselves (see the system call conventions). With FRED enabled, SYSENTER delivers an event like SYSCALL.
Forms
| Instruction | Encoding | Requires |
|---|---|---|
SYSENTER
SYSENTER | 0F 34 | SEP |
Latency and throughput
| Model | SYSENTER |
|---|---|
| Sandy Bridge | 100 / 0.33p015 |
| Haswell, Broadwell, Skylake, Skylake-SP, Ice Lake, Alder Lake, Sapphire Rapids | 100 / 0.25p0156 |
| Lunar Lake | 100 / 0.17p012345 |
| Bonnell | 100 / 0.5p01 |
| Silvermont | 100 / 1FPC0 |
| Piledriver | 100 / 0.5EX0 EX1 |
| Zen, Zen 2 | 100 / 0.25 |
| Zen 3, Zen 4 | 100 / 25ALU0 ALU1 ALU2 ALU3 |
| Jaguar | 100 / 0.5ALU0 ALU1 |
Operation
What the forms do, in pseudocode that our tests run against results recorded on real processors. How to read.
c = sysenter_cs & 0xFFFC # SYSENTER_CS[15:0], RPL 0
if c == 0:
fault(GP, 0) # a null selector
if not canonical(sysenter_eip):
fault(GP, 0) # as SYSCALL's LSTAR
vm = 0
if_ = 0
rf = 0 # XED's; Intel's manual names VM and
# IF only
cs = c # 64-bit code of DPL 0: CPL 0
ss = c + 8
rsp = sysenter_esp # 64 bits, canonical
rip = sysenter_eip
# the return address is not saved. AMD's processors raise #UD in
# long mode, 64-bit and compatibility, where SYSCALL servesNot run on a processor: on Intel's processors SYSENTER is a system call of the program that runs it, which the probe never makes.
Operands
| Operand | Kind | Action |
|---|---|---|
SYSENTER | ||
RIP | implicit | write |
RSP | implicit | write |
RFLAGS | implicit | write |
Flags
| IF | RF | VM |
|---|---|---|
| All forms | ||
| 0 | 0 | 0 |
Attributes
What else XED records about the forms. How to read.
- All forms
- not in real-address mode; may abort a TSX transaction
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 |
|---|---|---|
SEP | SEP | Every x86-64 processor in XED’s model and Zen 3 to Zen 6 |
More SYSENTER/SYSEXIT 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. - LLVM 23.1.2's x86 scheduling models (commit
85ac56026243): the latency, reciprocal throughput and ports of each form, as llvm-mca reports them. - Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 2 (325383-093, September 2026): Volume 2B, page 4-702 (SYSENTER)
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 timings come from LLVM's scheduling models, part of the LLVM Project, licensed under the Apache License 2.0 with LLVM Exceptions. The text is our own.