summaryrefslogtreecommitdiffstats
path: root/src/shader_recompiler/backend/spirv/emit_spirv_integer.cpp
blob: a1d16b81e47ee2c2a374ccdd7ad63d904e1919d3 (plain) (blame)
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// Copyright 2021 yuzu Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.

#include "shader_recompiler/backend/spirv/emit_spirv.h"

namespace Shader::Backend::SPIRV {

Id EmitIAdd32(EmitContext& ctx, IR::Inst* inst, Id a, Id b) {
    if (inst->HasAssociatedPseudoOperation()) {
        throw NotImplementedException("Pseudo-operations on IAdd32");
    }
    return ctx.OpIAdd(ctx.U32[1], a, b);
}

void EmitIAdd64(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

Id EmitISub32(EmitContext& ctx, Id a, Id b) {
    return ctx.OpISub(ctx.U32[1], a, b);
}

void EmitISub64(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

Id EmitIMul32(EmitContext& ctx, Id a, Id b) {
    return ctx.OpIMul(ctx.U32[1], a, b);
}

void EmitINeg32(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

void EmitIAbs32(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

Id EmitShiftLeftLogical32(EmitContext& ctx, Id base, Id shift) {
    return ctx.OpShiftLeftLogical(ctx.U32[1], base, shift);
}

void EmitShiftRightLogical32(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

void EmitShiftRightArithmetic32(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

void EmitBitwiseAnd32(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

void EmitBitwiseOr32(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

void EmitBitwiseXor32(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

void EmitBitFieldInsert(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

void EmitBitFieldSExtract(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

Id EmitBitFieldUExtract(EmitContext& ctx, Id base, Id offset, Id count) {
    return ctx.OpBitFieldUExtract(ctx.U32[1], base, offset, count);
}

Id EmitSLessThan(EmitContext& ctx, Id lhs, Id rhs) {
    return ctx.OpSLessThan(ctx.U1, lhs, rhs);
}

void EmitULessThan(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

void EmitIEqual(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

void EmitSLessThanEqual(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

void EmitULessThanEqual(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

Id EmitSGreaterThan(EmitContext& ctx, Id lhs, Id rhs) {
    return ctx.OpSGreaterThan(ctx.U1, lhs, rhs);
}

void EmitUGreaterThan(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

void EmitINotEqual(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

void EmitSGreaterThanEqual(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

Id EmitUGreaterThanEqual(EmitContext& ctx, Id lhs, Id rhs) {
    return ctx.OpUGreaterThanEqual(ctx.U1, lhs, rhs);
}

void EmitLogicalOr(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

void EmitLogicalAnd(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

void EmitLogicalXor(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

void EmitLogicalNot(EmitContext&) {
    throw NotImplementedException("SPIR-V Instruction");
}

} // namespace Shader::Backend::SPIRV