documentation added
[cacao.git] / alpha / calling.doc
index ab27b901d446070c8259290de0639ab0fd9612e5..287217a66b06f923bb204a18e75498768a519633 100644 (file)
@@ -1,23 +1,21 @@
-/***************************** calling.doc *************************************
+/* calling.doc *****************************************************************
 
        Copyright (c) 1997 A. Krall, R. Grafl, M. Gschwind, M. Probst
 
        See file COPYRIGHT for information on usage and disclaimer of warranties
 
 
        Copyright (c) 1997 A. Krall, R. Grafl, M. Gschwind, M. Probst
 
        See file COPYRIGHT for information on usage and disclaimer of warranties
 
-       Das ist eine kurze Dokumentation "uber die internen Aufrufskonventionen
-       der Java-Methoden in der DEC-ALHPA-Version.
+       A short description of Alpha calling conventions and register usage.
 
 
-       Author:  Reinhard Grafl      EMAIL: cacao@complang.tuwien.ac.at
+       Authors: Andreas  Krall      EMAIL: cacao@complang.tuwien.ac.at
+                Reinhard Grafl      EMAIL: cacao@complang.tuwien.ac.at
 
 
-       Last Change: 1997/02/05
+       Last Change: 1998/11/05
 
 *******************************************************************************/
 
 *******************************************************************************/
-FILE: calling.doc
 
 
-Das ist eine kurze Dokumentation "uber die internen Aufrufskonventionen
-der Java-Methoden in der DEC-ALHPA-Version.
+Short documentation of the Java calling conventions for the Alpha.
 
 
--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
 
 
 Die Aufrufskonventionen halten sich weitgehende an die Konventionen
 
 
 Die Aufrufskonventionen halten sich weitgehende an die Konventionen
@@ -33,84 +31,65 @@ R28 ..... enth"alt bei einem Methodenaufruf auf jeden Fall den Zeiger
           dann hat dieses Register keinen definierten Wert (Alle von der
           JavaVM verwendeten Funktionen, z. B. 'builtin_new', etc. werden
           so aufgerufen)
           dann hat dieses Register keinen definierten Wert (Alle von der
           JavaVM verwendeten Funktionen, z. B. 'builtin_new', etc. werden
           so aufgerufen)
-          
-R1 ...... enth"alt nach Methodenbeendigung entweder NULL oder einen Zeiger
-          auf ein Objekt vom Typ java.lang.Throwable (oder einem davon
-          abgeleiteten Typ).
-          Wenn das der Fall ist, dann wurde in der Methode eine Exception
-          geworfen, die nicht abgefangen werden konnte, und jetzt beim
-          Aufrufer weiter bearbeitet werden muss.
 
 
-
-          
 Die restlichen Register folgen den normalen Konventionen, aber ich gebe
 hier noch einmal eine kurze "Ubersicht:
 
  
 Die restlichen Register folgen den normalen Konventionen, aber ich gebe
 hier noch einmal eine kurze "Ubersicht:
 
  
-INTEGER-REGISTER:
+integer registers:
+
+R0 ........ method result value for types INT, LONG and ADDRESS
+
+R1-R8 ..... temporary registers (destroyed by called method)
 
 
-R0 ........ R"uckgabewert von den Methoden f"ur die Typen:
-                    INT,LONG,ADDRESS
-                    
-R1 ........ Adresse der geworfenen Exception (oder NULL)
+R9-R15 .... saved registers (left unchanged by called method)
 
 
-R2-R8 ..... tempor"are Register (werden im Unterprogram zerst"ort)
+R16-R21 ... argument registers 0 - 5 (contain the first six method arguments
+            of type INT, LONG and ADDRESS. Argument registers are destroyed
+            by called method)
 
 
-R9-R15 .... gesicherte Register (werden im Unterprogramm nicht ver"andert)
+R22-R24 ... temporary registers (destroyed by called method)
 
 
-R16-R21 ... Argumentregister 1 - 6 (hier werden die ersten sechs Methoden- 
-            Argumente eingetragen, sofern sie von den Typen INT,LONG,ADDRESS 
-            sind. Diese Argumentregister werden im Unterprogramm zerst"ort
-           
-R22-R24 ... tempor"are Register
-            (werden im Unterprogramm zerst"ort)                
-               
-R25 ....... tempor"ares Register f"ur kurzfristige Zwischenergebnisse
-            (wird im Unterprogramm zerst"ort)
+R25 ....... code generator temporary register (destroyed by called method)
 
 
-R26 (ra) .. R"ucksprungadresse (bleibt im Unterprogramm erhalten)
+R26 (ra) .. return address (left unchanged by called method)
 
 
-R27 (pv) .. Prozedurzeiger. Dieses Register muss auf jeden Fall einen Zeiger
-            auf die aufgerufene Prozedur enthalten (damit die Zugriffe
-            auf das Datensegment funktionieren k"onnen).
-            (der Wert bleibt im Unterprogramm erhalten)
+R27 (pv) .. procedure vector, points to the first instruction of the called
+            method. This vector is used for addressing the entries in the
+            data segment. The ov of the caller is recomputed from the ra.
+            Therefore it is necessary that a return is always done using ra.
 
 
-R28 ....... Zeiger auf die 'methodinfo' - Struktur. Muss auf jeden Fall bei
-            allen Methodenaufrufen richtig gesetzt sein (wegen eines eventuellen
-            Compiler-Aufrufs)
-            (wird im Unterprogramm zerst"ort)
-            
-R29 ....... tempor"ares Register f"ur kurzfristige Zwischenergebnisse
-            (wird im Unterprogramm zerst"ort)
+R28 ....... pointer to 'methodinfo' structure. This register has to be set
+            correctly, because it is needed in the case the jit is invoked.
+            Also used as code generator temporary register. It isdestroyed
+            by called method)
 
 
-R30 (sp) .. Zeiger auf die Untergrenze des Stack (der Stack w"achst von
-            oben nach unten)
-            
-R31 ....... enth"alt immer NULL
+R29 ....... code generator temporary register (destroyed by called method)
 
 
+R30 (sp) .. stack pointer. The stack grows from high to low.
+
+R31 ....... always contains zero
 
  
 
  
-FLIESSKOMMA-REGISTER:
+floating point registers:
 
 
+F0 ........ method result value for types FLOAT and DOUBLE
 
 
-F0 ........ enth"alt die R"uckgabewert der Methoden vom Typ:
-                FLOAT, DOUBLE
-F1 ........ enth"alt den Imagin"aranteil von einem komplexen Funktionswert
-                (wird von mir nicht benutzt)
+F1 ........ temporary register (destroyed by called method)
                                 
                                 
-F2-F9 ..... gesicherte Register (werden im Unterprogramm nicht ver"andert)
+F2-F9 ..... saved registers (left unchanged by called method)
+
+F10-F15 ... temporary registers (destroyed by called method)
 
 
-F10-F15 ... tempor"are Register (werden im Unterprogramm zerst"ort)
+F16-F21 ... argument registers 0 - 5 (contain the first six method arguments
+            of type FLOAT and DOUBLE. Argument registers are destroyed
+            by called method)
+F22-F27 ... temporary registers (destroyed by called method)
 
 
-F16-F21 ... Argumentregister f"ur die ersten 6 Parameter, sofern diese
-            vom den Typen FLOAT oder DOUBLE sind
-            
-F22-F24 ... tempor"are Register (werden im Unterprogramm zerst"ort)
+F28-F30 ... code generator temporary register (destroyed by called method)
 
 
-F25-F31 ... tempor"are Register f"ur kurzfristige Zwischenergebnisse
-            (werden im Unterprogramm zerst"ort)
+F31 ....... always contains zero
 
 
-F31 ....... enth"alt immer 0.0
 
 
 
 
 
 
@@ -149,34 +128,26 @@ im Stackframe ist unabh"angig vom Typ auf jedem Fall 64 bit lang, die
 Gr"ossenangaben der Bereiche sind in solchen Einheiten von 64 Bit 
 angegeben):
        
 Gr"ossenangaben der Bereiche sind in solchen Einheiten von 64 Bit 
 angegeben):
        
-                               ---------------------------------------------
-                               |  Parameter n (vom Aufrufer)               |
-                ---------------------------------------------                          
-                               |  Parameter n-1                            |
-                               ---------------------------------------------
-                | ...                                       |
-                ---------------------------------------------
-   SP vorher -> |  Parameter 7                              |
-                ============================================= --- 
-                |  gesichertes RA                           |  savedregs_num    
-                ---------------------------------------------
-                |  andere gesicherte Register               |
-                ============================================= ---
-                |  Platz f"ur lokale Werte, die nicht mehr  |  localvars_num
-                |  in Register passen                       |
-                ============================================= ---
-                |  ....                                     |  arguments_num
-                ---------------------------------------------
-                |  Parameter 8                              |
-                ---------------------------------------------
-   SP --->      |  Parameter 7 (f"ur aufgerufenen Methoden) |
-                ============================================= ---
-               
-                
-Damit die Anf"ange der einzelnen Bereiche (im Codegenerator) leichter 
-ausgedr"uckt werden k"onnen, sind ein paar Hilfsvariablen vorgesehen, die
-die Adressierung der einzelnen Bereiche vereinfachen:
-       localvars_base  = arguments_num
-       savedregs_base  = localvars_base + localvars_num
-       parentargs_base = savedregs_base + savedregs_num
-
+            ---------------------------------------------
+            |  parameter n (passed from caller)         |
+            ---------------------------------------------      
+            |  parameter n-1                            |
+            ---------------------------------------------
+            | ...                                       |
+            ---------------------------------------------
+            |  parameter 7                              |
+old SP ---> ============================================= --- parentargs_base
+            |  saved RA                                 |
+            ---------------------------------------------     savedregs_num
+            |  others saved registers                   |
+            ============================================= --- maxmemuse + 1
+            |  optional monitor_exit argument           |
+            ============================================= --- maxmemuse
+            |  area for spilled registers               |
+            =============================================
+            |  ....                                     |
+            ---------------------------------------------
+            |  parameter 8                              |
+            ---------------------------------------------
+            |  parameter 7 (passed to called method)    |
+new SP ---> =============================================