Archive

December 2025

2025 in Review
What has this year all been about, eh?
Thank you
The end of the 2025 Advent of Compiler Optimisation
When compilers surprise you
Sometimes compilers can surprise and delight even a jaded old engineer like me
Switching it up a bit
Taking a look at the various ways the compiler can optimise switch statements
Clever memory tricks
We learn that compilers have tricks to access memory efficiently
When SIMD Fails: Floating Point Associativity
Why floating point maths doesn't vectorise like integers, and what to do about it
SIMD City: Auto-vectorisation
Doing more with less: vectorising can speed your code up 8x or more!
Chasing your tail
The art of not (directly) coming back: tail call optimisation
Partial inlining
Inlining doesn't have to be all-or-nothing
Inlining - the ultimate optimisation
Copy paste can sometimes be a good thing, at least if the compiler does it for you
Calling all arguments
Knowing how compilers call functions can help with design - and optimisation
Aliasing
Knowing when the compiler can't optimise is important too
When LICM fails us
When aliasing can prevent loop-invariant code motion
Loop-Invariant Code Motion
The compiler can move code outside of loops to speed things up
Unswitching loops for fun and profit
Duplicating loops around can yield some decent optimisations
Pop goes the...population count?
Compilers can take advantage of some very specific instructions
Unrolling loops
Learning when the compiler decides to unroll loops for performance
Induction variables and loops
Compilers can rewrite loops to avoid expensive calculations
Going loopy
Exploring the ways optimisers deal with loop constructs
Multiplying our way out of division
How compilers avoid expensive division with multiplication tricks
Division
Division doesn't have to be slow with some clever tricks
ARM's barrel shifter tricks
The ARM architecture has a cool feature, and compilers know how to use it
Multiplying with a constant
Compilers know all the tricks for avoiding doing actual multiplies.
You can't fool the optimiser
Pattern recognition can see through obfuscated code to find the right instruction
Addressing the adding situation
We learn why adding on x86 isn't as obvious as you might think
Why xor eax, eax?
Why do compilers love xor-ing registers so much?

November 2025

Introducing the Advent of Compiler Optimisations 2025
Announcing AoCO 2025 - daily December posts about compiler optimisations

September 2025

CppCon 2025
A quick overview of my time at CppCon 2025
CEFS: Finally Solving CE's Mount(ing) Problems
In which CE's boot times are finally brought under control

July 2025

Behind the Scenes: My "How Computers Really Work" Series on Computerphile
Behind-the-scenes look at recording a CPU fundamentals series for Computerphile

June 2025

Compiler Explorer Cost Transparency
In which I try and show how we spend your kind Patreon donations
How Compiler Explorer Works in 2025
How we handle 92 million compilations a year without everything catching fire

May 2025

Compiler Explorer and the Promise of URLs That Last Forever
How we're preserving 12,000 legacy links as Google's URL shortener rides into the sunset
On AI, Assembly, and the Art of Project Stewardship
Building AI tools while navigating community conscience

April 2025

AI coding: parallels with the Semiconductor Revolution
AI is not coming for your job, if you're a senior programmer. But raises questions for junior folk
Blog Modernisation with Claude: A Python Makeover
Bringing my decade-old blog generator into 2025 with the help of Anthropic's Claude

July 2024

MSVC and CE
Microsoft Compilers on Compiler Explorer

March 2024

Compiler Explorer, LLC
A small update on the status of CE

June 2022

Happy 10th Birthday Compiler Explorer!
Wishing Compiler Explorer a very happy tenth birthday

March 2021

Recording and editing Two's Complement
How we record and edit Two's Complement

January 2021

C++ and passing by value
Some thoughts on passing by value versus reference

September 2019

CppCon 2019 Trip Report
All the best things that happened at CppCon 2019

May 2019

Live streaming on YouTube
Join me on YouTube for some live coding!

April 2019

Life update
Some notes on Compiler Explorer's new storage

August 2018

Compiler Explorer's new state storage
Some notes on Compiler Explorer's new storage

July 2018

A European Vacation
Some time away, a talk at Avast, and a new job tomorrow!

May 2018

C++Now - trip report
A last-minute decision to head to C++Now ends up with an even-more last-minute talk

April 2018

All change for me
Big news, I've left DRW, have some spare time, and a new job in the summer

March 2018

March update
Compiler Explorer logo and shop, and more videos

February 2018

Some YouTube videos
Some videos I've uploaded to YouTube

October 2017

CppCon 2017 Trip Report
My experiences at my first C++ conference

January 2017

Compiler Explorer is now on Patreon!
I finally accept that maybe some financial help would be useful

November 2016

Compiler Explorer's embedded view
A new feature in Compiler Explorer: embedded views

September 2016

How it works: Compiler Explorer
I explain how Compiler Explorer runs on Amazon's cloud computing infrastructure

August 2016

BBC emulation talk - video available
Another video on how to emulate a BBC Microcomputer in Javascript

February 2016

Inside the Ivy Bridge and Haswell BTB
In which I apply what I've learned about BTBs to Ivy Bridge and Haswell
Branch Target Buffer, part 2
How many tag bits are used in the Arrendale BTB?
The BTB in contemporary Intel chips
Inside the Arrendale Branch Target Buffer
jsbeeb top 20 images
Some stats on emulated images
Branch prediction - part two
First results of BPU behaviour
Static branch prediction on newer Intel processors
Embarking on a branch prediction odyssey

July 2015

BBC emulation talk - video available
Video on how to emulate a BBC Microcomputer in Javascript
BBC emulation slides
Slides on how to emulate a BBC Microcomputer in Javascript

June 2015

Traits and trait objects
Learning more about the guts of Rust
What abuse of compute resources looks like
What happens if you use work's computer resources
Error handling in Rust
A pattern for handling errors in Rust
Further notes on Rust: a second look
After further experimentation with my path tracer, I hit some first issues

May 2015

zindex - index and search large gzipped files quickly
Introducing a gzip searching tool, zindex
The runtime performance of Rust for a simple path tracer
Some notes on Rust performance
Two commutes with Rust
Note and thoughts on Rust, having spent a couple of commutes playing with it
Leaks in javascript
Debugging GCC Explorer's javascript memory leaks
GCC 5.1 on GCC Explorer
More compilers!

March 2015

Seasocks - a quick and easy websocket server in C++
Drawing attention to an open source project of mine

February 2015

Even more compilers for GCC explorer
Yup, even more compilers
Announcing new compilers for GCC Explorer
Yup, more compilers
Experiences with Docker and GCC Explorer
Musings on Docker

December 2014

GCC Explorer's top 10 compilers
Wondering which compilers I can retire from GCC Explorer

October 2014

Debugging BBC Master demos with jsbeeb
Digging into apparent emulation issues can lead you down a rabbit-hole

June 2014

Elite's crazy tokenised string routine
In which I lift the lid on BBC classic Elite and its text handling
jsbeeb Part Four - IRQs and timers
Emulating a 6502's interrupt behaviour

May 2014

jsbeeb Part Three - 6502 CPU timings
How to get 6502 CPU timings just right when emulating
Emulating a BBC Micro in Javascript - Part Two
More notes on what goes on when you emulate a BBC Micro computer in javascript
Emulating a BBC Micro in Javascript
Some notes on what goes on when you emulate a BBC Micro computer in javascript

March 2014

jsbeeb - a Javascript BBC Micro emulator
Announcing a Javascript BBC Model B Microcomputer emulator

December 2012

!FinalLook - a RISC OS 3.1 hack explained
A trip down memory lane to a hack for RISC OS 3.1 I wrote at University

September 2012

Forcing code out of line in GCC and C++11
A way of ensuring non-hot code is taken out of line in GCC, using C++11 lambdas

June 2012

GCC Explorer - progress update
What's changed since the launch

May 2012

GCC Explorer - an interactive take on compilation
Introducing a new way to stare at the disassembly of your compiled C and C++

April 2012

Good grief, it's been a while!
In which I note the long passing since the previous post

August 2011

Vim's quickfix and GCC 4.5
Getting GCC 4.5's error messages parsing in vim 7.3

July 2011

An update to Miracle
An update on Miracle, the Javascript Sega Master System Emulator

February 2011

Introducing Miracle
A Sega Master System emulator in JavaScript

January 2011

Hello Chicago!
The latest updates from wintry Chicago

December 2010

It's nearly time to say goodbye
In which I take stock of 2010, and get ready to leave the UK

November 2010

Goodbye Google!
Goodbye Google

October 2010

An even bigger move
Yet another post and of course another excuse for the gap

July 2010

A big move
Another post, another excuse for the gap between this and the last

April 2010

Baby Godbolt has a name!
In which we reveal our baby's name: Isaac Benjamin.
Announcing a new Godbolt
The happy news of the latest Godbolt to arrive on planet Earth.
SWAT: the last few bits
Tieing up the loose ends, collision system, AI and the like.

March 2010

Rendering in SWAT: PlayStation 2
How we wedged a fully fledged Xbox engine onto the PlayStation 2
Rendering in SWAT: Xbox
SWAT's Xbox rendering engine
SWAT's lighting system
An explanation of the lighting system used in SWAT.
Game Development: SWAT's artwork
Part two of “How SWAT: GST was made”, this time it's the art pipeline

February 2010

Game Development: SWAT
Part one of “How SWAT: GST was made” — a background
Windows fails to mount USB drives when they're inserted - a solution
I finally found out why my laptop had lost the ability to mount USB drives

July 2009

Setting up an Android on a UK O2 iPhone contract SIM for MMS
How to set up an unlocked Android phone to use a SIM from an iPhone on O2
Solving the threading problem in WinInet
One possible solution to the problem of cancelling a WinInet request in a thread-safe manner.
Threading issues in the Windows Internet API
A problem with threading that looks simple but turns out to be a headache.

May 2009

Honey and Lime - a mobile bar
Seeding Google with a post about a friend's mobile cocktail bar.
Sunday Lunch at the Fat Duck
In which I blow the family fortune on lunch at the Fat Duck. And love it!

January 2009

DIY Plumbing Fail
A story from my Christmas where I had a run in with my heating system
Pence in the pound
Does nobody in economics understand what percentage means?
Lord Winston and centenarian nuns
If you want to live a long and healthy life, become a nun.
A belated Happy New Year
Is it 2009 already? How the heck did that happen?

November 2008

November round-up
A very quick round-up of what happened in November.

October 2008

Two weeks in Mountain View
Two weeks away from the family, but with lots of cool tech.
Goodbye ProFactor...
Goodbye ProFactor, hello Google.
A big change coming up for me
A bit of a change coming up for me.

September 2008

Samba PDC problems after changing server IP
A strange problem with Samba PDCs if their IP addresses change.

August 2008

Another weekend and some more data recovery
More fiddling in trying to get NTFS disk data back for my Dad.
NTFS data recovery on Linux
Aargh! A broken NTFS filesystem, and recovering it on Linux.
Comments on hacking about with stacks
Justin's comments on my investigation of the processor stacks on Windows and Linux.
A good weekend
In which I try to be more twitter-like. And fail miserably at: A rather long summary of my weekend.
Hacking about with stacks
An investigation of the processor stacks on Windows and Linux.

July 2008

How to make a pure virtual call
More of an anti-pattern than a how to - avoiding and/or diagnosing pure virtual function calls.
IO Completion Ports - the UNIX equivalents
In which we learn the UNIX equivalents of IOCPs.
IO Completion Ports
One of the better features in Windows. Sadly, very awkward to use correctly.

June 2008

William Anthony Richard Godbolt
On the birth of our firstborn: William Anthony Richard Godbolt.
LCD screen hackery
Some ideas on improving the LCD display on the Weebox.
The beginning of the end for Windows XP
I've finally had enough of Windows and have moved to Ubuntu Linux.

May 2008

Two weeks of relaxing
The end of a lovely two-week break in Cyprus.

April 2008

Spooky coincidences...
There's more than one "me" out there. Spooky indeed.
So that's what we've been up to...
In which I introduce the Xbox Live Arcade game we've been working on: Slam.
The C library's strcmp routine is badly named
My thoughts on the ill-named strcmp function.
This week, I have mostly been...
The worst kind of blog post - a generic update.

March 2008

Plugging for a friend - New Metal Army
A blatant plug for a friend's heavy metal gig website. And talk about finding the sex of babies.
Minding your Ps and Qs
In which a signwriter forgets which way round things have to go.

February 2008

Things I learnt about Google last night
The adhesive in their paper cups dissolves in alcohol. And other things.
Launching a debugger automatically
Automatically launching the debugger for a particular executable.
Things I didn't know about Visual Studio's Debugger
Discussing debugger pseudovariables for accessing GetLastError return values.
Challenges, and bits and bobs
An excellent description of the challenges faced by the Human Genome Project. And some miscellaneous other bits.

January 2008

It's a human!
A new addition to the Godbolt clan is announced. Or at least the release date.
Happy New Year
Happy New Year. And an unexpected birthday present.

December 2007

Strict aliasing in C
It's not OK anymore to cast willy nilly in C++. Well, it never was. But it's less so now.
USBwine
USBWINE - French spoof. And the perfect present for the techno-wine drinker in your family.
American in bad maths shocker
C++ header dependency tricks
Some tricks for reducing dependencies and hence compile times in C++.
Google POP3 certificate problem and Thunderbird
A temporary issue with Google's SSL certificates, and a workaround.

November 2007

Me, a name I call myself
English grammar isn't so different from Latin after all.
Poor man's GPS
Poor man's GPS.
A few days of downtime
Oops, it broke...
Ambiguous function overloading in C++
C++ function overload resolution can be rather inscrutable. I try and make sense of a particular case.
The three way handshake of understanding
IRBasic - object-oriented BASIC
An object-oriented BBC BASIC.
More on BASIC line numbers
More on the BBC BASIC binary line number encoding.
BBC BASIC binary line number format
A further look at BBC BASIC's in-memory format, specifically the line numbers.
BBC BASIC V file format
Exploring the BBC BASIC V file format. It's pretty damned clever.
Modern web design
An image depicting the issues with modern web design
List comprensions in Perl using map {}
A quick comparison of list processing in Perl and Python
Linksys Broadband Router DHCP bug
In which I discover a fun bug in Linksys's DHCP implementation.
Changelists in Subversion
Something I'm looking forward to seeing in Subversion --- changelists.
List comprehensions in Python
The coolest thing in Python --- list comprehensions.
More things I didn't know about Python
Conditional expressions in Python 2.5
HTML scraping in Python
Discussing a couple of Python libraries designed for parsing real world websites.
Easy Installation with ez_setup
ez_setup: the quick and easy way to install new python libraries.
Python sqlite3 gotchas
A caveat for sqlite3 in Python - if your databases don't fill with data, this might be why.

April 2007

Samba & LDAP

February 2007

General round up

January 2007

Blatant plug!

May 2006

Clever Dick

August 2004

Rejected

June 2004

Floating point

April 2004

Blast from the past

About Matt Godbolt

Matt Godbolt is a C++ developer living in Chicago. He works for Hudson River Trading on super fun but secret things. He is one half of the Two's Complement podcast. Follow him on Mastodon or Bluesky.