Welcome to mirror list, hosted at ThFree Co, Russian Federation.

implicit-integer-promotion.comp « comp « shaders-msl-no-opt « reference - github.com/KhronosGroup/SPIRV-Cross.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 5c3ce49eb9de11ef9afa1bff34538f50c9c5ecc7 (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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#pragma clang diagnostic ignored "-Wmissing-prototypes"

#include <metal_stdlib>
#include <simd/simd.h>

using namespace metal;

struct BUF0
{
    half2 f16s;
    ushort2 u16;
    short2 i16;
    ushort4 u16s;
    short4 i16s;
    half f16;
};

static inline __attribute__((always_inline))
void test_u16(device BUF0& v_24)
{
    v_24.f16 += as_type<half>(ushort(((device ushort*)&v_24.u16)[0u] + ((device ushort*)&v_24.u16)[1u]));
    v_24.f16 += as_type<half>(ushort(((device ushort*)&v_24.u16)[0u] - ((device ushort*)&v_24.u16)[1u]));
    v_24.f16 += as_type<half>(ushort(((device ushort*)&v_24.u16)[0u] * ((device ushort*)&v_24.u16)[1u]));
    v_24.f16 += as_type<half>(ushort(((device ushort*)&v_24.u16)[0u] / ((device ushort*)&v_24.u16)[1u]));
    v_24.f16 += as_type<half>(ushort(((device ushort*)&v_24.u16)[0u] % ((device ushort*)&v_24.u16)[1u]));
    v_24.f16 += as_type<half>(ushort(((device ushort*)&v_24.u16)[0u] << ((device ushort*)&v_24.u16)[1u]));
    v_24.f16 += as_type<half>(ushort(((device ushort*)&v_24.u16)[0u] >> ((device ushort*)&v_24.u16)[1u]));
    v_24.f16 += as_type<half>(ushort(~((device ushort*)&v_24.u16)[0u]));
    v_24.f16 += as_type<half>(ushort(-((device ushort*)&v_24.u16)[0u]));
    v_24.f16 += as_type<half>(ushort(((device ushort*)&v_24.u16)[0u] ^ ((device ushort*)&v_24.u16)[1u]));
    v_24.f16 += as_type<half>(ushort(((device ushort*)&v_24.u16)[0u] & ((device ushort*)&v_24.u16)[1u]));
    v_24.f16 += as_type<half>(ushort(((device ushort*)&v_24.u16)[0u] | ((device ushort*)&v_24.u16)[1u]));
}

static inline __attribute__((always_inline))
void test_i16(device BUF0& v_24)
{
    v_24.f16 += as_type<half>(short(((device short*)&v_24.i16)[0u] + ((device short*)&v_24.i16)[1u]));
    v_24.f16 += as_type<half>(short(((device short*)&v_24.i16)[0u] - ((device short*)&v_24.i16)[1u]));
    v_24.f16 += as_type<half>(short(((device short*)&v_24.i16)[0u] * ((device short*)&v_24.i16)[1u]));
    v_24.f16 += as_type<half>(short(((device short*)&v_24.i16)[0u] / ((device short*)&v_24.i16)[1u]));
    v_24.f16 += as_type<half>(short(((device short*)&v_24.i16)[0u] % ((device short*)&v_24.i16)[1u]));
    v_24.f16 += as_type<half>(short(((device short*)&v_24.i16)[0u] << ((device short*)&v_24.i16)[1u]));
    v_24.f16 += as_type<half>(short(((device short*)&v_24.i16)[0u] >> ((device short*)&v_24.i16)[1u]));
    v_24.f16 += as_type<half>(short(~((device short*)&v_24.i16)[0u]));
    v_24.f16 += as_type<half>(short(-((device short*)&v_24.i16)[0u]));
    v_24.f16 += as_type<half>(short(((device short*)&v_24.i16)[0u] ^ ((device short*)&v_24.i16)[1u]));
    v_24.f16 += as_type<half>(short(((device short*)&v_24.i16)[0u] & ((device short*)&v_24.i16)[1u]));
    v_24.f16 += as_type<half>(short(((device short*)&v_24.i16)[0u] | ((device short*)&v_24.i16)[1u]));
}

static inline __attribute__((always_inline))
void test_u16s(device BUF0& v_24)
{
    v_24.f16s += as_type<half2>(v_24.u16s.xy + v_24.u16s.zw);
    v_24.f16s += as_type<half2>(v_24.u16s.xy - v_24.u16s.zw);
    v_24.f16s += as_type<half2>(v_24.u16s.xy * v_24.u16s.zw);
    v_24.f16s += as_type<half2>(v_24.u16s.xy / v_24.u16s.zw);
    v_24.f16s += as_type<half2>(v_24.u16s.xy % v_24.u16s.zw);
    v_24.f16s += as_type<half2>(v_24.u16s.xy << v_24.u16s.zw);
    v_24.f16s += as_type<half2>(v_24.u16s.xy >> v_24.u16s.zw);
    v_24.f16s += as_type<half2>(~v_24.u16s.xy);
    v_24.f16s += as_type<half2>(-v_24.u16s.xy);
    v_24.f16s += as_type<half2>(v_24.u16s.xy ^ v_24.u16s.zw);
    v_24.f16s += as_type<half2>(v_24.u16s.xy & v_24.u16s.zw);
    v_24.f16s += as_type<half2>(v_24.u16s.xy | v_24.u16s.zw);
}

static inline __attribute__((always_inline))
void test_i16s(device BUF0& v_24)
{
    v_24.f16s += as_type<half2>(v_24.i16s.xy + v_24.i16s.zw);
    v_24.f16s += as_type<half2>(v_24.i16s.xy - v_24.i16s.zw);
    v_24.f16s += as_type<half2>(v_24.i16s.xy * v_24.i16s.zw);
    v_24.f16s += as_type<half2>(v_24.i16s.xy / v_24.i16s.zw);
    v_24.f16s += as_type<half2>(v_24.i16s.xy % v_24.i16s.zw);
    v_24.f16s += as_type<half2>(v_24.i16s.xy << v_24.i16s.zw);
    v_24.f16s += as_type<half2>(v_24.i16s.xy >> v_24.i16s.zw);
    v_24.f16s += as_type<half2>(~v_24.i16s.xy);
    v_24.f16s += as_type<half2>(-v_24.i16s.xy);
    v_24.f16s += as_type<half2>(v_24.i16s.xy ^ v_24.i16s.zw);
    v_24.f16s += as_type<half2>(v_24.i16s.xy & v_24.i16s.zw);
    v_24.f16s += as_type<half2>(v_24.i16s.xy | v_24.i16s.zw);
}

kernel void main0(device BUF0& v_24 [[buffer(0)]])
{
    test_u16(v_24);
    test_i16(v_24);
    test_u16s(v_24);
    test_i16s(v_24);
}