summaryrefslogtreecommitdiff
path: root/src/screen.c
AgeCommit message (Collapse)Author
12 daysOptimize hot loops with direct access, LUTs, and closed-form formulasBerke Güzel
12 daysEliminate pen style and history stream parameter smugglingBerke Güzel
- Introduce struct text_pen bundling (fg, bg, sl) across screen and core - Reduce text_append from 9 to 7 parameters - Reduce text_commit from 8 to 6 parameters - Reduce hist_runs_add_pen from 5 to 3 parameters - Reduce sc_text_ascii and sc_ascii_fast from 6 to 4 parameters - Remove unused fg, bg parameters from mark_row_blank - Introduce struct hist_stream_state in src/hist.c, reducing stream_lines from 9 to 5 params and lf_rows from 10 to 6 params - Introduce struct hist_view_pos in src/hist_view.h, reducing term_hist_view_row_pos from 9 to 7 params
12 daysEncapsulate stream queue context and consolidate forwarding wrappersBerke Güzel
- Create struct stream_emit_ctx packing stream queue arguments into 1 cache line - Reduce emit_stream_bulk_wrapped from 13 parameters to 3 - Reduce flush_stream_queue from 10 parameters to 1 - Extract stream_queue_finish to eliminate duplicated cleanup in kernel instantiations - Replace EMIT_STREAM_ROW macros with typed inline functions - Move pending_wrap clearing directly into term_screen_erase, insert, delete, and scroll - Remove sc_erase_display, sc_erase_line, sc_insert_chars, and sc_delete_chars wrappers - Consolidate term_row and remove duplicated row_fill_gap helper
12 daysOptimize screen scrolling, SIMD wrap padding, and reflow loopsBerke Güzel
- Batch full-screen scroll rotations, eliminating row-by-row scroll loops - Use block memmove for sub-region scrolling, eliminating heap/stack row swaps - Vectorize CELL_WRAP_PAD flag setting with AVX2/SSE2/NEON in screen.h - Replace scalar tab-stop loops with 64-bit word stamping - Optimize active row backwards scan in resize and erase mode 2
12 daysOptimize and simplify loops, table lookups, and branchless parsersBerke Güzel
- Replace sequential colon-counting loop with branchless CTZ bitmask in src/pen.h - Replace linear strchr with 256-bit ASCII punctuation bitmask in src/selection.c - Flatten 3D color cube loop and precompute constants in src/palette.c - Use static 256-byte LUT for hex decoding and bsearch for termcap in src/escape.c - Replace capacity doubling while loops with branchless CLZ pow2 helpers across core - Use direct memset/memcpy in src/snapshot.c - Optimize input digit/byte formatting, alt-prefix path, and make keyboard state optional in src/input.c
13 daysterm: move the term core to subprojects/termBerke Güzel
The core now builds, tests, and benchmarks alone, as a Meson subproject with no dependency on the main tree. - include/term/ holds term.h and the header-only unicode/. src/ holds the core and its private headers. The main tree gets only include/term through term_dep, so it cannot reach a private header. - The term tests, the term benchmarks, the Kitty parser suite, and tools/amalgamate.py and tools/generate_unicode.py move with it. The tests run as term:<name>. - The main build passes its -march (arch_flag) and b_ndebug to the subproject. A directory configured before this commit needs meson configure -Dterm:arch_flag=-march=... once. - The term tests compile with -UNDEBUG. They do work inside assert. - The subproject exports term_test_dep with term_api.h, for the main tree's render, thumbnail, color, and selection tests. - The Kitty bridge used struct vector2i and has not compiled since the public API redesign. It builds again. 2 of its 14 tests fail: REP after a tab, and a cursor report after a resize. - dirgraph.py drops the term and unicode layers. Its self-test uses pty. - The symbols test ignores the __odr_asan symbols that ASan adds. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>