Rückübersetzung) ist die Übersetzung von Programmen in Maschinen- oder Assemblerspache in eine architekturunabhängige höhere Programmiersprache. Rückübersetzung wird verwendet, um verlorenen oder unzugänglichen Quelltext, der ursprünglich in einer technisch überholten Sprache geschrieben wurde, in eine neue Sprache zu übersetzen oder um Anwendungen zu einer neuen Architektur zu migrieren.<br /> Ein digitaler Signalprozessor (DSP) ist ein Mikroprozessor, der speziell für die effiziente Ausführung von Signalverarbeitungsalgorithmen entwickelt wurde. Neuere DSP verwenden Designlösungen, die typisch für Hochleistungrechner sind, wie VLIW Architekturen und Pipelines. Optimierende Übersetzer für moderne DSP Architekturen ermöglichen die effiziente Ausführung von Anwendungen, die in einer höheren Programmiersprache entwickelt wurden.<br /> Da ein Großteil der Software für ältere Architekturen in Assemblersprache entwickelt wurde, ist ein Rückübersetzer, der Assemblersprache in eine höhere Programmiersprache übersetzt, sehr wertvoll.<br /> Ein Kontrollflussgraph (CFG) ist notwendig, sowohl um das Programm zu verstehen, als auch für die Rückübersetzung in eine höhere Programmiersprache. Die Konstruktion des CFG wird komplizierter durch Architektureigenschaften, wie bedingt ausgeführte Befehle, VLIW Parallelismus und verzögert ausgeführte Befehle (insbesonders Sprünge).<br />Diese Arbeit stellt eine neue Methode vor, um einen Kontrollflussgraphen zu erstellen, in dem sowohl Parallelismus, als auch die Auswirkungen von verzögert ausgeführten Befehlen entfernt worden sind.<br />Software pipelining ist eine weit verbreitete Optimierung, um die Abarbeitung von Schleifen bei Prozessoren, die Parallelismus unterstützen, zu beschleunigen. Beim software pipelining werden mehrere Iterationen einer Schleife überlappend ausgeführt. Der Kontrolflussgraph ist dann grösser und unübersichtlicher, wobei der generierte Programmcode schwieriger zu verstehen wird. Software de-pipelining ist die Umgekehrung der Optimierung, dessen Ziel die Wiederherstellung der sequenziellen Form der Schleife ist, ohne die Sematik des Programmes zu verändern. Diese Arbeit stellt ein Algorithmus für software de-pipelining von Schleifen vor. Im Verlauf dieser Doktorarbeit wurde ein Rückübersetzer entwickelt, der diese neuen Techniken enthält. Mehrere Signalverarbeitungsanwendungen für den TIC62x DSP wurden mit diesem Rückübersetzer evaluiert.<br />
de
Reverse compilation (or decompilation) is the translation of machine or assembly language into a high-level machine independent language. Decompilation can be used to recover lost or inaccessible source code, to translate code originally written in an obsolete language into a new language or to migrate applications to a new hardware platform. A digital signal processor (DSP) is a microprocessor designed specifically for the efficient implementation of digital signal processing algorithms. Aiming for high-performance newer DSP processors use design approaches typical of super computer architectures, like pipelines and VLIW architectures.<br />Optimizing compilers for modern DSP architectures allow the efficient execution of applications written in high-level languages. Since most available software for older architectures is coded in assembly language, a reverse compiler that translates assembly language code into a high-level language is exceptionally useful. For both understanding the software and for reverse compiling it to a high-level language, a control flow graph (CFG) is required. However, CFG construction is complicated by architectural features of pipelined VLIW architectures, which include predicated instructions, VLIW parallelism, instructions (in particular branches) with delay slots. This work introduces a new approach for the construction of a CFG, where the parallelism has been eliminated, instruction reordering has been reversed and delay slots have been removed.<br />Software pipelining is a widely implemented optimization technique used to speed up loop execution in processors that support instruction level parallelism. Software pipelining basically overlaps several loop iterations so that they can be executed concurrently. This causes an increase in the CFG size. Understanding the code becomes very difficult. Software de-pipelining is the reverse of software pipelining. It restores the assembly code of a softwares pipelined loop back to its semantically equivalent sequential form. This thesis presents a de-pipelining algorithm for single loops. In the course of this thesis a retargetable decompiler framework has been developed which includes entirely new techniques for CFG construction and software de-pipelining. They have been tested on several digital signal processing applications for the TIC62x DSP.