Skip to content

Instantly share code, notes, and snippets.

View erikcorry's full-sized avatar
๐Ÿ 
Working from home

Erik Corry erikcorry

๐Ÿ 
Working from home
View GitHub Profile
@erikcorry
erikcorry / divmod.s
Created October 10, 2026 09:55
16 bit unsigned divmod for Fructus hand-written
; ============================================================================
; __udivmodhi4_mul - 16 / 16 -> quotient and remainder, unsigned, -mmul version
; ============================================================================
; a in r0, b in r1 -> quotient in r0, remainder in r1
;
; Two arguments and a 32-bit result, so by isa/abi.s this owns r0, r1 and r5
; and must give back r2, r3 and r4.
; This version is picked when using -mmul, which means the CPU has mul and
; recip instructions.
;
@erikcorry
erikcorry / divmod.txt
Created October 10, 2026 09:53
16 bit unsigned divmod for Fructus disassembly
00000000 <divmod>:
0: 90 07 push r7
2: 53 0f or r7, r1, #0
4: 28 51 mov r1, #10
6: a7 cc 1c br eq, r7, r1, 25 <divmod+0x25>
9: 33 39 clz r1, r7
b: 67 3d shl r5, r7, r1
d: c3 2d recip r5, r5, #0
f: 70 0d lsr r5, r5, #1
11: 54 7d or r5, r5, #0x8000
@erikcorry
erikcorry / divmod.c
Created October 10, 2026 09:49
__udivmodhi4 for Fructus
#include <stdint.h>
#define unlikely(x) __builtin_expect(!!(x), 0)
#define likely(x) __builtin_expect(!!(x), 1)
typedef struct {
uint16_t div;
uint16_t mod;
} result;
BUZZY
IMMIX
COCCO
QAJAQ
TRATT
KHAPH
GNASH
SWASH
FLASH
LEASH
COCCO
PUPPY
WRING
LABEL
LEMMA
LEADS
LEASE
LEAST
LEASH
โ•ญโ”€โ”€โ”€ Claude Code v2.0.76 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ โ”‚ Tips for getting started โ”‚
โ”‚ Welcome back! โ”‚ Run /init to create a CLAUDE.md file witโ€ฆ โ”‚
โ”‚ โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚
โ”‚ * โ–โ–›โ–ˆโ–ˆโ–ˆโ–œโ–Œ * โ”‚ Recent activity โ”‚
โ”‚ * โ–โ–œโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–›โ–˜ * โ”‚ No recent activity โ”‚
โ”‚ * โ–˜โ–˜ โ–โ– * โ”‚ โ”‚
โ”‚ โ”‚ โ”‚
โ”‚ Opus 4.5 ยท API Usage Billing โ”‚ โ”‚
@erikcorry
erikcorry / interpreter.txt
Created November 26, 2025 12:04
The LdaSmi bytecode in the V8 interpreter (it also checks if the next bytecode is store-a-on-stack and does that).
1958cc0: 43 0f be 5c 0c 01 movsbl 0x1(%r12,%r9,1),%ebx // ebx = load small int
1958cc6: 49 8d 51 02 lea 0x2(%r9),%rdx // rdx = next bytecode addr
1958cca: 43 0f b6 74 0c 02 movzbl 0x2(%r12,%r9,1),%esi // esi = peek at next bytecode
1958cd0: 8d 04 1b lea (%rbx,%rbx,1),%eax // eax = rbx * 2 (tag smi)
1958cd3: 40 80 fe c1 cmp $0xc1,%sil // is next bc star? (Store accumulator in 'register'.
1958cd7: 73 09 jae 1958ce2 <Builtins_LdaSmiHandler+0x22> // jmp if star
1958cd9: 49 8b 0c f7 mov (%r15,%rsi,8),%rcx // add bytecode to r15, load next bytecode handler.
1958cdd: 4c 8b ca mov %rdx,%r9 // Update bytecode program counter
1958ce0: ff e1 jmp *%rcx // Dispatch to next handler
1958ce2: 48 8b dd mov %rbp
@erikcorry
erikcorry / mask-test.cc
Created November 17, 2025 17:34
AVX load instructions can be made to ignore segfaults on unused data
#include <immintrin.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <sys/mman.h>
// Compile with clang++ -g -mavx512bw -mavx512f -o mask-test mask-test.cc
int main() {
char* addr = (char*)mmap(0, 8192, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
python3 ../../tools/run.py ./mksnapshot --turbo_instruction_scheduling --stress-turbo-late-spilling --target_os=linux --target_arch=x64 --embedded_src gen/embedded.S --predictable --no-use-ic --embedded_variant Default --random-seed 314159265 --startup_src gen/snapshot.cc --native-code-counters --concurrent-builtin-generation --concurrent-turbofan-max-threads=0 --verify-heap
=================================================================
==1412959==ERROR: AddressSanitizer: heap-use-after-free on address 0x75a4a36202c0 at pc 0x5c2e6e9dca2f bp 0x7ffece69cad0 sp 0x7ffece69cac8
READ of size 8 at 0x75a4a36202c0 thread T0
#0 0x5c2e6e9dca2e in v8::internal::VirtualMemory::Free() src/utils/allocation.cc:286:52
#1 0x5c2e6cec2c69 in v8::internal::CodeRange::Free() src/heap/code-range.cc:361:24
#2 0x5c2e6cec2c69 in v8::internal::CodeRange::~CodeRange() src/heap/code-range.cc:93:27
#3 0x5c2e6d66c7c6 in std::__Cr::default_delete<v8::internal::CodeRange>::operator()(v8::internal::CodeRange*) const third_p
@erikcorry
erikcorry / gist:05dcf38ef52cd4f56895496abe850775
Created December 19, 2024 14:51
args.gn to repro test failure
clang_version = "20"
use_rtti = true
use_sysroot = false
v8_enable_pointer_compression_shared_cage = false
v8_enable_external_code_space = false
cppgc_enable_caged_heap = false
icu_use_data_file = false
# These are defines only relevant to Chromium not V8, no need to have them here.
use_aura = false
use_blink = false