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

RDFSBASE copies the base address of the FS segment into a general register. In 64-bit mode FS and GS are the two segments whose base still counts, and on x86-64 Linux FS holds the thread pointer, the address of the running thread’s thread-local storage. With REX.W the whole 64-bit base is read; without it, the low 32 bits, with bits 63:32 of the destination cleared, as Zen 5 recorded. It changes no flag. RDGSBASE reads GS the same way.

When it works

FSGSBASE has its own CPUID bit (leaf 7, EBX bit 0), but support alone is not enough: the kernel must also set CR4.FSGSBASE, or all four instructions raise #UD, at every privilege level. Linux’s documentation tells programs to check HWCAP2_FSGSBASE in the auxiliary vector before using them, as a CPU that has them may run a kernel that has not enabled them. Without them, arch_prctl(ARCH_GET_FS, ...), a system call, returns the same value. They exist only in 64-bit mode.

From C

GCC 14 and Clang 23 provide _readfsbase_u64() and _readfsbase_u32() only with -mfsgsbase or an -march that includes it, such as ivybridge or znver1; none of the x86-64 levels does. At -O2 each call becomes rdfsbase rax (or eax), and two calls stay two instructions: the compilers never merge them, since the base can change in between.

They do not need it for the thread pointer. On Linux the thread’s control block starts with its own address, as the TLS page explains, so __builtin_thread_pointer() compiles to mov rax, qword ptr fs:0 with both compilers, with or without -mfsgsbase, and thread-local variables are reached through FS-relative addresses directly. RDFSBASE is for code that needs the base itself, such as a runtime that saves the old base before it installs another with WRFSBASE.

The instruction table of AMD’s Zen 5 guide lists RDFSBASE as microcoded; a load through fs:0 is an ordinary MOV.

Forms

Every encoding of RDFSBASE that Intel XED knows, one row per XED instruction form (iform). How to read the notation.
InstructionEncodingRequires
RDFSBASE r32/64 64-bit mode only RDFSBASE_GPRyF3 0F AE /0FSGSBASE

Operation

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

dest.write(fsbase)                   # r32: bits 63:32 of the register
                                     # cleared

Run on AMD Zen 5 (EPYC 9645): 3 cases.

Operands

What each form reads and writes, as Intel XED records it: the operands of its syntax, in order, and the implicit ones that the syntax does not name. How to read.
OperandKindAction
RDFSBASE r32/64 64-bit mode only
r32/64explicitwrite
FS baseimplicitread

Flags

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

Intrinsics

The C intrinsics of Clang 23.1.2 that compile to RDFSBASE, each with the form it compiles to and the Clang options it needs. The forms come from compiling every intrinsic and decoding the result with Intel XED; all intrinsics A–Z explains the method.

IntrinsicCompiles to
_readfsbase_u32 unsigned int _readfsbase_u32(void)

RDFSBASE r32/64 Legacy -mfsgsbase

_readfsbase_u64 unsigned long long _readfsbase_u64(void)

RDFSBASE r32/64 Legacy -mfsgsbase

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.

More FSGSBASE 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. Clang's x86 intrinsic headers, LLVM 23.1.2 (commit 85ac56026243): the intrinsics, their signatures and doc comments, and the Clang of that release, which compiled each of them.
  4. Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 2 (325383-093, September 2026): Volume 2B, page 4-542 (RDFSBASE/RDGSBASE)
  5. Linux kernel documentation: Using FS and GS segments in user space applications
  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
  7. Software Optimization Guide for the AMD Zen5 Microarchitecture (58455, rev. 1.00, August 2024), Wayback Machine copy of AMD's ZIP

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 intrinsics and their signatures come from Clang, part of the LLVM Project, licensed under the Apache License 2.0 with LLVM Exceptions. The text is our own.