diff options
author | iximeow <me@iximeow.net> | 2023-01-28 21:00:08 -0800 |
---|---|---|
committer | iximeow <me@iximeow.net> | 2023-07-04 19:01:38 -0700 |
commit | f9d3ce1f2f447b55a003ec273642de63d7aa988f (patch) | |
tree | 089af66cf37975f23cef28caeb35344aede9efb3 /LICENSE | |
parent | b577312dd61edaac2551794578ace22287031bdb (diff) |
store non-rex expected bank when first witnessing operand size prefix
the expectation here is that we can set a default `vqp_size` pretty
cheaply (Prefixes::new is one store, on x86_64 anyway...). then, when we
see an `operand_size` prefix, it's rare enough we can pay a little extra
to speculate on *likely* implication, and update some state (`vqp_size`
is *probably* going to be 2 because of it) accordingly. the cases where
`vqp_size` would go unused and this was wasted effort are relativlely
rare.
on the other hand, we can't profitably give `rex` this treatment:
`rex.w` would set `vqp_size` to `qword`, but rex-prefixed instructions
are so often byte-size registers that updating `vqp_size`
(conditionally, no less), is only break-even. so, keep a check for
`rex.w` at use site, where it's only a choice between `qword` or
`whatver-size-a-non-rex.w-prefixed-instruction-would-be-sized`, which
has been kept up to date by speculation when detecting `operand_size`.
Diffstat (limited to 'LICENSE')
0 files changed, 0 insertions, 0 deletions