Claude
04f1f94a21
Vectors for kernels: masks and select, shuffles and byte lookup, dot_add, @cpu and cpu_has; --cpu native on Nix
...
- comparisons of vectors give masks (boolxN): select(m, a, b), m.any/all/count, & | ^ !;
f32x8(list, i, fill) and v.store_part(list, i) for the end of a list (masked load/store)
- v.shuffle(constant lanes), v.lo(), v.hi(), concat(a, b), table.lookup(indices):
pshufb / vpshufb on x86 (SSSE3 and up), tbl on ARM64 (checked in the assembly, LLVM 18 and 21)
- acc.dot_add(a, b): i32 lanes gain 4 byte products each, exactly; vpdpbusd with AVX-VNNI or AVX-512 VNNI,
usdot/sdot/udot on ARM64, the sum written out elsewhere (pmaddwd); run here with all three paths agreeing
- @cpu("avx2,fma") fn: LLVM target-features for one function (+evex512 for AVX-512, which LLVM 18+ needs);
cpu_has("avx2"): CPUID + XGETBV on x86, hwcaps on Linux ARM64, sysctl on macOS; a wide vector can't be passed
between functions with different @cpu (its registers differ), and the compiler says so
- the compiler asks clang which features --cpu means (its predefined macros, cached), so dot_add picks the instruction
- Nix's clang wrapper dropped -march=native in nix-shell (reproduced): finch tells it NIX_ENFORCE_NO_NATIVE=0, shell.nix too,
and warns if --cpu native still made no difference
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Psc42moPLwP43Cmb9oZqSR
2026-11-01 15:41:47 +00:00
..
abi.c
Structs, arrays, owned strings, memory model, modules, debug info
2026-10-08 18:57:37 +02:00
abi.h
Structs, arrays, owned strings, memory model, modules, debug info
2026-10-08 18:57:37 +02:00
basics.fch
Rename the Finch file extension from .fn to .fch
2026-10-08 19:27:42 +02:00
basics.out
Finch 1.0.0
2026-10-08 18:21:06 +02:00
bits.fch
Rename the Finch file extension from .fn to .fch
2026-10-08 19:27:42 +02:00
bits.out
Finch 1.0.0
2026-10-08 18:21:06 +02:00
c_pointers.fch
OpenGL and Vulkan examples; ptr(int)/int(ptr); trailing commas in calls; drop .fn hint
2026-10-08 19:37:34 +02:00
c_pointers.out
OpenGL and Vulkan examples; ptr(int)/int(ptr); trailing commas in calls; drop .fn hint
2026-10-08 19:37:34 +02:00
c_structs.fch
Rename the Finch file extension from .fn to .fch
2026-10-08 19:27:42 +02:00
c_structs.out
Structs, arrays, owned strings, memory model, modules, debug info
2026-10-08 18:57:37 +02:00
cimport.fch
Rename the Finch file extension from .fn to .fch
2026-10-08 19:27:42 +02:00
cimport.out
Finch 1.0.0
2026-10-08 18:21:06 +02:00
control.fch
Rename the Finch file extension from .fn to .fch
2026-10-08 19:27:42 +02:00
control.out
Finch 1.0.0
2026-10-08 18:21:06 +02:00
defer.fch
Rename the Finch file extension from .fn to .fch
2026-10-08 19:27:42 +02:00
defer.out
Structs, arrays, owned strings, memory model, modules, debug info
2026-10-08 18:57:37 +02:00
dot_int8.fch
Vectors for kernels: masks and select, shuffles and byte lookup, dot_add, @cpu and cpu_has; --cpu native on Nix
2026-11-01 15:41:47 +00:00
dot_int8.out
Vectors for kernels: masks and select, shuffles and byte lookup, dot_add, @cpu and cpu_has; --cpu native on Nix
2026-11-01 15:41:47 +00:00
early_exit.fch
Fix the two known limits: adding map keys while looping over the map is a runtime error; temporaries held by an expression are freed when try / or-blocks leave early. err usable after or, inner err shadows outer.
2026-10-25 19:13:46 +01:00
early_exit.out
Fix the two known limits: adding map keys while looping over the map is a runtime error; temporaries held by an expression are freed when try / or-blocks leave early. err usable after or, inner err shadows outer.
2026-10-25 19:13:46 +01:00
errors.fch
Finch 2.4.0: methods, maps, errors as values; str() of any value; macOS and ARM64 docs; Kate support
2026-10-09 01:11:12 +02:00
errors.out
Finch 2.4.0: methods, maps, errors as values; str() of any value; macOS and ARM64 docs; Kate support
2026-10-09 01:11:12 +02:00
exitcode.fch
Rename the Finch file extension from .fn to .fch
2026-10-08 19:27:42 +02:00
exitcode.out
Finch 1.0.0
2026-10-08 18:21:06 +02:00
files.fch
Windows support (wip): target layer, Microsoft x64 ABI, portable runtime, CI
2026-10-08 20:46:51 +02:00
files.out
Windows support (wip): target layer, Microsoft x64 ABI, portable runtime, CI
2026-10-08 20:46:51 +02:00
floatbits.fch
Floats as written, never fused; fma and muladd; f32/f64 bits, f16 and bf16
2026-11-01 15:25:40 +00:00
floatbits.out
Floats as written, never fused; fma and muladd; f32/f64 bits, f16 and bf16
2026-11-01 15:25:40 +00:00
functions.fch
Rename the Finch file extension from .fn to .fch
2026-10-08 19:27:42 +02:00
functions.out
Finch 1.0.0
2026-10-08 18:21:06 +02:00
geometry.fch
Finch 2.4.0: methods, maps, errors as values; str() of any value; macOS and ARM64 docs; Kate support
2026-10-09 01:11:12 +02:00
input.fch
Rename the Finch file extension from .fn to .fch
2026-10-08 19:27:42 +02:00
input.in
Structs, arrays, owned strings, memory model, modules, debug info
2026-10-08 18:57:37 +02:00
input.out
Structs, arrays, owned strings, memory model, modules, debug info
2026-10-08 18:57:37 +02:00
maps.fch
Finch 2.4.0: methods, maps, errors as values; str() of any value; macOS and ARM64 docs; Kate support
2026-10-09 01:11:12 +02:00
maps.out
Finch 2.4.0: methods, maps, errors as values; str() of any value; macOS and ARM64 docs; Kate support
2026-10-09 01:11:12 +02:00
masks.fch
Vectors for kernels: masks and select, shuffles and byte lookup, dot_add, @cpu and cpu_has; --cpu native on Nix
2026-11-01 15:41:47 +00:00
masks.out
Vectors for kernels: masks and select, shuffles and byte lookup, dot_add, @cpu and cpu_has; --cpu native on Nix
2026-11-01 15:41:47 +00:00
memory.fch
Rename the Finch file extension from .fn to .fch
2026-10-08 19:27:42 +02:00
memory.out
Structs, arrays, owned strings, memory model, modules, debug info
2026-10-08 18:57:37 +02:00
methods.fch
Finch 2.4.0: methods, maps, errors as values; str() of any value; macOS and ARM64 docs; Kate support
2026-10-09 01:11:12 +02:00
methods.out
Finch 2.4.0: methods, maps, errors as values; str() of any value; macOS and ARM64 docs; Kate support
2026-10-09 01:11:12 +02:00
methods_basic.fch
boot: methods (fn T.m, self by address, mutation analysis), str() of any value
2026-10-25 19:13:46 +01:00
methods_basic.out
boot: methods (fn T.m, self by address, mutation analysis), str() of any value
2026-10-25 19:13:46 +01:00
modules.fch
Rename the Finch file extension from .fn to .fch
2026-10-08 19:27:42 +02:00
modules.out
Struct defaults apply inside structs; exit() ends an or-block; 1e9 literals; x * 2.0 stays f32; floats print as the shortest exact text; str(x, digits)
2026-10-29 09:14:58 +01:00
pointers.fch
Rename the Finch file extension from .fn to .fch
2026-10-08 19:27:42 +02:00
pointers.out
Windows support (wip): target layer, Microsoft x64 ABI, portable runtime, CI
2026-10-08 20:46:51 +02:00
ptr_value_field.fch
Rename the Finch file extension from .fn to .fch
2026-10-08 19:27:42 +02:00
ptr_value_field.out
Structs, arrays, owned strings, memory model, modules, debug info
2026-10-08 18:57:37 +02:00
shapes.fch
Rename the Finch file extension from .fn to .fch
2026-10-08 19:27:42 +02:00
shuffles.fch
Vectors for kernels: masks and select, shuffles and byte lookup, dot_add, @cpu and cpu_has; --cpu native on Nix
2026-11-01 15:41:47 +00:00
shuffles.out
Vectors for kernels: masks and select, shuffles and byte lookup, dot_add, @cpu and cpu_has; --cpu native on Nix
2026-11-01 15:41:47 +00:00
structs_arrays_strings.fch
Rename the Finch file extension from .fn to .fch
2026-10-08 19:27:42 +02:00
structs_arrays_strings.out
Structs, arrays, owned strings, memory model, modules, debug info
2026-10-08 18:57:37 +02:00
types.fch
Rename the Finch file extension from .fn to .fch
2026-10-08 19:27:42 +02:00
types.out
Finch 1.0.0
2026-10-08 18:21:06 +02:00
vectors.fch
Vectors for kernels: masks and select, shuffles and byte lookup, dot_add, @cpu and cpu_has; --cpu native on Nix
2026-11-01 15:41:47 +00:00
vectors.out
Vector types (SIMD): f32x8, i8x32, f64x4 and the rest; --cpu native
2026-11-01 13:50:35 +00:00