im GCC

Inhaltsverzeichnis:

Header-Datei

Alle verfügbaren Funktionsaufrufe sollten in einer Header-Datei definiert werden.
Die Header-Datei muss im Projektverzeichnis oder im SpartanMC-Verzeichnis liegen. Zum Beispiel könnte die Datei myfunc.h folgenden Aufbau haben:

void func1(void);
int func2(int, int);


Aufruf in C

Im C-Quellcode können die Funktionen ganz normal verwendet werden:


#include "myfunc.h"
void main(void)
{
int result;
func1();
result = func2(1, 2);
}


Assembler-Routinen

Die Assembler-Funktionen werden in eine beliebige .s-Datei geschrieben.
Vor dem ersten Assembler-Befehl steht ein Label mit dem Namen der Funktion der vorher noch global gültig gemacht wird. Dieses Label wird vom GCC mit dem Befehl JALS _func1 aufgerufen. Dementsprechend muss die Routine mit JRS R11 beendet werden. Eine Datei myfunc.s könnte folgenden Inhalt haben:


.global  func1
func1:
         or  r0, r0  ; NOP
         JRS R11
         or  r0, ro  ; NOP wird im Delay Slot des JRS R11 ausgeführt.

.global  func2
func2:
         add r4, r5
         JRS R11
         or  r0, ro  ; NOP wird im Delay Slot des JRS R11 ausgeführt.

Der Befehl add r4, r5 könnte auch in den Delay Slot des JRS R11 verschoben werden. Die Funkion würde dann wie folgt aussehen:
.global  func2
func2:
         JRS R11
         add r4, r5


func1 übt sich der Einfachheit halber in Langeweile.
func2 addiert die beiden Aufrufparameter und gibt die Summe zurück.



SpartanMC