68d075e18b
The 3 bits that represent rsp are used as a signaling mechanism to choose between compact base + disp encoding and full base + disp + scale*index encoding, one byte longer. If a base is encoded as rsp in the MOD R/M byte, an SIB byte follows. r12 shares its 3 bottom bits with rsp, so we need to treat it like rsp when deciding whether or not we need an SIB byte. (As usual registers r8-15's distinguishing upper bit is carried by a REX/VEX prefix.) rsp is also treated as a special signal in the index field of the SIB byte, meaning essentially scale=0, and as a result it's not possible to use rsp as an index. It _is_ possible to use r12 as an index, with a test added here. This worked without any code change. It seems the index=rsp -> scale=0 signal is triggered by all four bits of the index registger, including the X upper bit from REX/VEX. I have found these charts useful: https://wiki.osdev.org/X86-64_Instruction_Encoding#32.2F64-bit_addressing_2 Looking at those charts I noticed that rbp/r13 are also special cases, so I'm eyeing them warily and will avoid using them for now. Change-Id: Id78f826a39c060b03000eae7c50c642ef44d57db Reviewed-on: https://skia-review.googlesource.com/c/skia/+/306237 Reviewed-by: Herb Derby <herb@google.com> Commit-Queue: Mike Klein <mtklein@google.com> |
||
---|---|---|
animations | ||
bench | ||
bin | ||
build/fuchsia | ||
build_overrides | ||
client_utils/android | ||
demos.skia.org | ||
dm | ||
docker | ||
docs/examples | ||
example | ||
experimental | ||
fuzz | ||
gm | ||
gn | ||
include | ||
infra | ||
modules | ||
platform_tools | ||
resources | ||
samplecode | ||
site | ||
specs | ||
src | ||
tests | ||
third_party | ||
tools | ||
.clang-format | ||
.clang-tidy | ||
.gitignore | ||
.gn | ||
AUTHORS | ||
BUILD.gn | ||
codereview.settings | ||
CONTRIBUTING | ||
CQ_COMMITTERS | ||
DEPS | ||
go.mod | ||
go.sum | ||
LICENSE | ||
OWNERS | ||
PRESUBMIT.py | ||
public.bzl | ||
README | ||
README.chromium | ||
RELEASE_NOTES.txt | ||
whitespace.txt |
Skia is a complete 2D graphic library for drawing Text, Geometries, and Images. See full details, and build instructions, at https://skia.org.