about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorYuki Okushi <jtitor@2k36.org>2021-11-05 10:32:41 +0900
committerGitHub <noreply@github.com>2021-11-05 10:32:41 +0900
commitdbaf2de0bb9fd1e89b2abf33f4e4194cc90b273a (patch)
treecf38ad9e513da80eb36bfd816890d3e27454dcbc /src
parent282d696009c74f8fc1487cff3b8dc28e6eb7041b (diff)
parent773cc4f52b7f6bfa5b9ad0878583fb0ac9e9f2ea (diff)
downloadrust-dbaf2de0bb9fd1e89b2abf33f4e4194cc90b273a.tar.gz
rust-dbaf2de0bb9fd1e89b2abf33f4e4194cc90b273a.zip
Rollup merge of #90533 - Smittyvb:patch-1, r=joshtriplett
Add note about x86 instruction prefixes in asm! to unstable book

Since rustc doesn't do the assembly parsing itself, it is unable to detect when inline assembly ends with an instruction prefix, which doesn't make sense since it would apply to instructions from the compiler. This fixes #82314 by mentioning that x86 instruction prefixes must not be used in inline assembly. AFAICT x86 is the only instruction set with instruction prefixes.
Diffstat (limited to 'src')
-rw-r--r--src/doc/unstable-book/src/library-features/asm.md2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/doc/unstable-book/src/library-features/asm.md b/src/doc/unstable-book/src/library-features/asm.md
index 6bf21e8f58b..84fc6dcc339 100644
--- a/src/doc/unstable-book/src/library-features/asm.md
+++ b/src/doc/unstable-book/src/library-features/asm.md
@@ -885,5 +885,7 @@ The compiler performs some additional checks on options:
     - You are responsible for switching any target-specific state (e.g. thread-local storage, stack bounds).
     - The set of memory locations that you may access is the intersection of those allowed by the `asm!` blocks you entered and exited.
 - You cannot assume that an `asm!` block will appear exactly once in the output binary. The compiler is allowed to instantiate multiple copies of the `asm!` block, for example when the function containing it is inlined in multiple places.
+- On x86, inline assembly must not end with an instruction prefix (such as `LOCK`) that would apply to instructions generated by the compiler.
+  - The compiler is currently unable to detect this due to the way inline assembly is compiled, but may catch and reject this in the future.
 
 > **Note**: As a general rule, the flags covered by `preserves_flags` are those which are *not* preserved when performing a function call.