Age | Commit message (Collapse) | Author | |
---|---|---|---|
2024-06-19 | clean up warnings, scope unsafe blocks better | iximeow | |
2024-06-19 | write_2 did its job, seem to have reaped all that can be reaped | iximeow | |
2024-06-19 | hoist set_len calls to have fewer live values | iximeow | |
2024-06-19 | more profiling outlining | iximeow | |
2024-06-19 | write_u64 helpers | iximeow | |
2024-06-19 | hint better about codegen for contextualize_intel | iximeow | |
2024-06-19 | configurable inlining to help with opts | iximeow | |
2024-06-18 | helpers for those i8/u8 immediates too | iximeow | |
2024-06-18 | make write_2 work again for comparison (kinda) | iximeow | |
2024-06-18 | more unused arguments | iximeow | |
2024-06-18 | try grouping characters printed with or without segment prefixes | iximeow | |
2024-06-18 | unreachable panics for impossible op_nr. clean this up though.. | iximeow | |
2024-06-18 | inline the write u8/u32 helpers, lets see what that does | iximeow | |
2024-06-18 | move avx512 operand printing off of fmt | iximeow | |
2024-06-18 | whats it do without the unused colors parameter | iximeow | |
2024-06-18 | use hex printer helpers for relative offsets too | iximeow | |
2024-06-18 | use specialized printers for immediate operands | iximeow | |
2024-06-18 | use specialized write helpers for register labels | iximeow | |
2024-06-18 | use get_kinda_unchecked for mem size strings | iximeow | |
if mem_size is ever out of bounds thats a severe bug on its own | |||
2024-06-18 | visit_disp is called in only two places, is tiny.. | iximeow | |
2024-06-18 | write_fixed_size really should always be inlined... | iximeow | |
2024-06-18 | slightly more centralized hex formatting | iximeow | |
2024-06-18 | avoid intermediate buffer and copy of hex-formatted ints | iximeow | |
2024-06-18 | looks like that becomes memcpy, not ideal | iximeow | |
2024-06-18 | actually use small-string specializations when available | iximeow | |
2024-06-18 | write_fixed_size impls for string and BigEnoughString | iximeow | |
2024-06-18 | mem size strings are all 7b or less | iximeow | |
2024-06-18 | move non-avx512 operand printing away from fmt | iximeow | |
2024-06-18 | move away from fmt for visit_i64 and displacements too | iximeow | |
2024-06-18 | less integer formatting in operands | iximeow | |
2024-06-18 | a few more accurate hints | iximeow | |
2024-06-18 | helper to clear BigEnoughString | iximeow | |
2024-06-18 | figuring out how to handle short variable-size strings | iximeow | |
2024-06-18 | enough infratructure to avoid bounds checks, at incredible user cost | iximeow | |
2024-06-17 | add token spans for some registers | iximeow | |
2024-06-17 | might be an ok way to redesign colorization.... | iximeow | |
it turns out that yaxpeax-arch's notion of colorization has been broken from the start for systems that do markup without inline sequences (e.g. windows/cmd.exe before vt100 support) | |||
2024-06-16 | use less of core::fmt, write by hand | iximeow | |
`name()` returning a `[u8; 2]` is nice when there is a specializing and unrolling write implementation, whereas `&str` might not consistently unroll into a simple 2-byte copy (rather than loop). it'll look a little more reasonable soon, hopefully.. | |||
2024-06-16 | remove branch better handled elsewhere | iximeow | |
2024-06-16 | move to shared (safe) impl of RelativeBranchPrinter | iximeow | |
2024-06-16 | commit unshippable wildly unsafe asm-filled printing code | iximeow | |
write_2 will never actually be used, but im adapting it into contextualize in a... better way | |||
2024-06-16 | adapting contextualize_intel to use new operand visitor stuff | iximeow | |
the reasoning for *why* `visit_operand` is better here lives as doc comments on `visit_operand` itself: it avoids going from scattered operand details to `enum Operand` only to deconstruct the enum again. instead, branch arms can get codegen'd directly against `struct Instruction` layout. | |||
2024-06-13 | use a bit of Opcode to indicate rep/repne applicability | iximeow | |
this reduces a `slice::contains` to a single bit test, and regroups prefix printing to deduplicate checks of the `rep` prefix seemingly this reduces instruction counts by about 1%, cycles by 0.3% or so. | |||
2024-04-02 | display: remove some pointless checks | iximeow | |
the match on opcode should have been dce, match on operands would only matter if there was a bug | |||
2024-04-02 | less write, more write_str | iximeow | |
2024-04-02 | lets see how a visitor for operands works out here... | iximeow | |
2024-04-02 | display: gate rep printing with a simpler check | iximeow | |
testing against six opcodes to see if we should print rep or repnz is a bit absurd. they are relatively rare instructions, so this is a long sequence of never-taken tests. we can avoid the whole thing in the common case by testing if there is any kind of rep prefix at all. | |||
2024-04-02 | swap test order for segment override applicability | iximeow | |
it is almost always the case that self.prefixes.segment == Segment::DS, meaning testing for it first avoids checking `self.operands[op].is_memory()` later. this overall avoids a few instructions in the typical path, rather than checking `is_memory()` first (which would always be true in the places this function is called from) | |||
2024-04-02 | display opt: mem size labels and minor segment reporting changes | iximeow | |
for mem size labels: add one new "BUG" entry at the start of the array so `mem_size` does not need to be adjusted before being used to look up a string from the `MEM_SIZE_STRINGS` array. it's hard to measure the direct benefit of this, but it shrinks codegen size by a bit and simplfies a bit of assembly.... for segment reporting changes: stos/scas/lods do not actually need special segment override logic. instead, set their use of `es` when decoded, if appropriate. this is potentially ambiguous; in non-64bit modes the sequence `26aa` would decode as `stos` with explicit `es` prefix. this is now identical to simply decoding `aa`, which now also reports that there is an explicit `es` prefix even though there is no prefix on tne instruction. on the other hand, the prefix-reported segment now more accurately describes the memory selector through which memory accesses will happen. seems ok? | |||
2024-04-02 | correctly label fmt benchmark metrics | iximeow | |
2024-04-02 | the name for instructions and cycles metrics from perf vary by kernel version | iximeow | |
on midgard there is no :u suffix, so try both |