From: Vineet Gupta <vineet.gupta@linux.dev>
To: bpf@vger.kernel.org
Cc: bpf@gcc.gnu.org, jose.marchesi@oracle.com, ast@kernel.org,
Eduard Zingerman <eddyz87@gmail.com>,
Yonghong Song <yonghong.song@linux.dev>,
Vineet Gupta <vineet.gupta@linux.dev>
Subject: [PATCH 2/2] bpf, doc: Improve MOV* documentation ...
Date: Wed, 1 Apr 2026 10:01:15 -0700 [thread overview]
Message-ID: <20260401170115.495836-3-vineet.gupta@linux.dev> (raw)
In-Reply-To: <20260401170115.495836-1-vineet.gupta@linux.dev>
- Added some assembly (pseudo-C) snippets.
- Rearrange: MOV content comes before MOVSX.
- MOVSX content itself rearranged: canonical sign extension variant
for {8,16,32}-> 64 moved ahead of the special variant which only
sign extends to 32 and zeroes out the upper bits.
- Remove the hyphen '-' in "sign-extension" to make grep hit all
instances with one pattern.
Signed-off-by: Vineet Gupta <vineet.gupta@linux.dev>
---
.../bpf/standardization/instruction-set.rst | 33 +++++++++++++------
1 file changed, 23 insertions(+), 10 deletions(-)
diff --git a/Documentation/bpf/standardization/instruction-set.rst b/Documentation/bpf/standardization/instruction-set.rst
index fd688c5d3f04..ac61d3be7af2 100644
--- a/Documentation/bpf/standardization/instruction-set.rst
+++ b/Documentation/bpf/standardization/instruction-set.rst
@@ -414,25 +414,38 @@ etc. This specification requires that signed modulo MUST use truncated division
a % n = a - n * trunc(a / n)
-The ``MOVSX`` instruction does a move operation with sign extension.
-``{MOVSX, X, ALU}`` :term:`sign extends<Sign Extend>` 8-bit and 16-bit operands into
-32-bit operands, and zeroes the remaining upper 32 bits.
-``{MOVSX, X, ALU64}`` :term:`sign extends<Sign Extend>` 8-bit, 16-bit, and 32-bit
-operands into 64-bit operands. Unlike other arithmetic instructions,
-``MOVSX`` is only defined for register source operands (``X``).
+For move operations, the ``MOV`` instruction has a few different forms.
+
+``{MOV, X, ALU64}`` means::
+
+ dst = src (e.g. r1 = r2)
``{MOV, K, ALU64}`` means::
dst = (s64)imm
-``{MOV, X, ALU}`` means::
+e.g. r1 = -4; r5 = 9282009
+
+``{MOV, X, ALU}`` has zero extension semantics (upper 32 bits are zeroed)::
dst = (u32)src
+e.g. w5 = w9
+
+The ``MOVSX`` instruction does a move operation with sign extension.
+``{MOVSX, X, ALU64}`` :term:`sign extends<Sign Extend>` 8-bit, 16-bit, and 32-bit
+operands into 64-bit operands.
+
+The ``{MOVSX, X, ALU}`` form has slightly different semantics: it
+:term:`sign extends<Sign Extend>` 8-bit and 16-bit operands into
+32-bit operands, and zeroes the remaining upper 32 bits (similar to ``MOV``).
+
``{MOVSX, X, ALU}`` with 'offset' 8 means::
dst = (u32)(s32)(s8)src
+Unlike other arithmetic instructions,
+``MOVSX`` is only defined for register source operands (``X``).
The ``NEG`` instruction is only defined when the source bit is clear
(``K``).
@@ -605,7 +618,7 @@ For load and store instructions (``LD``, ``LDX``, ``ST``, and ``STX``), the
ABS 1 legacy BPF packet access (absolute) `Legacy BPF Packet access instructions`_
IND 2 legacy BPF packet access (indirect) `Legacy BPF Packet access instructions`_
MEM 3 regular load and store operations `Regular load and store operations`_
- MEMSX 4 sign-extension load operations `Sign-extension load operations`_
+ MEMSX 4 sign extension load operations `Sign extension load operations`_
ATOMIC 6 atomic operations `Atomic operations`_
============= ===== ==================================== =============
@@ -649,10 +662,10 @@ instructions that transfer data between a register and memory.
Where '<size>' is one of: ``B``, ``H``, ``W``, or ``DW``, and
'unsigned size' is one of: u8, u16, u32, or u64.
-Sign-extension load operations
+Sign extension load operations
------------------------------
-The ``MEMSX`` mode modifier is used to encode :term:`sign-extension<Sign Extend>` load
+The ``MEMSX`` mode modifier is used to encode :term:`sign extension<Sign Extend>` load
instructions that transfer data between a register and memory.
``{MEMSX, <size>, LDX}`` means::
--
2.53.0
next prev parent reply other threads:[~2026-04-01 17:02 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-01 17:01 [PATCH 0/2] BPF documentation improvements Vineet Gupta
2026-04-01 17:01 ` [PATCH 1/2] bpf, doc: Clarify Pseudo-C notation and w vs r register usage Vineet Gupta
2026-04-01 17:59 ` bot+bpf-ci
2026-04-01 18:10 ` Vineet Gupta
2026-04-01 17:01 ` Vineet Gupta [this message]
2026-04-01 17:59 ` [PATCH 2/2] bpf, doc: Improve MOV* documentation bot+bpf-ci
2026-04-01 18:28 ` Vineet Gupta
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260401170115.495836-3-vineet.gupta@linux.dev \
--to=vineet.gupta@linux.dev \
--cc=ast@kernel.org \
--cc=bpf@gcc.gnu.org \
--cc=bpf@vger.kernel.org \
--cc=eddyz87@gmail.com \
--cc=jose.marchesi@oracle.com \
--cc=yonghong.song@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox