summaryrefslogtreecommitdiff
path: root/tests/src/JIT/jit64/mcc/interop/native_i1c.cpp
blob: 8d25fd58a681c151021251ece9b17c855c8512e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

#include <stdarg.h>
#include "native.h"

#ifdef __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wvarargs"
#endif

MCC_API VType1 __cdecl sum(float first, ...) {
    VType1 result;

    int count = 0;
    float sum = 0.0;
    float val = first;
    va_list args;

    // initialize variable arguments.
    va_start(args, first);
    while (val != (float)-1) {
        sum += val;
        count++;
        val = va_arg(args, float);
    }
    // reset variable arguments.
    va_end(args);

    result.count = (float)count;
    result.sum = sum;
    result.average = result.sum / result.count;

    result.count1 = (float)count;
    result.sum1 = sum;
    result.average1 = result.sum1 / result.count1;

    result.count2 = (float)count;
    result.sum2 = sum;
    result.average2 = result.sum2 / result.count2;

    result.count3 = (float)count;
    result.sum3 = sum;
    result.average3 = result.sum3 / result.count3;

    result.count4 = (float)count;
    result.sum4 = sum;
    result.average4 = result.sum4 / result.count4;

    result.count5 = (float)count;
    result.sum5 = sum;
    result.average5 = result.sum5 / result.count5;

    return result;
}

#ifdef __clang__
#pragma clang diagnostic pop
#endif