[MSBuild] Fixed a test that failed when the GAC wasn't available
[mono-project.git] / mono / mini / support-s390x.h
blob62edcc4e7e9279bb91bdb4079c45b25be997a27f
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_uimm16(val)) { \
8 s390_llill(loc, dr, val); \
9 } else if (s390_is_uimm32(val)) { \
10 s390_llilf(loc, dr, val); \
11 } else { \
12 guint32 hi = (val) >> 32; \
13 guint32 lo = (val) & 0xffffffff; \
14 s390_iihf(loc, dr, hi); \
15 s390_iilf(loc, dr, lo); \
16 } \
17 } while (0)
19 #define S390_LONG(loc, opy, op, r, ix, br, off) \
20 if (s390_is_imm20(off)) { \
21 s390_##opy (loc, r, ix, br, off); \
22 } else { \
23 if (ix == 0) { \
24 S390_SET(loc, s390_r13, off); \
25 s390_la (loc, s390_r13, s390_r13, br, 0); \
26 } else { \
27 s390_la (loc, s390_r13, ix, br, 0); \
28 S390_SET (loc, s390_r0, off); \
29 s390_agr (loc, s390_r13, s390_r0); \
30 } \
31 s390_##op (loc, r, 0, s390_r13, 0); \
34 #define S390_SET_MASK(loc, dr, v) \
35 do { \
36 if (s390_is_imm16 (v)) { \
37 s390_lghi (loc, dr, v); \
38 } else if (s390_is_imm32 (v)) { \
39 s390_lgfi (loc, dr, v); \
40 } else { \
41 gint64 val = (gint64) v; \
42 guint32 hi = (val) >> 32; \
43 guint32 lo = (val) & 0xffffffff; \
44 s390_iilf(loc, dr, lo); \
45 s390_iihf(loc, dr, hi); \
46 } \
47 } while (0)
49 #define S390_CALL_TEMPLATE(loc, r) \
50 do { \
51 s390_iihf (loc, r, 0); \
52 s390_iilf (loc, r, 0); \
53 s390_basr (loc, s390_r14, r); \
54 } while (0)
56 #define S390_BR_TEMPLATE(loc, r) \
57 do { \
58 s390_iihf (loc, r, 0); \
59 s390_iilf (loc, r, 0); \
60 s390_br (loc, r); \
61 } while (0)
63 #define S390_LOAD_TEMPLATE(loc, r) \
64 do { \
65 s390_iihf (loc, r, 0); \
66 s390_iilf (loc, r, 0); \
67 } while (0)
69 #define S390_EMIT_CALL(loc, t) \
70 do { \
71 gint64 val = (gint64) t; \
72 guint32 hi = (val) >> 32; \
73 guint32 lo = (val) & 0xffffffff; \
74 uintptr_t p = (uintptr_t) loc; \
75 p += 2; \
76 *(guint32 *) p = hi; \
77 p += 6; \
78 *(guint32 *) p = lo; \
79 } while (0)
81 #define S390_EMIT_LOAD(loc, v) \
82 do { \
83 gint64 val = (gint64) v; \
84 guint32 hi = (val) >> 32; \
85 guint32 lo = (val) & 0xffffffff; \
86 uintptr_t p = (uintptr_t) loc; \
87 p += 2; \
88 *(guint32 *) p = hi; \
89 p += 6; \
90 *(guint32 *) p = lo; \
91 } while (0)
93 #endif /* __MONO_SUPPORT_S390X_H__ */