Abstract
Development for stack-based architectures is usually done using legacy low level languages or assembly code, so there exists a problem of a high level programming language support for such architectures. In this paper we describe the development process of an LLVM/Clang-based C compiler for stack-based TF16 processor architecture. LLVM was used due to adaptation possibilities of its components for new architectures, such as disassembler, linker and debugger. Two compiler versions were developed. The first version generated code without using stack capabilities of TF16, treating it instead as a register-based architecture. This version was relatively easy to develop and it provided us a comparison point for the second one. In the second version we have implemented a platform independent stack scheduling algorithm that allowed us to generate code that makes use of the stack capabilities of the CPU. When comparing the two versions, a version that utilized stack capabilities generated code that was on average 35.7% faster and 50.8% smaller than the original version. The developed stack scheduling algorithm also allows to support other stack based architectures in LLVM toolchain.
Highlights
Ivannikov Institute for System Programming of the Russian Academy of Sciences, 25, Alexander Solzhenitsyn st., Moscow, 109004, Russia
In this paper we describe the development process of an LLVM/Clang-based C compiler for stack-based TF16
В терминах процессора TF16 это означает, что произойдёт инкремент регистра PSP, затем значение, находящееся в регистре N, будет записано в память по адресу [PSP], а в регистр N будет записано значение, находящееся в регистре T
Summary
Что в настоящее время среди процессоров для встраиваемых устройств доминируют различные варианты RISC-архитектур, процессоры со стековой архитектурой всё ещё находят применение. Целью данной работы является разработка и реализация на базе инфраструктуры LLVM/Clang [4] полноценной системы программирования для языка Си и платформы TF16. Существует несколько реализаций компилятора языка Си для стековых архитектур. описывает реализацию базовой поддержки этой архитектуры в компиляторе LLVM и первого соглашения о вызовах. обсуждается разработка поддержки для использования стековой модели вычислений вместо регистровой, что включает в себя создание стекового планировщика, упорядочивающего команды из промежуточного внутреннего представления DAG, которое описывает вычисления в виде дерева зависимостей по данным, и реализацию второго соглашения о вызовах. Разработка компилятора для стековой процессорной архитектуры TF16 на основе LLVM.
Published Version (
Free)
Talk to us
Join us for a 30 min session where you can share your feedback and ask us any queries you have