From 4022e5c95210631e4aceb08eaf9d9071aa5aefc4 Mon Sep 17 00:00:00 2001 From: Richard Qin Date: Tue, 15 Sep 2026 08:16:43 +0800 Subject: Set up a git repo --- src/mid/abi.cc | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/mid/abi.cc (limited to 'src/mid/abi.cc') diff --git a/src/mid/abi.cc b/src/mid/abi.cc new file mode 100644 index 0000000..c4924da --- /dev/null +++ b/src/mid/abi.cc @@ -0,0 +1,45 @@ +/* Source code for RCC-Legacy. + Copyright (C) 2026 Richard Qin + +This file is part of RCC. + +RCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +RCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with RCC; see the file LICENSE. If not see +. */ + +/// @file abi.cc +/// @brief elimsb - Eliminate ABI-level sub-word op variants (sb/ub/sh/uh for arg/par/ret). +/// +/// See docs/abi.md for architectural notes. + +#include "rcc/all.h" + +namespace rcc { + +void elimsb(Fn* fn) { + for (Blk* b = fn->start; b; b = b->link) { + Ins* ie = b->ins + b->nins; + for (Ins* i = b->ins; i < ie; ++i) { + if (isargbh(i->op)) { + i->op = Oarg; + } else if (isparbh(i->op)) { + i->op = Opar; + } + } + if (isretbh(b->jmp.type)) { + b->jmp.type = Jretw; + } + } +} + +} // namespace rcc -- cgit v1.2.3