Commit Graph

18346 Commits

Author SHA1 Message Date
gingerBill
1b75c44508 Change mem.Dynamic_Arena's alignment to be minimum_alignment 2026-06-23 12:18:15 +01:00
gingerBill
e30da0beb3 Remove old dynamic_pool_ aliases 2026-06-23 12:10:26 +01:00
gingerBill
bc1d6eb240 Merge branch 'master' of https://github.com/odin-lang/Odin 2026-06-23 12:10:00 +01:00
gingerBill
a95d45e913 Fix typo 2026-06-23 12:09:51 +01:00
gingerBill
3b56706439 Merge pull request #6471 from Carlyle-Foster/master
rename DEFAULT_PAGE_SIZE to PAGE_SIZE
2026-06-23 12:08:37 +01:00
gingerBill
8f83598750 Correct numerous issues with SDL3 and add missing procedures 2026-06-23 12:03:36 +01:00
gingerBill
0fdc0fd9da Merge pull request #5662 from leecommamichael/stbtt_types
[vendor:stb_truetype] amend PackFontRanges types
2026-06-23 11:51:19 +01:00
gingerBill
e3729aefc3 Add Maybe to SDL3 RenderGeometry 2026-06-23 11:50:33 +01:00
gingerBill
5ba39f42ea Improve error message on calls with varying argument count 2026-06-23 11:49:00 +01:00
gingerBill
a20363c2bf Add windows.GetConsoleScreenBufferInfoEx 2026-06-23 11:46:37 +01:00
gingerBill
8397c83560 Merge pull request #5508 from Paul-Andre/print-errors-before-assert
Flush accumulated errors before printing assert
2026-06-23 11:41:48 +01:00
gingerBill
38fa18023d Use intrinsics.count_leading_zeros internally for math.next_power_of_two 2026-06-23 11:39:19 +01:00
0cch0
003c05dbb4 Update Xlib documentation link to current PDF 2026-06-23 15:39:22 +07:00
kalsprite
04b614e1ad update ecdsa to use asn1 2026-06-22 22:41:42 -07:00
bennyyip
7bbfc50430 core:text/regex: improve compiler performance 2026-06-23 09:45:10 +08:00
gingerBill
8afac0f32f Ignore the previous commit :D 2026-06-22 16:15:26 +01:00
gingerBill
13832011fa Add core:time/tzdata to examples/all 2026-06-22 16:12:44 +01:00
gingerBill
36e14eba48 Merge branch 'master' into bill/rexcode 2026-06-22 15:44:52 +01:00
gingerBill
3bbeecea41 Merge branch 'master' of https://github.com/odin-lang/Odin 2026-06-22 15:41:52 +01:00
gingerBill
d16a37e649 Add warning to help very large return values (partially fixes #6568) 2026-06-22 15:41:43 +01:00
Jeroen van Rijn
6bae6eb3f1 Clarify "it" 2026-06-22 15:46:02 +02:00
Jeroen van Rijn
8148b04a6c Add missing word. 2026-06-22 15:44:11 +02:00
Jeroen van Rijn
778d3b97b6 Add comment to odin root about why there's no newline
Add comment to `odin root` about why there's no newline, and why we closed #6834 and #6871.

Future such pull requests will be closed without comment.
2026-06-22 15:40:21 +02:00
gingerBill
6cf57c1eaa Fix #6863 2026-06-22 13:17:43 +01:00
gingerBill
d1eaf5a209 Merge branch 'master' into bill/rexcode 2026-06-22 12:58:36 +01:00
gingerBill
c843f3bb65 Optimize append_elem for different optimization levels
* For `-o:size` and below, uses the type erased approach
* For `-o:speed` and above, the inlined form is used

This is necessary because a generic `mem_copy_non_overlapping` cannot be optimized when type erasure is used, meaning in a hot path where `append_elem` is used a lot; thus `mem_copy_non_overlapping` becomes a bottleneck.
2026-06-22 12:57:00 +01:00
gingerBill
3834aeec49 Compiler: Improve error propagation when all of the overloads have the same return values 2026-06-22 12:56:25 +01:00
gingerBill
233242f4ea Remove __copy_bits 2026-06-22 12:55:56 +01:00
gingerBill
2aea1d13f1 Improve lb_copy_bits 2026-06-22 12:55:50 +01:00
gingerBill
8971e0f1ec Fix shifting buf in lb_copy_bits 2026-06-22 12:55:45 +01:00
gingerBill
588a8148f2 Remove the now defunct __write_bits and __read_bits 2026-06-22 12:55:33 +01:00
gingerBill
900ebd6b5b Heavily improve reading and writing to bit fields 2026-06-22 12:55:29 +01:00
gingerBill
244430bd4a Allow for struct #raw_union #packed 2026-06-22 12:55:15 +01:00
gingerBill
b3f6d9ce9b doc_writer: String intern constant values expressions 2026-06-22 12:54:50 +01:00
gingerBill
6af1fe3e22 doc writer: Use string interning and minimize the size of the compound literal generation when it is HUGE 2026-06-22 12:54:43 +01:00
gingerBill
a7186b8af0 Minimize error propagation of map[key] indexing 2026-06-22 12:54:02 +01:00
gingerBill
baef272bbd Support constant compound literals 2026-06-22 12:53:27 +01:00
gingerBill
ff8274c4f1 Merge pull request #6870 from Znarf64/raise_signal_on_child_crash
Raise child process error signal if `odin run` child gets terminated.
2026-06-22 12:52:08 +01:00
gingerBill
67cd466974 Fix the mistake caused by #6845 2026-06-22 12:45:44 +01:00
Franz
5dd0041eb2 Raise child process error signal if odin run child gets terminated.
Previously one would get a nice `$ pid segmentation fault (core dumped) odin run .` message,
but this behaviour was (probably unintentionally) removed in #6848.
2026-06-22 12:32:39 +02:00
gingerBill
577889383d Merge pull request #6861 from BradLewis/fix/parse-multiline-ternary
Correct divergence with expr levels causing failures with the odin parser
2026-06-21 23:08:05 +01:00
gingerBill
1c5c490bdd Merge pull request #6848 from A1029384756/subprocess
[subprocess] move away from `system` for `odin run`
2026-06-21 10:09:37 +01:00
Brad Lewis
76fb0aa975 Correct divergence with expr levels causing failures with the odin parser 2026-06-20 15:42:43 +10:00
gingerBill
604c6f85f1 Merge pull request #6859 from Raykiru/master
Fix: tuples are not handled properly in struct literals
2026-06-19 16:08:16 +01:00
Brendan Punsky
89ef64c490 rexcode/x86: form-match memoization cache for the matcher path
The matcher path (generic builders, hand-built, decode->re-encode) resolves an
instruction to its encoding form by linearly scanning the forms for its mnemonic
and operand-matching each -- the dominant cost on that path. Memoize it: pack
(mnemonic, per-operand shape) into a key (immediates folded to the smallest size
class they fit, matching imm_matches_inline) and cache key -> form so a repeated
instruction shape skips the scan.

Direct-mapped, fixed 8192-slot table (64 KB, no allocation). Each slot packs the
full 48-bit key and form index into one u64, read/written with relaxed atomics,
so concurrent encode() stays safe -- a reader sees a matching key or rescans,
never a torn entry. The scan stays the source of truth (a miss runs it and
records the result), so the cache is exact.

Lookup + scan live in a non-inlined find_form() so they don't bloat encode()'s
hot loop and slow the hint path that shares it. (Routing the matcher path through
the recipe emit was tried and dropped: it costs the hint path ~1.2-1.5 ns however
isolated -- the hot loop is too codegen-sensitive -- while the cache alone is
free for the hint path.)

Realistic generic-builder mix: matcher ~52 -> ~35 ns/inst (~1.49x); hint path
unchanged. Byte-exact across 2282 + idempotent.
2026-06-19 10:49:10 -04:00
Brendan Punsky
9be899e6c7 rexcode/x86: recipe fast path handles memory r/m operands
Extend emit_recipe to the full ModR/M + SIB + displacement addressing (register
direct, RIP-relative, absolute [disp32], and base/index/scale/disp), mirroring
the interpreter byte-for-byte, and drop the caller's reg-direct guard so memory
operands take the fast path too. Only a label/relative immediate (a relocation)
still falls back.

Realistic immediate-heavy mix: ~20.1 -> ~12.9 ns/inst vs the pre-recipe base
(~1.55x, 50 -> 77 M/s). Byte-exact across 2282 + idempotent.
2026-06-19 10:49:10 -04:00
Brendan Punsky
ac0589daa1 rexcode/x86: emit-descriptor fast path (precompiled per-form recipe)
Precompute each encoding form into a flat Form_Recipe -- prefix byte, escape+
opcode blob, role->operand-index slots, ext, imm size, flags -- so the encoder
replays common forms straight-line instead of re-interpreting enc.ops/enc.enc
on every instruction (the resolve scan, escape ladder, prefix/REX selection).

encode() takes the fast path when the form is hinted, eligible, has a register
r/m and a literal immediate; everything else falls through to the existing
interpreter, which stays the byte-exact source of truth. First cut:
  - reg-direct ModR/M only (memory r/m falls back)
  - hint path only (matcher / generic builders fall back)
  - ~33% of forms eligible (VEX/EVEX, 16-bit operand-size, x87 fixed-ModR/M,
    moffs/far/rel/implicit operands are marked ineligible)

Recipes are built at startup into static storage (no heap); this moves into the
table generator (#loaded like every other table) once the shape settles.

Realistic immediate-heavy mix: ~19.0 -> ~16.3 ns/inst (52.7 -> 61.3 M/s).
Byte-exact across 2282 cases + idempotent.

Next: memory r/m addressing in the fast path, then the matcher path, then the
gen-time port.
2026-06-19 10:49:10 -04:00
ARay
912a45769b fix issue 6853:
when iterating the values of an array literal,if one of the values
is a function with multiple returns, it doesn't offset the struct
field index by the number of values.
2026-06-19 16:52:51 +03:00
ARay
3db074900f comment out dead code: val is not used anywhere else in that scope 2026-06-19 15:05:23 +03:00
gingerBill
de0d2ae178 Optimize append_elem for different optimization levels
* For `-o:size` and below, uses the type erased approach
* For `-o:speed` and above, the inlined form is used

This is necessary because a generic `mem_copy_non_overlapping` cannot be optimized when type erasure is used, meaning in a hot path where `append_elem` is used a lot; thus `mem_copy_non_overlapping` becomes a bottleneck.
2026-06-19 11:19:16 +01:00