* Removed all Id tags.
[cacao.git] / src / vm / jit / s390 / md-asm.h
index 0d673a2a24eb63b67ef45ffc8326fd625380ca82..ea09fe7c68adeb607388f7d767ca69c91e7a9052 100644 (file)
@@ -28,8 +28,6 @@
 
    Changes:
 
-   $Id: md-asm.h 7219 2007-01-16 22:18:57Z pm $
-
 */
 
 
 
 /* register defines ***********************************************************/
 
-#if 0
-
-#define v0       %rax
-#define v0l      %eax
-#define itmp1    v0
-
-#define a3       %rcx
-#define a2       %rdx
-
-#define t0       %rbx
-#define t0l      %ebx
-
-#define sp       %rsp
-#define s0       %rbp
-
-#define a1       %rsi
-#define a0       %rdi
-#define a0l      %edi
-
-#define a4       %r8
-#define a5       %r9
-
-#define itmp2    %r10
-#define itmp3    %r14
-
-#define s1       %r12
-#define s2       %r13
-#define s3       %r14
-#define s4       %r15
-
-
-#define bp       s0
-
-#define itmp1l   %eax
-#define itmp2l   %r10d
-#define itmp3l   %r11d
-
-#define xptr     itmp1
-#define xpc      itmp2
-#define mptr     itmp2
-
-
-#define fa0      %xmm0
-#define fa1      %xmm1
-#define fa2      %xmm2
-#define fa3      %xmm3
-#define fa4      %xmm4
-#define fa5      %xmm5
-#define fa6      %xmm6
-#define fa7      %xmm7
-
-#define ftmp1    %xmm8
-#define ftmp2    %xmm9
-#define ftmp3    %xmm10
-
-#define ft0      %xmm11
-#define ft1      %xmm12
-#define ft2      %xmm13
-#define ft3      %xmm14
-#define ft4      %xmm15
-
-#endif
-
 #define a0       %r2
 #define a1       %r3
 #define a2       %r4
 #define a4       %r6
 
 #define sp       %r15
-#define itmp1    %r0
-#define itmp2    %r1
+#define itmp1    %r1
+#define itmp2    %r12
 #define itmp3    %r14
 #define v0       %r2
 #define pv       %r13
+#define ra       %r14
 
 #define mptr     itmp2
+#define xptr     itmp1
+#define xpc      itmp2
 
 #define s0 %r7
 #define s1 %r8
 #define s2 %r9
 #define s3 %r10
 #define s4 %r11
-#define s5 %r12
 
 #define fa0 %f0
 #define fa1 %f2
 
 /* save and restore macros ****************************************************/
 
-#define SAVE_ARGUMENT_REGISTERS(off) \
-       mov     a0,(0+(off))*8(sp)   ; \
-       mov     a1,(1+(off))*8(sp)   ; \
-       mov     a2,(2+(off))*8(sp)   ; \
-       mov     a3,(3+(off))*8(sp)   ; \
-       mov     a4,(4+(off))*8(sp)   ; \
-       mov     a5,(5+(off))*8(sp)   ; \
-       \
-       movq    fa0,(6+(off))*8(sp)  ; \
-       movq    fa1,(7+(off))*8(sp)  ; \
-       movq    fa2,(8+(off))*8(sp)  ; \
-       movq    fa3,(9+(off))*8(sp)  ; \
-       movq    fa4,(10+(off))*8(sp) ; \
-       movq    fa5,(11+(off))*8(sp) ; \
-       movq    fa6,(12+(off))*8(sp) ; \
-       movq    fa7,(13+(off))*8(sp) ;
-
-
-#define RESTORE_ARGUMENT_REGISTERS(off) \
-       mov     (0+(off))*8(sp),a0   ; \
-       mov     (1+(off))*8(sp),a1   ; \
-       mov     (2+(off))*8(sp),a2   ; \
-       mov     (3+(off))*8(sp),a3   ; \
-       mov     (4+(off))*8(sp),a4   ; \
-       mov     (5+(off))*8(sp),a5   ; \
-       \
-       movq    (6+(off))*8(sp),fa0  ; \
-       movq    (7+(off))*8(sp),fa1  ; \
-       movq    (8+(off))*8(sp),fa2  ; \
-       movq    (9+(off))*8(sp),fa3  ; \
-       movq    (10+(off))*8(sp),fa4 ; \
-       movq    (11+(off))*8(sp),fa5 ; \
-       movq    (12+(off))*8(sp),fa6 ; \
-       movq    (13+(off))*8(sp),fa7 ;
-
-
-#define SAVE_TEMPORARY_REGISTERS(off) \
-       mov     t0,(0+(off))*8(sp)   ; \
-       movq    ft0,(1+(off))*8(sp)  ; \
-       movq    ft1,(2+(off))*8(sp)  ; \
-       movq    ft2,(3+(off))*8(sp)  ; \
-       movq    ft3,(4+(off))*8(sp)  ;
-
-
-#define RESTORE_TEMPORARY_REGISTERS(off) \
-       mov     (0+(off))*8(sp),t0   ; \
-       movq    (1+(off))*8(sp),ft0  ; \
-       movq    (2+(off))*8(sp),ft1  ; \
-       movq    (3+(off))*8(sp),ft2  ; \
-       movq    (4+(off))*8(sp),ft3  ;
+/* Volatile float registers (all volatile in terms of C abi) */
+
+#define LOAD_STORE_VOLATILE_FLOAT_REGISTERS(inst, off) \
+       inst    %f0, ((0 * 8) + (off))(sp); \
+       inst    %f2, ((1 * 8) + (off))(sp); \
+       inst    %f1, ((2 * 8) + (off))(sp); \
+       inst    %f3, ((3 * 8) + (off))(sp); \
+       inst    %f5, ((4 * 8) + (off))(sp); \
+       inst    %f7, ((5 * 8) + (off))(sp); \
+       inst    %f8, ((6 * 8) + (off))(sp); \
+       inst    %f9, ((7 * 8) + (off))(sp); \
+       inst    %f10, ((8 * 8) + (off))(sp); \
+       inst    %f11, ((9 * 8) + (off))(sp); \
+       inst    %f12, ((10 * 8) + (off))(sp); \
+       inst    %f13, ((11 * 8) + (off))(sp); \
+       inst    %f14, ((12 * 8) + (off))(sp); \
+       inst    %f15, ((13 * 8) + (off))(sp); 
+
+#define VOLATILE_FLOAT_REGISTERS_SIZE (14 * 8)
+
+#define LOAD_VOLATILE_FLOAT_REGISTERS(off) LOAD_STORE_VOLATILE_FLOAT_REGISTERS(ld, off)
+#define STORE_VOLATILE_FLOAT_REGISTERS(off) LOAD_STORE_VOLATILE_FLOAT_REGISTERS(std, off)
+
+/* Volatile integer registers (all volatile in terms of C abi) */
+
+#define LOAD_STORE_VOLATILE_INTEGER_REGISTERS(instm, inst, off) \
+       instm   %r0, %r5, ((0 * 4) + (off))(sp); \
+       inst    %r14, ((6 * 4) + (off))(sp);
+
+#define VOLATILE_INTEGER_REGISTERS_SIZE (7 * 4)
+
+#define LOAD_VOLATILE_INTEGER_REGISTERS(off) LOAD_STORE_VOLATILE_INTEGER_REGISTERS(lm, l, off)
+#define STORE_VOLATILE_INTEGER_REGISTERS(off) LOAD_STORE_VOLATILE_INTEGER_REGISTERS(stm, st, off)
+
+/* Argument registers (in terms of JAVA an C abi) */
+
+#define ARGUMENT_REGISTERS_SIZE ((5 * 4) + (2 * 8))
+
+#define LOAD_STORE_ARGUMENT_REGISTERS(iinst, finst, off) \
+       iinst %r2, %r6, (off)(sp) ; \
+       finst %f0, (off +  (5 * 4))(sp) ; \
+       finst %f2, (off + (5 * 4) + 8)(sp)
+
+#define STORE_ARGUMENT_REGISTERS(off) LOAD_STORE_ARGUMENT_REGISTERS(stm, std, off)
+#define LOAD_ARGUMENT_REGISTERS(off) LOAD_STORE_ARGUMENT_REGISTERS(lm, ld, off)
+
+/* Temporary registers (in terms of JAVA abi) */
+
+#define TEMPORARY_REGISTERS_SIZE ((1 * 4) + (12 * 8))
+
+#define LOAD_STORE_TEMPORARY_REGISTERS(iinst, finst, off) \
+       finst    %f1, ((0 * 8) + (off))(sp); \
+       finst    %f3, ((1 * 8) + (off))(sp); \
+       finst    %f5, ((2 * 8) + (off))(sp); \
+       finst    %f7, ((3 * 8) + (off))(sp); \
+       finst    %f8, ((4 * 8) + (off))(sp); \
+       finst    %f9, ((5 * 8) + (off))(sp); \
+       finst    %f10, ((6 * 8) + (off))(sp); \
+       finst    %f11, ((7 * 8) + (off))(sp); \
+       finst    %f12, ((8 * 8) + (off))(sp); \
+       finst    %f13, ((9 * 8) + (off))(sp); \
+       finst    %f14, ((10 * 8) + (off))(sp); \
+       finst    %f15, ((11 * 8) + (off))(sp); \
+       iinst    %r0, ((12 * 8) + (off))(sp);
+
+#define LOAD_TEMPORARY_REGISTERS(off) LOAD_STORE_TEMPORARY_REGISTERS(l, ld, off)
+#define STORE_TEMPORARY_REGISTERS(off) LOAD_STORE_TEMPORARY_REGISTERS(st, std, off)
 
 #endif /* _MD_ASM_H */