authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2026-07-11 21:56:30-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2026-07-27 20:29:04+02:00
log63cb57eb31acc7d250b624b5d4501ebb6e969213
treef6db3948a7a7b594e94d09baa2501888d3d720b6
parent39c5d3a205b8fb2bf21d49c71c8c30ce15d73254

x86_64: fix typo in calling convention handling

Closes #36038

3 files changed, 396 insertions(+), 42 deletions(-)

src/codegen/x86_64/CodeGen.zig+1-1
......@@ -181994,7 +181994,7 @@ fn resolveCallingConventionValues(
181994181994 }
181995181995
181996181996 const save_param_gpr_index = param_gpr_index;
181997 const save_param_sse_index = param_gpr_index;
181997 const save_param_sse_index = param_sse_index;
181998181998
181999181999 var arg_mcv: [4]MCValue = undefined;
182000182000 var arg_mcv_len: u32 = 0;
test/c_abi/cfuncs.c+192-18
......@@ -191,9 +191,6 @@ void zig_struct_i128(struct i128);
191191#endif
192192void zig_five_integers(int32_t, int32_t, int32_t, int32_t, int32_t);
193193
194void zig_f32(float);
195void zig_f64(double);
196void zig_longdouble(long double);
197194void zig_five_floats(float, float, float, float, float);
198195
199196bool zig_ret_bool();
......@@ -219,6 +216,198 @@ float complex zig_cmultf(float complex a, float complex b);
219216double complex zig_cmultd(double complex a, double complex b);
220217#endif
221218
219float zig_ret_f32(void);
220void zig_f32(float, size_t);
221void zig_1_f32(size_t, float, size_t);
222void zig_2_f32(size_t, size_t, float, size_t);
223void zig_3_f32(size_t, size_t, size_t, float, size_t);
224void zig_4_f32(size_t, size_t, size_t, size_t, float, size_t);
225void zig_5_f32(size_t, size_t, size_t, size_t, size_t, float, size_t);
226void zig_6_f32(size_t, size_t, size_t, size_t, size_t, size_t, float, size_t);
227void zig_7_f32(size_t, size_t, size_t, size_t, size_t, size_t, size_t, float, size_t);
228void zig_8_f32(size_t, size_t, size_t, size_t, size_t, size_t, size_t, size_t, float, size_t);
229
230float c_ret_f32(void) {
231 return 11;
232}
233void c_f32(float f, size_t i) {
234 assert_or_panic(f == 12);
235 assert_or_panic(i == 1);
236}
237void c_1_f32(size_t a0, float f, size_t i) {
238 assert_or_panic(f == 13);
239 assert_or_panic(i == 2);
240}
241void c_2_f32(size_t a0, size_t a1, float f, size_t i) {
242 assert_or_panic(f == 14);
243 assert_or_panic(i == 3);
244}
245void c_3_f32(size_t a0, size_t a1, size_t a2, float f, size_t i) {
246 assert_or_panic(f == 15);
247 assert_or_panic(i == 4);
248}
249void c_4_f32(size_t a0, size_t a1, size_t a2, size_t a3, float f, size_t i) {
250 assert_or_panic(f == 16);
251 assert_or_panic(i == 5);
252}
253void c_5_f32(size_t a0, size_t a1, size_t a2, size_t a3, size_t a4, float f, size_t i) {
254 assert_or_panic(f == 17);
255 assert_or_panic(i == 6);
256}
257void c_6_f32(size_t a0, size_t a1, size_t a2, size_t a3, size_t a4, size_t a5, float f, size_t i) {
258 assert_or_panic(f == 18);
259 assert_or_panic(i == 7);
260}
261void c_7_f32(size_t a0, size_t a1, size_t a2, size_t a3, size_t a4, size_t a5, size_t a6, float f, size_t i) {
262 assert_or_panic(f == 19);
263 assert_or_panic(i == 8);
264}
265void c_8_f32(size_t a0, size_t a1, size_t a2, size_t a3, size_t a4, size_t a5, size_t a6, size_t a7, float f, size_t i) {
266 assert_or_panic(f == 20);
267 assert_or_panic(i == 9);
268}
269void c_test_f32(void) {
270 float f = zig_ret_f32();
271 assert_or_panic(f == 1);
272 zig_f32(2, 1);
273 zig_1_f32(0, 3, 2);
274 zig_2_f32(0, 1, 4, 3);
275 zig_3_f32(0, 1, 2, 5, 4);
276 zig_4_f32(0, 1, 2, 3, 6, 5);
277 zig_5_f32(0, 1, 2, 3, 4, 7, 6);
278 zig_6_f32(0, 1, 2, 3, 4, 5, 8, 7);
279 zig_7_f32(0, 1, 2, 3, 4, 5, 6, 9, 8);
280 zig_8_f32(0, 1, 2, 3, 4, 5, 6, 7, 10, 9);
281}
282
283double zig_ret_f64(void);
284void zig_f64(double, size_t);
285void zig_1_f64(size_t, double, size_t);
286void zig_2_f64(size_t, size_t, double, size_t);
287void zig_3_f64(size_t, size_t, size_t, double, size_t);
288void zig_4_f64(size_t, size_t, size_t, size_t, double, size_t);
289void zig_5_f64(size_t, size_t, size_t, size_t, size_t, double, size_t);
290void zig_6_f64(size_t, size_t, size_t, size_t, size_t, size_t, double, size_t);
291void zig_7_f64(size_t, size_t, size_t, size_t, size_t, size_t, size_t, double, size_t);
292void zig_8_f64(size_t, size_t, size_t, size_t, size_t, size_t, size_t, size_t, double, size_t);
293
294double c_ret_f64(void) {
295 return 11;
296}
297void c_f64(double f, size_t i) {
298 assert_or_panic(f == 12);
299 assert_or_panic(i == 1);
300}
301void c_1_f64(size_t a0, double f, size_t i) {
302 assert_or_panic(f == 13);
303 assert_or_panic(i == 2);
304}
305void c_2_f64(size_t a0, size_t a1, double f, size_t i) {
306 assert_or_panic(f == 14);
307 assert_or_panic(i == 3);
308}
309void c_3_f64(size_t a0, size_t a1, size_t a2, double f, size_t i) {
310 assert_or_panic(f == 15);
311 assert_or_panic(i == 4);
312}
313void c_4_f64(size_t a0, size_t a1, size_t a2, size_t a3, double f, size_t i) {
314 assert_or_panic(f == 16);
315 assert_or_panic(i == 5);
316}
317void c_5_f64(size_t a0, size_t a1, size_t a2, size_t a3, size_t a4, double f, size_t i) {
318 assert_or_panic(f == 17);
319 assert_or_panic(i == 6);
320}
321void c_6_f64(size_t a0, size_t a1, size_t a2, size_t a3, size_t a4, size_t a5, double f, size_t i) {
322 assert_or_panic(f == 18);
323 assert_or_panic(i == 7);
324}
325void c_7_f64(size_t a0, size_t a1, size_t a2, size_t a3, size_t a4, size_t a5, size_t a6, double f, size_t i) {
326 assert_or_panic(f == 19);
327 assert_or_panic(i == 8);
328}
329void c_8_f64(size_t a0, size_t a1, size_t a2, size_t a3, size_t a4, size_t a5, size_t a6, size_t a7, double f, size_t i) {
330 assert_or_panic(f == 20);
331 assert_or_panic(i == 9);
332}
333void c_test_f64(void) {
334 double f = zig_ret_f64();
335 assert_or_panic(f == 1);
336 zig_f64(2, 1);
337 zig_1_f64(0, 3, 2);
338 zig_2_f64(0, 1, 4, 3);
339 zig_3_f64(0, 1, 2, 5, 4);
340 zig_4_f64(0, 1, 2, 3, 6, 5);
341 zig_5_f64(0, 1, 2, 3, 4, 7, 6);
342 zig_6_f64(0, 1, 2, 3, 4, 5, 8, 7);
343 zig_7_f64(0, 1, 2, 3, 4, 5, 6, 9, 8);
344 zig_8_f64(0, 1, 2, 3, 4, 5, 6, 7, 10, 9);
345}
346
347long double zig_ret_longdouble(void);
348void zig_longdouble(long double, size_t);
349void zig_1_longdouble(size_t, long double, size_t);
350void zig_2_longdouble(size_t, size_t, long double, size_t);
351void zig_3_longdouble(size_t, size_t, size_t, long double, size_t);
352void zig_4_longdouble(size_t, size_t, size_t, size_t, long double, size_t);
353void zig_5_longdouble(size_t, size_t, size_t, size_t, size_t, long double, size_t);
354void zig_6_longdouble(size_t, size_t, size_t, size_t, size_t, size_t, long double, size_t);
355void zig_7_longdouble(size_t, size_t, size_t, size_t, size_t, size_t, size_t, long double, size_t);
356void zig_8_longdouble(size_t, size_t, size_t, size_t, size_t, size_t, size_t, size_t, long double, size_t);
357
358long double c_ret_longdouble(void) {
359 return 11;
360}
361void c_longdouble(long double f, size_t i) {
362 assert_or_panic(f == 12);
363 assert_or_panic(i == 1);
364}
365void c_1_longdouble(size_t a0, long double f, size_t i) {
366 assert_or_panic(f == 13);
367 assert_or_panic(i == 2);
368}
369void c_2_longdouble(size_t a0, size_t a1, long double f, size_t i) {
370 assert_or_panic(f == 14);
371 assert_or_panic(i == 3);
372}
373void c_3_longdouble(size_t a0, size_t a1, size_t a2, long double f, size_t i) {
374 assert_or_panic(f == 15);
375 assert_or_panic(i == 4);
376}
377void c_4_longdouble(size_t a0, size_t a1, size_t a2, size_t a3, long double f, size_t i) {
378 assert_or_panic(f == 16);
379 assert_or_panic(i == 5);
380}
381void c_5_longdouble(size_t a0, size_t a1, size_t a2, size_t a3, size_t a4, long double f, size_t i) {
382 assert_or_panic(f == 17);
383 assert_or_panic(i == 6);
384}
385void c_6_longdouble(size_t a0, size_t a1, size_t a2, size_t a3, size_t a4, size_t a5, long double f, size_t i) {
386 assert_or_panic(f == 18);
387 assert_or_panic(i == 7);
388}
389void c_7_longdouble(size_t a0, size_t a1, size_t a2, size_t a3, size_t a4, size_t a5, size_t a6, long double f, size_t i) {
390 assert_or_panic(f == 19);
391 assert_or_panic(i == 8);
392}
393void c_8_longdouble(size_t a0, size_t a1, size_t a2, size_t a3, size_t a4, size_t a5, size_t a6, size_t a7, long double f, size_t i) {
394 assert_or_panic(f == 20);
395 assert_or_panic(i == 9);
396}
397void c_test_longdouble(void) {
398 long double f = zig_ret_longdouble();
399 assert_or_panic(f == 1);
400 zig_longdouble(2, 1);
401 zig_1_longdouble(0, 3, 2);
402 zig_2_longdouble(0, 1, 4, 3);
403 zig_3_longdouble(0, 1, 2, 5, 4);
404 zig_4_longdouble(0, 1, 2, 3, 6, 5);
405 zig_5_longdouble(0, 1, 2, 3, 4, 7, 6);
406 zig_6_longdouble(0, 1, 2, 3, 4, 5, 8, 7);
407 zig_7_longdouble(0, 1, 2, 3, 4, 5, 6, 9, 8);
408 zig_8_longdouble(0, 1, 2, 3, 4, 5, 6, 7, 10, 9);
409}
410
222411#if defined(ZIG_BACKEND_STAGE2_X86_64) || defined(ZIG_PPC32) || defined(__wasm__)
223412
224413typedef bool Vector_2_bool __attribute__((ext_vector_type(2)));
......@@ -15326,9 +15515,6 @@ void run_c_tests(void) {
1532615515
1532715516 zig_five_integers(12, 34, 56, 78, 90);
1532815517
15329 zig_f32(12.34f);
15330 zig_f64(56.78);
15331 zig_longdouble(12.34l);
1533215518 zig_five_floats(1.0f, 2.0f, 3.0f, 4.0f, 5.0f);
1533315519
1533415520 zig_ptr((void *)0xdeadbeefL);
......@@ -15550,18 +15736,6 @@ void c_struct_i128(struct i128 x) {
1555015736}
1555115737#endif
1555215738
15553void c_f32(float x) {
15554 assert_or_panic(x == 12.34f);
15555}
15556
15557void c_f64(double x) {
15558 assert_or_panic(x == 56.78);
15559}
15560
15561void c_long_double(long double x) {
15562 assert_or_panic(x == 12.34l);
15563}
15564
1556515739void c_ptr(void *x) {
1556615740 assert_or_panic(x == (void *)0xdeadbeefL);
1556715741}
test/c_abi/main.zig+203-23
......@@ -104,10 +104,6 @@ export fn zig_struct_u128(a: U128) void {
104104 expect(a.value == 0xfffffffffffffffc) catch @panic("test failure: zig_struct_u128");
105105}
106106
107extern fn c_f32(f32) void;
108extern fn c_f64(f64) void;
109extern fn c_long_double(c_longdouble) void;
110
111107// On windows x64, the first 4 are passed via registers, others on the stack.
112108extern fn c_five_floats(f32, f32, f32, f32, f32) void;
113109
......@@ -120,28 +116,9 @@ export fn zig_five_floats(a: f32, b: f32, c: f32, d: f32, e: f32) void {
120116}
121117
122118test "floats" {
123 c_f32(12.34);
124 c_f64(56.78);
125119 c_five_floats(1.0, 2.0, 3.0, 4.0, 5.0);
126120}
127121
128test "long double" {
129 if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest;
130
131 c_long_double(12.34);
132}
133
134export fn zig_f32(x: f32) void {
135 expect(x == 12.34) catch @panic("test failure: zig_f32");
136}
137export fn zig_f64(x: f64) void {
138 expect(x == 56.78) catch @panic("test failure: zig_f64");
139}
140export fn zig_longdouble(x: c_longdouble) void {
141 if (!builtin.target.cpu.arch.isWasm()) return; // waiting for #1481
142 expect(x == 12.34) catch @panic("test failure: zig_longdouble");
143}
144
145122extern fn c_ptr(*anyopaque) void;
146123
147124test "pointer" {
......@@ -269,6 +246,209 @@ export fn zig_cmultd_comp(a_r: f64, a_i: f64, b_r: f64, b_i: f64) ComplexDouble
269246 return .{ .real = 1.5, .imag = 13.5 };
270247}
271248
249export fn zig_ret_f32() f32 {
250 return 1;
251}
252export fn zig_f32(f: f32, i: usize) void {
253 expect(f == 2) catch @panic("test failure");
254 expect(i == 1) catch @panic("test failure");
255}
256export fn zig_1_f32(_: usize, f: f32, i: usize) void {
257 expect(f == 3) catch @panic("test failure");
258 expect(i == 2) catch @panic("test failure");
259}
260export fn zig_2_f32(_: usize, _: usize, f: f32, i: usize) void {
261 expect(f == 4) catch @panic("test failure");
262 expect(i == 3) catch @panic("test failure");
263}
264export fn zig_3_f32(_: usize, _: usize, _: usize, f: f32, i: usize) void {
265 expect(f == 5) catch @panic("test failure");
266 expect(i == 4) catch @panic("test failure");
267}
268export fn zig_4_f32(_: usize, _: usize, _: usize, _: usize, f: f32, i: usize) void {
269 expect(f == 6) catch @panic("test failure");
270 expect(i == 5) catch @panic("test failure");
271}
272export fn zig_5_f32(_: usize, _: usize, _: usize, _: usize, _: usize, f: f32, i: usize) void {
273 expect(f == 7) catch @panic("test failure");
274 expect(i == 6) catch @panic("test failure");
275}
276export fn zig_6_f32(_: usize, _: usize, _: usize, _: usize, _: usize, _: usize, f: f32, i: usize) void {
277 expect(f == 8) catch @panic("test failure");
278 expect(i == 7) catch @panic("test failure");
279}
280export fn zig_7_f32(_: usize, _: usize, _: usize, _: usize, _: usize, _: usize, _: usize, f: f32, i: usize) void {
281 expect(f == 9) catch @panic("test failure");
282 expect(i == 8) catch @panic("test failure");
283}
284export fn zig_8_f32(_: usize, _: usize, _: usize, _: usize, _: usize, _: usize, _: usize, _: usize, f: f32, i: usize) void {
285 expect(f == 10) catch @panic("test failure");
286 expect(i == 9) catch @panic("test failure");
287}
288
289extern fn c_ret_f32() f32;
290extern fn c_f32(f32, usize) void;
291extern fn c_1_f32(usize, f32, usize) void;
292extern fn c_2_f32(usize, usize, f32, usize) void;
293extern fn c_3_f32(usize, usize, usize, f32, usize) void;
294extern fn c_4_f32(usize, usize, usize, usize, f32, usize) void;
295extern fn c_5_f32(usize, usize, usize, usize, usize, f32, usize) void;
296extern fn c_6_f32(usize, usize, usize, usize, usize, usize, f32, usize) void;
297extern fn c_7_f32(usize, usize, usize, usize, usize, usize, usize, f32, usize) void;
298extern fn c_8_f32(usize, usize, usize, usize, usize, usize, usize, usize, f32, usize) void;
299extern fn c_test_f32() void;
300
301test "f32" {
302 const f = c_ret_f32();
303 try expect(f == 11);
304 c_f32(12, 1);
305 c_1_f32(0, 13, 2);
306 c_2_f32(0, 1, 14, 3);
307 c_3_f32(0, 1, 2, 15, 4);
308 c_4_f32(0, 1, 2, 3, 16, 5);
309 c_5_f32(0, 1, 2, 3, 4, 17, 6);
310 c_6_f32(0, 1, 2, 3, 4, 5, 18, 7);
311 c_7_f32(0, 1, 2, 3, 4, 5, 6, 19, 8);
312 c_8_f32(0, 1, 2, 3, 4, 5, 6, 7, 20, 9);
313 c_test_f32();
314}
315
316export fn zig_ret_f64() f64 {
317 return 1;
318}
319export fn zig_f64(f: f64, i: usize) void {
320 expect(f == 2) catch @panic("test failure");
321 expect(i == 1) catch @panic("test failure");
322}
323export fn zig_1_f64(_: usize, f: f64, i: usize) void {
324 expect(f == 3) catch @panic("test failure");
325 expect(i == 2) catch @panic("test failure");
326}
327export fn zig_2_f64(_: usize, _: usize, f: f64, i: usize) void {
328 expect(f == 4) catch @panic("test failure");
329 expect(i == 3) catch @panic("test failure");
330}
331export fn zig_3_f64(_: usize, _: usize, _: usize, f: f64, i: usize) void {
332 expect(f == 5) catch @panic("test failure");
333 expect(i == 4) catch @panic("test failure");
334}
335export fn zig_4_f64(_: usize, _: usize, _: usize, _: usize, f: f64, i: usize) void {
336 expect(f == 6) catch @panic("test failure");
337 expect(i == 5) catch @panic("test failure");
338}
339export fn zig_5_f64(_: usize, _: usize, _: usize, _: usize, _: usize, f: f64, i: usize) void {
340 expect(f == 7) catch @panic("test failure");
341 expect(i == 6) catch @panic("test failure");
342}
343export fn zig_6_f64(_: usize, _: usize, _: usize, _: usize, _: usize, _: usize, f: f64, i: usize) void {
344 expect(f == 8) catch @panic("test failure");
345 expect(i == 7) catch @panic("test failure");
346}
347export fn zig_7_f64(_: usize, _: usize, _: usize, _: usize, _: usize, _: usize, _: usize, f: f64, i: usize) void {
348 expect(f == 9) catch @panic("test failure");
349 expect(i == 8) catch @panic("test failure");
350}
351export fn zig_8_f64(_: usize, _: usize, _: usize, _: usize, _: usize, _: usize, _: usize, _: usize, f: f64, i: usize) void {
352 expect(f == 10) catch @panic("test failure");
353 expect(i == 9) catch @panic("test failure");
354}
355
356extern fn c_ret_f64() f64;
357extern fn c_f64(f64, usize) void;
358extern fn c_1_f64(usize, f64, usize) void;
359extern fn c_2_f64(usize, usize, f64, usize) void;
360extern fn c_3_f64(usize, usize, usize, f64, usize) void;
361extern fn c_4_f64(usize, usize, usize, usize, f64, usize) void;
362extern fn c_5_f64(usize, usize, usize, usize, usize, f64, usize) void;
363extern fn c_6_f64(usize, usize, usize, usize, usize, usize, f64, usize) void;
364extern fn c_7_f64(usize, usize, usize, usize, usize, usize, usize, f64, usize) void;
365extern fn c_8_f64(usize, usize, usize, usize, usize, usize, usize, usize, f64, usize) void;
366extern fn c_test_f64() void;
367
368test "f64" {
369 const f = c_ret_f64();
370 try expect(f == 11);
371 c_f64(12, 1);
372 c_1_f64(0, 13, 2);
373 c_2_f64(0, 1, 14, 3);
374 c_3_f64(0, 1, 2, 15, 4);
375 c_4_f64(0, 1, 2, 3, 16, 5);
376 c_5_f64(0, 1, 2, 3, 4, 17, 6);
377 c_6_f64(0, 1, 2, 3, 4, 5, 18, 7);
378 c_7_f64(0, 1, 2, 3, 4, 5, 6, 19, 8);
379 c_8_f64(0, 1, 2, 3, 4, 5, 6, 7, 20, 9);
380 c_test_f64();
381}
382
383export fn zig_ret_longdouble() c_longdouble {
384 return 1;
385}
386export fn zig_longdouble(f: c_longdouble, i: usize) void {
387 expect(f == 2) catch @panic("test failure");
388 expect(i == 1) catch @panic("test failure");
389}
390export fn zig_1_longdouble(_: usize, f: c_longdouble, i: usize) void {
391 expect(f == 3) catch @panic("test failure");
392 expect(i == 2) catch @panic("test failure");
393}
394export fn zig_2_longdouble(_: usize, _: usize, f: c_longdouble, i: usize) void {
395 expect(f == 4) catch @panic("test failure");
396 expect(i == 3) catch @panic("test failure");
397}
398export fn zig_3_longdouble(_: usize, _: usize, _: usize, f: c_longdouble, i: usize) void {
399 expect(f == 5) catch @panic("test failure");
400 expect(i == 4) catch @panic("test failure");
401}
402export fn zig_4_longdouble(_: usize, _: usize, _: usize, _: usize, f: c_longdouble, i: usize) void {
403 expect(f == 6) catch @panic("test failure");
404 expect(i == 5) catch @panic("test failure");
405}
406export fn zig_5_longdouble(_: usize, _: usize, _: usize, _: usize, _: usize, f: c_longdouble, i: usize) void {
407 expect(f == 7) catch @panic("test failure");
408 expect(i == 6) catch @panic("test failure");
409}
410export fn zig_6_longdouble(_: usize, _: usize, _: usize, _: usize, _: usize, _: usize, f: c_longdouble, i: usize) void {
411 expect(f == 8) catch @panic("test failure");
412 expect(i == 7) catch @panic("test failure");
413}
414export fn zig_7_longdouble(_: usize, _: usize, _: usize, _: usize, _: usize, _: usize, _: usize, f: c_longdouble, i: usize) void {
415 expect(f == 9) catch @panic("test failure");
416 expect(i == 8) catch @panic("test failure");
417}
418export fn zig_8_longdouble(_: usize, _: usize, _: usize, _: usize, _: usize, _: usize, _: usize, _: usize, f: c_longdouble, i: usize) void {
419 expect(f == 10) catch @panic("test failure");
420 expect(i == 9) catch @panic("test failure");
421}
422
423extern fn c_ret_longdouble() c_longdouble;
424extern fn @"c_longdouble"(c_longdouble, usize) void;
425extern fn c_1_longdouble(usize, c_longdouble, usize) void;
426extern fn c_2_longdouble(usize, usize, c_longdouble, usize) void;
427extern fn c_3_longdouble(usize, usize, usize, c_longdouble, usize) void;
428extern fn c_4_longdouble(usize, usize, usize, usize, c_longdouble, usize) void;
429extern fn c_5_longdouble(usize, usize, usize, usize, usize, c_longdouble, usize) void;
430extern fn c_6_longdouble(usize, usize, usize, usize, usize, usize, c_longdouble, usize) void;
431extern fn c_7_longdouble(usize, usize, usize, usize, usize, usize, usize, c_longdouble, usize) void;
432extern fn c_8_longdouble(usize, usize, usize, usize, usize, usize, usize, usize, c_longdouble, usize) void;
433extern fn c_test_longdouble() void;
434
435test "long double" {
436 if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest;
437
438 const f = c_ret_longdouble();
439 try expect(f == 11);
440 @"c_longdouble"(12, 1);
441 c_1_longdouble(0, 13, 2);
442 c_2_longdouble(0, 1, 14, 3);
443 c_3_longdouble(0, 1, 2, 15, 4);
444 c_4_longdouble(0, 1, 2, 3, 16, 5);
445 c_5_longdouble(0, 1, 2, 3, 4, 17, 6);
446 c_6_longdouble(0, 1, 2, 3, 4, 5, 18, 7);
447 c_7_longdouble(0, 1, 2, 3, 4, 5, 6, 19, 8);
448 c_8_longdouble(0, 1, 2, 3, 4, 5, 6, 7, 20, 9);
449 c_test_longdouble();
450}
451
272452comptime {
273453 skip: {
274454 if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .x86_64) break :skip;