* Removed all Id tags.
[cacao.git] / src / vm / jit / mips / md-asm.h
index fac48b9837d23a5c3eea554e834ae2a970173759..715aeb9934e6f438fa18574953e5727cca773410 100644 (file)
@@ -1,9 +1,9 @@
 /* src/vm/jit/mips/md-asm.h - assembler defines for MIPS ABI
 
-   Copyright (C) 1996-2005 R. Grafl, A. Krall, C. Kruegel, C. Oates,
-   R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner,
-   C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger,
-   Institut f. Computersprachen - TU Wien
+   Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+   C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
+   E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
+   J. Wenninger, Institut f. Computersprachen - TU Wien
 
    This file is part of CACAO.
 
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA.
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA.
 
-   Contact: cacao@complang.tuwien.ac.at
+   Contact: cacao@cacaojvm.org
 
    Authors: Christian Thalinger
 
    Changes:
 
-   $Id: md-asm.h 2712 2005-06-15 14:10:07Z twisti $
-
 */
 
 
@@ -41,6 +39,8 @@
 
 /* register defines ***********************************************************/
 
+#if SIZEOF_VOID_P == 8
+
 #define zero    $0
 #define itmp1   $1
 #define v0      $2
@@ -55,9 +55,9 @@
 #define        a6      $10
 #define        a7      $11
 #define        t0      $12
-#define        t1      $13
-#define        t2      $14
-#define        t3      $15
+#define t1      $13
+#define t2      $14
+#define t3      $15
 
 #define s0      $16
 #define s1      $17
@@ -68,7 +68,7 @@
 #define s6      $22
 #define s7      $23
 
-#define t8      $24
+#define t4      $24
 #define itmp3   $25
 #define k0      $26
 #define k1      $27
@@ -79,7 +79,6 @@
 #define ra      $31
 
 #define pv      s8
-#define t9      itmp3
 
 #define xptr    itmp1
 #define xpc     itmp2
 #define ft6     $f7
 
 #define ft7     $f8
-#define        ft8     $f9
-#define        ft9     $f10
-#define        ft10    $f11
-#define        fa0     $f12
-#define        fa1     $f13
-#define        fa2     $f14
-#define        fa3     $f15
+#define ft8     $f9
+#define ft9     $f10
+#define ft10    $f11
+#define fa0     $f12
+#define fa1     $f13
+#define fa2     $f14
+#define fa3     $f15
 
 #define fa4     $f16
 #define fa5     $f17
 #define fss4    $f29
 #define fss5    $f31
 
+#else /* SIZEOF_VOID_P == 8 */
+
+#define zero    $0
+#define itmp1   $1
+#define v0      $2
+#define v1      $3
+#define a0      $4
+#define a1      $5
+#define a2      $6
+#define a3      $7
+
+#define t0      $8
+#define t1      $9
+#define t2      $10
+#define t3      $11
+#define t4      $12
+#define t5      $13
+#define t6      $14
+#define t7      $15
+
+#define s0      $16
+#define s1      $17
+#define s2      $18
+#define s3      $19
+#define s4      $20
+#define s5      $21
+#define s6      $22
+#define s7      $23
+
+#define itmp2   $24
+#define itmp3   $25
+#define k0      $26
+#define k1      $27
+
+#define gp      $28
+#define sp      $29
+#define s8      $30
+#define ra      $31
+
+
+#define pv      s8
+#define xptr    itmp1
+#define xpc     itmp2
+#define mptr    itmp3
+#define mptrreg 25
+
+
+#define fv0     $f0
+#define ftmp1   $f2
+#define ftmp2   $f4
+#define ftmp3   $f6
+
+#define ft0     $f8
+#define ft1     $f10
+#define fa0     $f12
+#define fa1     $f14
+
+#define ft2     $f16
+#define ft3     $f18
+#define fs0     $f20
+#define fs1     $f22
+
+#define fs2     $f24
+#define fs3     $f26
+#define fs4     $f28
+#define fs5     $f30
+
+#endif /* SIZEOF_VOID_P == 8 */
 
 #if SIZEOF_VOID_P == 8
 
 #define aaddu   daddu
 #define asubu   dsubu
+#define aaddi   daddi
 #define aaddiu  daddiu
 #define ald     ld
 #define ast     sd
 #define ala     dla
 #define asll    dsll
-#define ashift  3
 
 #define all     lld
 #define asc     scd
 
 #define aaddu   addu
 #define asubu   subu
+#define aaddi   addi
 #define aaddiu  addiu
 #define ald     lw
 #define ast     sw
-#define ala     dla
-#define asll    dsll
-#define ashift  3
+#define ala     la
+#define asll    sll
 
 #define all     ll
 #define asc     sc
 
 /* save and restore macros ****************************************************/
 
+#if SIZEOF_VOID_P == 8
+
+#define SAVE_RETURN_REGISTERS(off) \
+       sd      v0,(0+(off))*8(sp)      ; \
+       sdc1    fv0,(1+(off))*8(sp)     ;
+
+#define RESTORE_RETURN_REGISTERS(off) \
+       ld      v0,(0+(off))*8(sp)      ; \
+       ldc1    fv0,(1+(off))*8(sp)     ;
+
+
 #define SAVE_ARGUMENT_REGISTERS(off) \
        sd      a0,(0+(off))*8(sp)      ; \
        sd      a1,(1+(off))*8(sp)      ; \
        sdc1    fa6,(14+(off))*8(sp); \
        sdc1    fa7,(15+(off))*8(sp); 
 
-
 #define RESTORE_ARGUMENT_REGISTERS(off) \
        ld      a0,(0+(off))*8(sp)      ; \
        ld      a1,(1+(off))*8(sp)      ; \
        sd      t1,(1+(off))*8(sp)      ; \
        sd      t2,(2+(off))*8(sp)      ; \
        sd      t3,(3+(off))*8(sp)      ; \
-       sd      t8,(4+(off))*8(sp)      ; \
+       sd      t4,(4+(off))*8(sp)      ; \
        \
        sdc1    ft3,(5+(off))*8(sp)     ; \
        sdc1    ft4,(6+(off))*8(sp)     ; \
        sdc1    ft17,(19+(off))*8(sp)   ; \
        sdc1    ft18,(20+(off))*8(sp)   ;
 
-
 #define RESTORE_TEMPORARY_REGISTERS(off) \
        ld      t0,(0+(off))*8(sp)      ; \
        ld      t1,(1+(off))*8(sp)      ; \
        ld      t2,(2+(off))*8(sp)      ; \
        ld      t3,(3+(off))*8(sp)      ; \
-       ld      t8,(4+(off))*8(sp)      ; \
+       ld      t4,(4+(off))*8(sp)      ; \
        \
        ldc1    ft3,(5+(off))*8(sp)     ; \
        ldc1    ft4,(6+(off))*8(sp)     ; \
        ldc1    ft17,(19+(off))*8(sp)   ; \
        ldc1    ft18,(20+(off))*8(sp)   ;
 
+#else /* SIZEOF_VOID_P == 8 */
+
+#define SAVE_RETURN_REGISTERS(off) \
+       sw      v0,(0+(off))*4(sp)      ; \
+       sw      v1,(1+(off))*4(sp)      ; \
+       sdc1    fv0,(2+(off))*4(sp)     ;
+
+#define RESTORE_RETURN_REGISTERS(off) \
+       lw      v0,(0+(off))*4(sp)      ; \
+       lw      v1,(1+(off))*4(sp)      ; \
+       ldc1    fv0,(2+(off))*4(sp)     ;
+
+
+#define SAVE_ARGUMENT_REGISTERS(off) \
+       sw      a0,(0+(off))*4(sp)      ; \
+       sw      a1,(1+(off))*4(sp)      ; \
+       sw      a2,(2+(off))*4(sp)      ; \
+       sw      a3,(3+(off))*4(sp)      ; \
+    sdc1    fa0,(4+(off))*4(sp) ; \
+    sdc1    fa1,(6+(off))*4(sp) ;
+
+#define RESTORE_ARGUMENT_REGISTERS(off) \
+       lw      a0,(0+(off))*4(sp)      ; \
+       lw      a1,(1+(off))*4(sp)      ; \
+       lw      a2,(2+(off))*4(sp)      ; \
+       lw      a3,(3+(off))*4(sp)      ; \
+    ldc1    fa0,(4+(off))*4(sp) ; \
+    ldc1    fa1,(6+(off))*4(sp) ;
+
+
+#define SAVE_TEMPORARY_REGISTERS(off) \
+       sw      t0,(0+(off))*4(sp)      ; \
+       sw      t1,(1+(off))*4(sp)      ; \
+       sw      t2,(2+(off))*4(sp)      ; \
+       sw      t3,(3+(off))*4(sp)      ; \
+       sw      t4,(4+(off))*4(sp)      ; \
+       sw      t5,(5+(off))*4(sp)      ; \
+       sw      t6,(6+(off))*4(sp)      ; \
+       sw      t7,(7+(off))*4(sp)      ; \
+    sdc1    ft0,(8+(off))*4(sp) ; \
+    sdc1    ft1,(10+(off))*4(sp) ; \
+    sdc1    ft2,(12+(off))*4(sp) ; \
+    sdc1    ft3,(14+(off))*4(sp) ;
+
+#define RESTORE_TEMPORARY_REGISTERS(off) \
+       lw      t0,(0+(off))*4(sp)      ; \
+       lw      t1,(1+(off))*4(sp)      ; \
+       lw      t2,(2+(off))*4(sp)      ; \
+       lw      t3,(3+(off))*4(sp)      ; \
+       lw      t4,(4+(off))*4(sp)      ; \
+       lw      t5,(5+(off))*4(sp)      ; \
+       lw      t6,(6+(off))*4(sp)      ; \
+       lw      t7,(7+(off))*4(sp)      ; \
+    ldc1    ft0,(8+(off))*4(sp) ; \
+    ldc1    ft1,(10+(off))*4(sp) ; \
+    ldc1    ft2,(12+(off))*4(sp) ; \
+    ldc1    ft3,(14+(off))*4(sp) ;
+
+#endif /* SIZEOF_VOID_P == 8 */
+
 #endif /* _MD_ASM_H */