diff --git a/src/lisp/plat/linux.c b/src/lisp/plat/linux.c
index bd9af10..83cc39b 100644
--- a/src/lisp/plat/linux.c
+++ b/src/lisp/plat/linux.c
@@ -3,41 +3,42 @@
 #include <string.h>
 #include <sys/mman.h>
 
-void *malloc_aligned (size_t size)
+void *malloc_aligned(size_t size)
 {
-	void *mem = malloc (size + 8 + sizeof (void *) * 2);
-	void **aligned_ptr = (void **) ((uintptr_t) (mem + 8 + sizeof (void *)) & ~7);
-	aligned_ptr[ -1 ] = mem;
-	aligned_ptr[ -2 ] = (void *) size;
+	void *mem = malloc(size + 8 + sizeof(void *) * 2);
+	void **aligned_ptr = (void **)((uintptr_t)(mem + 8 + sizeof(void *)) & ~7);
+	aligned_ptr[-1] = mem;
+	aligned_ptr[-2] = (void *)size;
 	return aligned_ptr;
 }
 
-void *realloc_aligned (void *addr, size_t size)
+void *realloc_aligned(void *addr, size_t size)
 {
-	void *mem = malloc (size + 8 + sizeof (void *) * 2);
-	void **aligned_ptr = (void **) ((uintptr_t) (mem + 8 + sizeof (void *)) & ~7);
-	aligned_ptr[ -1 ] = mem;
+	void *mem = malloc(size + 8 + sizeof(void *) * 2);
+	void **aligned_ptr = (void **)((uintptr_t)(mem + 8 + sizeof(void *)) & ~7);
+	aligned_ptr[-1] = mem;
 
-	memcpy (aligned_ptr, addr, (uintptr_t) aligned_ptr[ -2 ]);
-	
+	memcpy(aligned_ptr, addr, (uintptr_t)aligned_ptr[-2]);
+
 	return aligned_ptr;
 }
 
-void free_aligned (void *addr)
+void free_aligned(void *addr)
 {
 	void **ptr = (void **)addr;
-	free (ptr[ -1 ]);
+	free(ptr[-1]);
 }
 
-void *link (dasm_State **Dst)
+void *link(dasm_State **Dst)
 {
 	size_t size;
 	void *buf;
 
-	dasm_link (Dst, &size);
-	buf = mmap (0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-	dasm_encode (Dst, buf);
+	dasm_link(Dst, &size);
+	buf = mmap(0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1,
+	           0);
+	dasm_encode(Dst, buf);
 
-	mprotect (buf, size, PROT_READ | PROT_EXEC);
+	mprotect(buf, size, PROT_READ | PROT_EXEC);
 	return buf;
 }
diff --git a/src/lisp/plat/plat.h b/src/lisp/plat/plat.h
index 87544ba..f10676c 100644
--- a/src/lisp/plat/plat.h
+++ b/src/lisp/plat/plat.h
@@ -1,14 +1,14 @@
 #pragma once
 
-#include <stdint.h>
-#include <stddef.h>
 #include <dasm_proto.h>
+#include <stddef.h>
+#include <stdint.h>
 
 /* Platform specific definitions */
 
 // Must return an address aligned to 8 bytes
-void *malloc_aligned (size_t size);
-void *realloc_aligned (void *addr, size_t size);
-void free_aligned (void *addr);
+void *malloc_aligned(size_t size);
+void *realloc_aligned(void *addr, size_t size);
+void free_aligned(void *addr);
 
-void *link (dasm_State **Dst);
+void *link(dasm_State **Dst);
