Resources
This is a collection of resources I have used or plan to use as part of some project. Also, there's a bunch of fun/interesting tech-related stuff to read as well.
Compiler
- A Beginners' Guide to x86-64 Instruction Encoding
- x86-64 ISA / Assembly Programming References
- x86 and amd64 instruction reference
- Intel® 64 and IA-32 Architectures Software Developer's Manual
- Go Source
- Software optimization resources
- An optimization guide for assembly programmers and compiler makers
- Linear Scan Register Allocation on SSA Form
- Loop Invariant Code Motion and Loop Reduction
- Induction Variable Optimizations
- Generation of Fast Interpreters for Huffman Compressed Bytecode
- Bytecode fetch optimization for a Java interpreter
- Optimizing an ANSI C interpreter with superoperators
- Dynamic native optimization of interpreters
- Static and Dynamic Program Compilation by Interpreter Specialization
- fast barrel-shift decoding for in-place execution of Huffman-encoded bytecode streams
- Optimizing direct threaded code by selective inlining
- machine learning for compilers and program optimisation
- MLGO: A Machine Learning Framework for Compiler Optimization
- E-Graphs
- Equality Saturation: Engineering Challenges and Applications
- Equality Saturation: A New Approach to Optimization
- Generating Compiler Optimizations from Proofs
- Rewrite rule inference using equality saturation
- LuaJIT IP
- Performance Speed Limits
- Evaluating Value-Graph Translation Validation for LLVM
- Cranelift, Part 4: A New Register Allocator
- Automatic Tuning of Compilers Using Machine Learning
- Compiler Phase-Ordering for HLS with Deep Reinforcement Learning
- AutoPhase: Compiler Phase-Ordering for High Level Synthesis with Deep Reinforcement Learning
- Parallel trace register allocation
- Trace-based Register Allocation in a JIT Compiler
- Trace Register Allocation Policies: Compile-time vs. Performance Trade-offs
- Pratt Parsing
- Pratt Parsing
- Lua 5.3 Bytecode Reference
- Modulus without Division
- AMD reference manuals
- Generational References and Regions
- fast 6502 code generator
- Working Draft C++
- Coalescing Register Allocation
- PE Format
- Compiler Explorer
- Future Works in LLVM Register Allocation
- Improvements to Linear Scan register allocation
- Decreasing the Number of Memory Accesses
- Ignition: V8 Interpreter
- Halo: coroutine Heap Allocation eLision Optimization: the joint response
- V8 Blog
- JVM Specification
- List of Java bytecode instructions
Artificial Intelligence / Machine Learning
Graphics
- OpenGL
- docs.GL
- The Book of Shaders
- Skia
- Pixel Art Filtering
- Video Editor
- Implementing Weighted, Blended Order-Independent Transparency
- Drawing Bézier Curves
- Drawing Lines is Hard
- Animating With Code
- Font Rasterization
- A Primer on Bézier Curves
- Teardown Frame Teardown
- Toy UI Library
- Creating Custom Fonts
- TTF Parsing
- Graphics Pipeline
- UI Series
- UI Rendering
- SDF Function
- Fast Rounded Rectangle Shadows
- Signed distance fields
- Cool Graphics Blog
Gameboy
Hardware
Reading
- NanoPi R4S — On booting mainline Linux, fixing SD-card support, and a Heisenbug that sucked me into a rabbit hole
- Wii U Architecture
- Vector graphics on GPU
- Graphics Blog
- In Defense Of Linked Lists
- Galois field instructions on 2021 CPUs
- Discovering faster matrix multiplication algorithms with reinforcement learning
- JavaScript engine internals part 2: tagged pointers
- AMD's Zen 4 Part 1: Frontend and Execution Engine
- AMD's Zen 4, Part 2: Memory Subsystem and Conclusion
- Neural Networks and Deep Learning
- What Is an Eigenvalue?
- What Is Fast Matrix Multiplication?
- C++20 Coroutines and io_uring - Part 1/3
- Forking Chrome to turn HTML into SVG
- When Debug Symbols Get Large
- Optimization Story
- Computational complexity of texture encoding
- Ray Marching and Signed Distance Functions
- Implementing Fast Interpreters
- Architecture of Consoles
- The AArch64 processor (aka arm64), part 1: Introduction
- Speculation in JavaScriptCore
- How we ran a Unix-like OS (Xv6) on our home-built CPU with our home-built C compiler
- Cache invalidation really is one of the hardest problems in computer science
- The Witness: A Shader Trick
- Dependent Type Theory
- JavaScript engine internals: NaN-boxing
- How the 8086 processor's microcode engine works
- Padding is hard
- Structure Packing Bitfields
- Labor of Division (Episode I)
- Apple Lightning
- Inside the 8086 processor's instruction prefetch circuitry
- Why you should understand (a little) about TCP
- Beej's Guide to Network Programming
- How Async/Await Really Works in C#
- Deep Dive into ZGC: A Modern Garbage Collector in OpenJDK
- Approximation theory
- Twitter's Recommendation Algorithm
- template
Backlog (hasn't been categorized yet)
- Deploying to Cloud Run
- React Intro
- Hello World Docker
- C++ REST
- E-Graph
- E-Graphs Example
- Super Fast Linker Design(Mold)
- how Clickhouse removes its own code from memory and switches to using Huge Pages
- CRT-free in 2023
- Modern perfect hashing for strings
- Driving Compilers
- Fiber in C++
- Cool Graphics Blog
- Spidermonkey Blog
- Go, Writing Web Applications
- Netcode Rollback
- How to write a renderer for modern graphics APIs
- Relative Pointers
- Performance Through Memory Layout
- Onboarding floating-point