1 #include "avx512f-check.h"
4 struct IntegerRegisters iregs
;
5 struct FloatRegisters fregs
;
6 unsigned int num_iregs
, num_fregs
;
46 check_union_passing1(union un1 u1 ATTRIBUTE_UNUSED
,
47 union un1 u2 ATTRIBUTE_UNUSED
,
48 union un1 u3 ATTRIBUTE_UNUSED
,
49 union un1 u4 ATTRIBUTE_UNUSED
,
50 union un1 u5 ATTRIBUTE_UNUSED
,
51 union un1 u6 ATTRIBUTE_UNUSED
,
52 union un1 u7 ATTRIBUTE_UNUSED
,
53 union un1 u8 ATTRIBUTE_UNUSED
)
55 /* Check register contents. */
60 check_union_passing2(union un2 u1 ATTRIBUTE_UNUSED
,
61 union un2 u2 ATTRIBUTE_UNUSED
,
62 union un2 u3 ATTRIBUTE_UNUSED
,
63 union un2 u4 ATTRIBUTE_UNUSED
,
64 union un2 u5 ATTRIBUTE_UNUSED
,
65 union un2 u6 ATTRIBUTE_UNUSED
,
66 union un2 u7 ATTRIBUTE_UNUSED
,
67 union un2 u8 ATTRIBUTE_UNUSED
)
69 /* Check register contents. */
74 check_union_passing3(union un3 u1 ATTRIBUTE_UNUSED
,
75 union un3 u2 ATTRIBUTE_UNUSED
,
76 union un3 u3 ATTRIBUTE_UNUSED
,
77 union un3 u4 ATTRIBUTE_UNUSED
,
78 union un3 u5 ATTRIBUTE_UNUSED
,
79 union un3 u6 ATTRIBUTE_UNUSED
,
80 union un3 u7 ATTRIBUTE_UNUSED
,
81 union un3 u8 ATTRIBUTE_UNUSED
)
83 /* Check register contents. */
88 check_union_passing4(union un4 u ATTRIBUTE_UNUSED
)
90 /* Check the passing on the stack by comparing the address of the
91 stack elements to the expected place on the stack. */
92 assert ((unsigned long)&u
.x
== rsp
+8);
93 assert ((unsigned long)&u
.ld
== rsp
+8);
97 check_union_passing5(union un5 u ATTRIBUTE_UNUSED
)
99 /* Check the passing on the stack by comparing the address of the
100 stack elements to the expected place on the stack. */
101 assert ((unsigned long)&u
.x
== rsp
+8);
102 assert ((unsigned long)&u
.i
== rsp
+8);
106 check_union_passing6(union un6 u1 ATTRIBUTE_UNUSED
,
107 union un6 u2 ATTRIBUTE_UNUSED
,
108 union un6 u3 ATTRIBUTE_UNUSED
,
109 union un6 u4 ATTRIBUTE_UNUSED
,
110 union un6 u5 ATTRIBUTE_UNUSED
,
111 union un6 u6 ATTRIBUTE_UNUSED
,
112 union un6 u7 ATTRIBUTE_UNUSED
,
113 union un6 u8 ATTRIBUTE_UNUSED
)
115 /* Check register contents. */
116 check_m512_arguments
;
119 #define check_union_passing1 WRAP_CALL(check_union_passing1)
120 #define check_union_passing2 WRAP_CALL(check_union_passing2)
121 #define check_union_passing3 WRAP_CALL(check_union_passing3)
122 #define check_union_passing4 WRAP_CALL(check_union_passing4)
123 #define check_union_passing5 WRAP_CALL(check_union_passing5)
124 #define check_union_passing6 WRAP_CALL(check_union_passing6)
137 for (i
= 0; i
< 8; i
++)
138 u1
[i
].x
= (__m512
){32+i
, 0, i
, 0, -i
, 0, i
- 12, i
+ 8,
139 32+i
, 0, i
, 0, -i
, 0, i
- 12, i
+ 8};
141 clear_struct_registers
;
142 for (i
= 0; i
< 8; i
++)
143 (&fregs
.zmm0
)[i
]._m512
[0] = u1
[i
].x
;
145 check_union_passing1(u1
[0], u1
[1], u1
[2], u1
[3],
146 u1
[4], u1
[5], u1
[6], u1
[7]);
148 clear_struct_registers
;
149 for (i
= 0; i
< 8; i
++)
152 (&fregs
.zmm0
)[i
]._m512
[0] = u2
[i
].x
;
155 check_union_passing2(u2
[0], u2
[1], u2
[2], u2
[3],
156 u2
[4], u2
[5], u2
[6], u2
[7]);
158 clear_struct_registers
;
159 for (i
= 0; i
< 8; i
++)
162 (&fregs
.zmm0
)[i
]._m512
[0] = u3
[i
].x
;
165 check_union_passing3(u3
[0], u3
[1], u3
[2], u3
[3],
166 u3
[4], u3
[5], u3
[6], u3
[7]);
168 check_union_passing4(u4
);
169 check_union_passing5(u5
);
171 clear_struct_registers
;
172 for (i
= 0; i
< 8; i
++)
175 (&fregs
.zmm0
)[i
]._m512
[0] = u6
[i
].x
;
178 check_union_passing6(u6
[0], u6
[1], u6
[2], u6
[3],
179 u6
[4], u6
[5], u6
[6], u6
[7]);