compiler

Unnamed Compiled Systems Language Project
git clone http://frotz.net/git/compiler.git
Log | Files | Refs

commit 0ad63f35a4b576d857e8b2c5c8535ed7bfcd7834
parent 7d28c912594987b5dc380f51b0647252e30a70ad
Author: Brian Swetland <swetland@frotz.net>
Date:   Wed, 11 Mar 2020 00:58:30 -0700

compiler: make iParam items use a pure offset

- decouple parse and codegen a bit
- prepare for wide parameters
- add scripts to save test results and compare generated code
  between saved and current results (handy for checking "did
  this change cause zero effect on codegen?")

Diffstat:
Msrc/compiler.c | 6+++---
Atools/diff-codegen | 7+++++++
Atools/save-tests | 5+++++
3 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/compiler.c b/src/compiler.c @@ -1250,7 +1250,7 @@ Object parse_param(String fname, u32 n, Object first, Object last) { } String pname = parse_name("parameter name"); Type ptype = parse_type(false); - Object param = make_param(pname, ptype, 0, n); + Object param = make_param(pname, ptype, 0, 4 + n * 4); Object obj = first; while (obj != nil) { @@ -1582,7 +1582,7 @@ void gen_load_reg(Item x, u32 r) { } else if (x->kind == iConst) { emit_mov(r, x->a); } else if (x->kind == iParam) { - emit_mem(LDW, r, SP, 4 + x->a * 4); + emit_mem(LDW, r, SP, x->a); } else { error("gen_load failed"); } @@ -1607,7 +1607,7 @@ void gen_load(Item x) { void gen_store(Item val, Item var) { gen_load(val); if (var->kind == iParam) { - emit_mem(STW, val->r, SP, 4 + var->a * 4); + emit_mem(STW, val->r, SP, var->a); put_reg(val->r); } else { error("gen_store: invalid target"); diff --git a/tools/diff-codegen b/tools/diff-codegen @@ -0,0 +1,7 @@ +#!/bin/sh + +for TEST in out/test/*.lst; do + SAVE=out/save/${TEST#"out/test/"} + echo CHECK $SAVE $TEST + diff $SAVE $TEST +done diff --git a/tools/save-tests b/tools/save-tests @@ -0,0 +1,5 @@ +#!/bin/sh + +rm -rf out/save +mkdir -p out/save +cp -vr out/test/* out/save/