[ci] Bump timeout in ms-test-suite
[mono-project.git] / mono / mini / support-s390x.h
blobf93dc88c0c6922e3b097ffd2c0f488df657801d9
1 #ifndef __MONO_SUPPORT_S390X_H__
2 #define __MONO_SUPPORT_S390X_H__
4 #define S390_SET(loc, dr, v) \
5 do { \
6 guint64 val = (guint64) v; \
7 if (s390_is_imm16(val)) { \
8 s390_lghi(loc, dr, val); \
9 } else if (s390_is_uimm16(val)) { \
10 s390_llill(loc, dr, val); \
11 } else if (s390_is_imm32(val)) { \
12 s390_lgfi(loc, dr, val); \
13 } else if (s390_is_uimm32(val)) { \
14 s390_llilf(loc, dr, val); \
15 } else { \
16 guint32 hi = (val) >> 32; \
17 guint32 lo = (val) & 0xffffffff; \
18 s390_iihf(loc, dr, hi); \
19 s390_iilf(loc, dr, lo); \
20 } \
21 } while (0)
23 #define S390_LONG(loc, opy, op, r, ix, br, off) \
24 if (s390_is_imm20(off)) { \
25 s390_##opy (loc, r, ix, br, off); \
26 } else { \
27 if (ix == 0) { \
28 S390_SET(loc, s390_r13, off); \
29 s390_la (loc, s390_r13, s390_r13, br, 0); \
30 } else { \
31 s390_la (loc, s390_r13, ix, br, 0); \
32 S390_SET (loc, s390_r0, off); \
33 s390_agr (loc, s390_r13, s390_r0); \
34 } \
35 s390_##op (loc, r, 0, s390_r13, 0); \
38 #define S390_SET_MASK(loc, dr, v) \
39 do { \
40 if (s390_is_imm16 (v)) { \
41 s390_lghi (loc, dr, v); \
42 } else if (s390_is_imm32 (v)) { \
43 s390_lgfi (loc, dr, v); \
44 } else { \
45 gint64 val = (gint64) v; \
46 guint32 hi = (val) >> 32; \
47 guint32 lo = (val) & 0xffffffff; \
48 s390_iilf(loc, dr, lo); \
49 s390_iihf(loc, dr, hi); \
50 } \
51 } while (0)
53 #define S390_CALL_TEMPLATE(loc, r) \
54 do { \
55 s390_iihf (loc, r, 0); \
56 s390_iilf (loc, r, 0); \
57 s390_basr (loc, s390_r14, r); \
58 } while (0)
60 #define S390_BR_TEMPLATE(loc, r) \
61 do { \
62 s390_iihf (loc, r, 0); \
63 s390_iilf (loc, r, 0); \
64 s390_br (loc, r); \
65 } while (0)
67 #define S390_LOAD_TEMPLATE(loc, r) \
68 do { \
69 s390_iihf (loc, r, 0); \
70 s390_iilf (loc, r, 0); \
71 } while (0)
73 #define S390_EMIT_CALL(loc, t) \
74 do { \
75 gint64 val = (gint64) t; \
76 guint32 hi = (val) >> 32; \
77 guint32 lo = (val) & 0xffffffff; \
78 uintptr_t p = (uintptr_t) loc; \
79 p += 2; \
80 *(guint32 *) p = hi; \
81 p += 6; \
82 *(guint32 *) p = lo; \
83 } while (0)
85 #define S390_EMIT_LOAD(loc, v) \
86 do { \
87 gint64 val = (gint64) v; \
88 guint32 hi = (val) >> 32; \
89 guint32 lo = (val) & 0xffffffff; \
90 uintptr_t p = (uintptr_t) loc; \
91 p += 2; \
92 *(guint32 *) p = hi; \
93 p += 6; \
94 *(guint32 *) p = lo; \
95 } while (0)
97 #endif /* __MONO_SUPPORT_S390X_H__ */