Skip to content

Instantly share code, notes, and snippets.

// Compile this with -rdynamic and your emulator .so with -fPIC -fpie -shared
#include <dlfcn.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "dcheck.h"
static char logfile_name[] = "/tmp/gbtracer.log.XXXXXX";
static int logfile_fd = 0;
@tekknolagi
tekknolagi / gensym.cpp
Created June 20, 2024 19:49 — forked from kenpusney/gensym.cpp
A gensym implementation of C/C++ Preprocessor.
#define STRINGIFY(x) #x
#define EXTRACT(...) __VA_ARGS__
#define INVOKE(macro,args...) macro( EXTRACT(args) )
#define FIRST(x,...) x
#define REST(x,...) __VA_ARGS__
#define __sym(cn,ln) _ainini_##c##cn##l##ln
#define sym(cn,ln) __sym(cn,ln)
#define __gensym(cn, ln) sym( cn,ln )
@tekknolagi
tekknolagi / hvm_standalone.cu
Created April 27, 2024 23:53 — forked from VictorTaelin/hvm_standalone.cu
HVM-CUDA - First Prototype - 6.7 billion RPS
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
typedef uint8_t u8;
typedef uint16_t u16;
typedef uint32_t u32;
@tekknolagi
tekknolagi / log.hpp
Created March 22, 2024 18:19 — forked from vtta/log.hpp
#ifndef LOG_HPP
#define LOG_HPP
#include <print>
#include <source_location>
template <class... Args>
struct info {
info(std::format_string<Args...> fmt, Args &&...args,
std::source_location const &loc = std::source_location::current()) {
std::print(stderr, "[{}:{}]{}: ", loc.file_name(), loc.line(),
@tekknolagi
tekknolagi / lines.py
Last active September 10, 2024 20:03
#!/usr/bin/env python
import multiprocessing
import random
import time
class Logger:
def __init__(self, num_lines, last_output_per_process, terminal_lock):
self.num_lines = num_lines
@tekknolagi
tekknolagi / tiny.c
Created January 27, 2024 04:57 — forked from seanjensengrey/tiny.c
Marc Feeley Tiny C compiler
/* file: "tinyc.c" */
/* originally from http://www.iro.umontreal.ca/~felipe/IFT2030-Automne2002/Complements/tinyc.c */
/* Copyright (C) 2001 by Marc Feeley, All Rights Reserved. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
@tekknolagi
tekknolagi / fb_get_token.py
Created December 12, 2023 20:46 — forked from kflu/fb_get_token.py
Obtain a Facebook Access Token
#!/usr/bin/env python3
"""Obtain a Facebook Access Token
From: https://github.com/dequis/purple-facebook/issues/445#issuecomment-967542766
Changes:
- Ported to Python3
- Auto generate the MACHINE_ID UUID
- Can set EMAIL from environment variable
@tekknolagi
tekknolagi / auto_treebuilder_test.py
Created December 11, 2023 23:22 — forked from uniphil/auto_treebuilder_test.py
pygit2 auto treebuilder
"""
Defines a function `auto_insert` to help with
`pygit2.Repository.TreeBuilder`s.
Just create the top-level `TreeBuilder`, and it will handle all subtree
creation if you give it paths.
"""
import shutil
from tempfile import mkdtemp
@tekknolagi
tekknolagi / app.tsx
Created November 3, 2023 20:30
simple useReducer react setup with localStorage
import React, { useCallback, useEffect, useReducer } from "https://esm.sh/[email protected]"
const STATE_KEY = "mystate";
const INITIAL_STATE = { age: 42, name: null };
function loadState() {
return JSON.parse(localStorage.getItem(STATE_KEY)) || INITIAL_STATE;
}
function reducer(state, action) {
@tekknolagi
tekknolagi / every-vm-tutorial-you-ever-studied-is-wrong.md
Created August 28, 2023 03:13 — forked from o11c/every-vm-tutorial-you-ever-studied-is-wrong.md
Every VM tutorial you ever studied is wrong (and other compiler/interpreter-related knowledge)

Note: this was originally several Reddit posts, chained and linked. But now that Reddit is dying I've finally moved them out. Sorry about the mess.


URL: https://www.reddit.com/r/ProgrammingLanguages/comments/up206c/stack_machines_for_compilers/i8ikupw/ Summary: stack-based vs register-based in general.

There are a wide variety of machines that can be described as "stack-based" or "register-based", but not all of them are practical. And there are a lot of other decisions that affect that practicality (do variables have names or only address/indexes? fixed-width or variable-width instructions? are you interpreting the bytecode (and if so, are you using machine stack frames?) or turning it into machine code? how many registers are there, and how many are special? how do you represent multiple types of variable? how many scopes are there(various kinds of global, local, member, ...)? how much effort/complexity can you afford to put into your machine? etc.)

  • a pure stack VM can only access the top elemen