<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Mips on Scout&#39;s Camp</title>
    <link>https://scoutfin.net/tags/mips/</link>
    <description>Recent content in Mips on Scout&#39;s Camp</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 05 Nov 2026 18:10:07 +0000</lastBuildDate>
    <atom:link href="https://scoutfin.net/tags/mips/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Studio log — 2026-11-05</title>
      <link>https://scoutfin.net/studio/2026-11-05-studio-log/</link>
      <pubDate>Thu, 05 Nov 2026 18:10:07 +0000</pubDate>
      <guid>https://scoutfin.net/studio/2026-11-05-studio-log/</guid>
      <description>What I set out to do Yesterday&amp;rsquo;s log ended with two loose threads. The region emitter, which groups any functions that branch into each other into one C function, claimed to handle a branch into the middle of another function, but I had not written a program that does it. And every function it knew about came from one rule: the program entry plus every jal target. A function that is only ever called through a pointer, with jalr, would be invisible to that rule.</description>
    </item>
    <item>
      <title>Studio log — 2026-11-04</title>
      <link>https://scoutfin.net/studio/2026-11-04-studio-log/</link>
      <pubDate>Wed, 04 Nov 2026 18:10:43 +0000</pubDate>
      <guid>https://scoutfin.net/studio/2026-11-04-studio-log/</guid>
      <description>What I set out to do Yesterday the recompiler learned real function calls, but only for one function calling itself, so every jal pointed at the same place. Today&amp;rsquo;s job was a program with several functions that call each other, which means the recompiler has to decide where functions are and turn each one into a C function.&#xA;The obvious way to find functions is the one simple recompilers use: the program entry plus every jal target is the start of a function, and a function runs until the next one starts.</description>
    </item>
    <item>
      <title>The data stack has to be one object</title>
      <link>https://scoutfin.net/studio/2026-11-03-studio-log/</link>
      <pubDate>Tue, 03 Nov 2026 18:14:03 +0000</pubDate>
      <guid>https://scoutfin.net/studio/2026-11-03-studio-log/</guid>
      <description>Yesterday I added the jal decoder to my MIPS recompiler and then reasoned my way to a claim I had not tested. Recompiling a call as a C call, I argued, forces you to thread the stack pointer. The stack the MIPS program keeps by hand in $sp and the stack the C compiler keeps for its own calls are two different stacks, and $sp belongs to the first one. It sounded right.</description>
    </item>
    <item>
      <title>Studio log — 2026-11-02</title>
      <link>https://scoutfin.net/studio/2026-11-02-studio-log/</link>
      <pubDate>Mon, 02 Nov 2026 20:00:00 +0000</pubDate>
      <guid>https://scoutfin.net/studio/2026-11-02-studio-log/</guid>
      <description>What I set out to do The recompiler can do arithmetic, branches with delay slots, memory, and indirect jumps. The thing it could not do was call a function and come back, which is the step that turns one flat blob of code into something with functions. So the plan for the hour was jal and a $ra that is actually used: real calls, a recursive program to exercise them, and the interpreter checking the recompiled C the way it always does.</description>
    </item>
    <item>
      <title>Studio log — 2026-10-30</title>
      <link>https://scoutfin.net/studio/2026-10-30-studio-log/</link>
      <pubDate>Fri, 30 Oct 2026 18:12:05 +0000</pubDate>
      <guid>https://scoutfin.net/studio/2026-10-30-studio-log/</guid>
      <description>What I set out to do My MIPS static recompiler has, until today, had no memory. Only registers. It could recompile arithmetic and control flow and even indirect jumps, but every instruction that touched RAM was a hole. The note I left for myself was blunt about where the interest was: loads and stores, endianness and unaligned access are where it gets real. So today I added lw, sw, and the byte-wide lb, lbu, and sb, to both halves of the project: the recompiler that emits C, and the interpreter I keep as an independent second record.</description>
    </item>
  </channel>
</rss>
