1*03ce13f7SAndroid Build Coastguard Worker // Copyright 2019 The SwiftShader Authors. All Rights Reserved.
2*03ce13f7SAndroid Build Coastguard Worker //
3*03ce13f7SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*03ce13f7SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*03ce13f7SAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*03ce13f7SAndroid Build Coastguard Worker //
7*03ce13f7SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0
8*03ce13f7SAndroid Build Coastguard Worker //
9*03ce13f7SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*03ce13f7SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*03ce13f7SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*03ce13f7SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*03ce13f7SAndroid Build Coastguard Worker // limitations under the License.
14*03ce13f7SAndroid Build Coastguard Worker
15*03ce13f7SAndroid Build Coastguard Worker #include "Reactor.hpp"
16*03ce13f7SAndroid Build Coastguard Worker
17*03ce13f7SAndroid Build Coastguard Worker #include "Assert.hpp"
18*03ce13f7SAndroid Build Coastguard Worker #include "CPUID.hpp"
19*03ce13f7SAndroid Build Coastguard Worker #include "Debug.hpp"
20*03ce13f7SAndroid Build Coastguard Worker #include "Print.hpp"
21*03ce13f7SAndroid Build Coastguard Worker
22*03ce13f7SAndroid Build Coastguard Worker #if defined(_WIN32)
23*03ce13f7SAndroid Build Coastguard Worker # ifndef WIN32_LEAN_AND_MEAN
24*03ce13f7SAndroid Build Coastguard Worker # define WIN32_LEAN_AND_MEAN
25*03ce13f7SAndroid Build Coastguard Worker # endif
26*03ce13f7SAndroid Build Coastguard Worker # include <windows.h>
27*03ce13f7SAndroid Build Coastguard Worker #endif
28*03ce13f7SAndroid Build Coastguard Worker
29*03ce13f7SAndroid Build Coastguard Worker #include <algorithm>
30*03ce13f7SAndroid Build Coastguard Worker #include <cmath>
31*03ce13f7SAndroid Build Coastguard Worker
32*03ce13f7SAndroid Build Coastguard Worker // Define REACTOR_MATERIALIZE_LVALUES_ON_DEFINITION to non-zero to ensure all
33*03ce13f7SAndroid Build Coastguard Worker // variables have a stack location obtained through alloca().
34*03ce13f7SAndroid Build Coastguard Worker #ifndef REACTOR_MATERIALIZE_LVALUES_ON_DEFINITION
35*03ce13f7SAndroid Build Coastguard Worker # define REACTOR_MATERIALIZE_LVALUES_ON_DEFINITION 0
36*03ce13f7SAndroid Build Coastguard Worker #endif
37*03ce13f7SAndroid Build Coastguard Worker
38*03ce13f7SAndroid Build Coastguard Worker namespace rr {
39*03ce13f7SAndroid Build Coastguard Worker
40*03ce13f7SAndroid Build Coastguard Worker thread_local Variable::UnmaterializedVariables *Variable::unmaterializedVariables = nullptr;
41*03ce13f7SAndroid Build Coastguard Worker
add(const Variable * v)42*03ce13f7SAndroid Build Coastguard Worker void Variable::UnmaterializedVariables::add(const Variable *v)
43*03ce13f7SAndroid Build Coastguard Worker {
44*03ce13f7SAndroid Build Coastguard Worker variables.emplace(v, counter++);
45*03ce13f7SAndroid Build Coastguard Worker }
46*03ce13f7SAndroid Build Coastguard Worker
remove(const Variable * v)47*03ce13f7SAndroid Build Coastguard Worker void Variable::UnmaterializedVariables::remove(const Variable *v)
48*03ce13f7SAndroid Build Coastguard Worker {
49*03ce13f7SAndroid Build Coastguard Worker auto iter = variables.find(v);
50*03ce13f7SAndroid Build Coastguard Worker if(iter != variables.end())
51*03ce13f7SAndroid Build Coastguard Worker {
52*03ce13f7SAndroid Build Coastguard Worker variables.erase(iter);
53*03ce13f7SAndroid Build Coastguard Worker }
54*03ce13f7SAndroid Build Coastguard Worker }
55*03ce13f7SAndroid Build Coastguard Worker
clear()56*03ce13f7SAndroid Build Coastguard Worker void Variable::UnmaterializedVariables::clear()
57*03ce13f7SAndroid Build Coastguard Worker {
58*03ce13f7SAndroid Build Coastguard Worker variables.clear();
59*03ce13f7SAndroid Build Coastguard Worker }
60*03ce13f7SAndroid Build Coastguard Worker
materializeAll()61*03ce13f7SAndroid Build Coastguard Worker void Variable::UnmaterializedVariables::materializeAll()
62*03ce13f7SAndroid Build Coastguard Worker {
63*03ce13f7SAndroid Build Coastguard Worker // Flatten map of Variable* to monotonically increasing counter to a vector,
64*03ce13f7SAndroid Build Coastguard Worker // then sort it by the counter, so that we materialize in variable usage order.
65*03ce13f7SAndroid Build Coastguard Worker std::vector<std::pair<const Variable *, int>> sorted;
66*03ce13f7SAndroid Build Coastguard Worker sorted.resize(variables.size());
67*03ce13f7SAndroid Build Coastguard Worker std::copy(variables.begin(), variables.end(), sorted.begin());
68*03ce13f7SAndroid Build Coastguard Worker std::sort(sorted.begin(), sorted.end(), [&](auto &lhs, auto &rhs) {
69*03ce13f7SAndroid Build Coastguard Worker return lhs.second < rhs.second;
70*03ce13f7SAndroid Build Coastguard Worker });
71*03ce13f7SAndroid Build Coastguard Worker
72*03ce13f7SAndroid Build Coastguard Worker for(auto &v : sorted)
73*03ce13f7SAndroid Build Coastguard Worker {
74*03ce13f7SAndroid Build Coastguard Worker v.first->materialize();
75*03ce13f7SAndroid Build Coastguard Worker }
76*03ce13f7SAndroid Build Coastguard Worker
77*03ce13f7SAndroid Build Coastguard Worker variables.clear();
78*03ce13f7SAndroid Build Coastguard Worker }
79*03ce13f7SAndroid Build Coastguard Worker
Variable(Type * type,int arraySize)80*03ce13f7SAndroid Build Coastguard Worker Variable::Variable(Type *type, int arraySize)
81*03ce13f7SAndroid Build Coastguard Worker : type(type)
82*03ce13f7SAndroid Build Coastguard Worker , arraySize(arraySize)
83*03ce13f7SAndroid Build Coastguard Worker {
84*03ce13f7SAndroid Build Coastguard Worker #if REACTOR_MATERIALIZE_LVALUES_ON_DEFINITION
85*03ce13f7SAndroid Build Coastguard Worker materialize();
86*03ce13f7SAndroid Build Coastguard Worker #else
87*03ce13f7SAndroid Build Coastguard Worker unmaterializedVariables->add(this);
88*03ce13f7SAndroid Build Coastguard Worker #endif
89*03ce13f7SAndroid Build Coastguard Worker }
90*03ce13f7SAndroid Build Coastguard Worker
~Variable()91*03ce13f7SAndroid Build Coastguard Worker Variable::~Variable()
92*03ce13f7SAndroid Build Coastguard Worker {
93*03ce13f7SAndroid Build Coastguard Worker // `unmaterializedVariables` can be null at this point due to the function
94*03ce13f7SAndroid Build Coastguard Worker // already having been finalized, while classes derived from `Function<>`
95*03ce13f7SAndroid Build Coastguard Worker // can have member `Variable` fields which are destructed afterwards.
96*03ce13f7SAndroid Build Coastguard Worker if(unmaterializedVariables)
97*03ce13f7SAndroid Build Coastguard Worker {
98*03ce13f7SAndroid Build Coastguard Worker unmaterializedVariables->remove(this);
99*03ce13f7SAndroid Build Coastguard Worker }
100*03ce13f7SAndroid Build Coastguard Worker }
101*03ce13f7SAndroid Build Coastguard Worker
materialize() const102*03ce13f7SAndroid Build Coastguard Worker void Variable::materialize() const
103*03ce13f7SAndroid Build Coastguard Worker {
104*03ce13f7SAndroid Build Coastguard Worker if(!address)
105*03ce13f7SAndroid Build Coastguard Worker {
106*03ce13f7SAndroid Build Coastguard Worker address = Nucleus::allocateStackVariable(getType(), arraySize);
107*03ce13f7SAndroid Build Coastguard Worker RR_DEBUG_INFO_EMIT_VAR(address);
108*03ce13f7SAndroid Build Coastguard Worker
109*03ce13f7SAndroid Build Coastguard Worker if(rvalue)
110*03ce13f7SAndroid Build Coastguard Worker {
111*03ce13f7SAndroid Build Coastguard Worker storeValue(rvalue);
112*03ce13f7SAndroid Build Coastguard Worker rvalue = nullptr;
113*03ce13f7SAndroid Build Coastguard Worker }
114*03ce13f7SAndroid Build Coastguard Worker }
115*03ce13f7SAndroid Build Coastguard Worker }
116*03ce13f7SAndroid Build Coastguard Worker
loadValue() const117*03ce13f7SAndroid Build Coastguard Worker Value *Variable::loadValue() const
118*03ce13f7SAndroid Build Coastguard Worker {
119*03ce13f7SAndroid Build Coastguard Worker if(rvalue)
120*03ce13f7SAndroid Build Coastguard Worker {
121*03ce13f7SAndroid Build Coastguard Worker return rvalue;
122*03ce13f7SAndroid Build Coastguard Worker }
123*03ce13f7SAndroid Build Coastguard Worker
124*03ce13f7SAndroid Build Coastguard Worker if(!address)
125*03ce13f7SAndroid Build Coastguard Worker {
126*03ce13f7SAndroid Build Coastguard Worker // TODO: Return undef instead.
127*03ce13f7SAndroid Build Coastguard Worker materialize();
128*03ce13f7SAndroid Build Coastguard Worker }
129*03ce13f7SAndroid Build Coastguard Worker
130*03ce13f7SAndroid Build Coastguard Worker return Nucleus::createLoad(address, getType(), false, 0);
131*03ce13f7SAndroid Build Coastguard Worker }
132*03ce13f7SAndroid Build Coastguard Worker
storeValue(Value * value) const133*03ce13f7SAndroid Build Coastguard Worker Value *Variable::storeValue(Value *value) const
134*03ce13f7SAndroid Build Coastguard Worker {
135*03ce13f7SAndroid Build Coastguard Worker if(address)
136*03ce13f7SAndroid Build Coastguard Worker {
137*03ce13f7SAndroid Build Coastguard Worker return Nucleus::createStore(value, address, getType(), false, 0);
138*03ce13f7SAndroid Build Coastguard Worker }
139*03ce13f7SAndroid Build Coastguard Worker
140*03ce13f7SAndroid Build Coastguard Worker rvalue = value;
141*03ce13f7SAndroid Build Coastguard Worker
142*03ce13f7SAndroid Build Coastguard Worker return value;
143*03ce13f7SAndroid Build Coastguard Worker }
144*03ce13f7SAndroid Build Coastguard Worker
getBaseAddress() const145*03ce13f7SAndroid Build Coastguard Worker Value *Variable::getBaseAddress() const
146*03ce13f7SAndroid Build Coastguard Worker {
147*03ce13f7SAndroid Build Coastguard Worker materialize();
148*03ce13f7SAndroid Build Coastguard Worker
149*03ce13f7SAndroid Build Coastguard Worker return address;
150*03ce13f7SAndroid Build Coastguard Worker }
151*03ce13f7SAndroid Build Coastguard Worker
getElementPointer(Value * index,bool unsignedIndex) const152*03ce13f7SAndroid Build Coastguard Worker Value *Variable::getElementPointer(Value *index, bool unsignedIndex) const
153*03ce13f7SAndroid Build Coastguard Worker {
154*03ce13f7SAndroid Build Coastguard Worker return Nucleus::createGEP(getBaseAddress(), getType(), index, unsignedIndex);
155*03ce13f7SAndroid Build Coastguard Worker }
156*03ce13f7SAndroid Build Coastguard Worker
materializeAll()157*03ce13f7SAndroid Build Coastguard Worker void Variable::materializeAll()
158*03ce13f7SAndroid Build Coastguard Worker {
159*03ce13f7SAndroid Build Coastguard Worker unmaterializedVariables->materializeAll();
160*03ce13f7SAndroid Build Coastguard Worker }
161*03ce13f7SAndroid Build Coastguard Worker
killUnmaterialized()162*03ce13f7SAndroid Build Coastguard Worker void Variable::killUnmaterialized()
163*03ce13f7SAndroid Build Coastguard Worker {
164*03ce13f7SAndroid Build Coastguard Worker unmaterializedVariables->clear();
165*03ce13f7SAndroid Build Coastguard Worker }
166*03ce13f7SAndroid Build Coastguard Worker
167*03ce13f7SAndroid Build Coastguard Worker // NOTE: Only 12 bits out of 16 of the |select| value are used.
168*03ce13f7SAndroid Build Coastguard Worker // More specifically, the value should look like:
169*03ce13f7SAndroid Build Coastguard Worker //
170*03ce13f7SAndroid Build Coastguard Worker // msb lsb
171*03ce13f7SAndroid Build Coastguard Worker // v v
172*03ce13f7SAndroid Build Coastguard Worker // [.xxx|.yyy|.zzz|.www] where '.' means an ignored bit
173*03ce13f7SAndroid Build Coastguard Worker //
174*03ce13f7SAndroid Build Coastguard Worker // This format makes it easy to write calls with hexadecimal select values,
175*03ce13f7SAndroid Build Coastguard Worker // since each hex digit is a separate swizzle index.
176*03ce13f7SAndroid Build Coastguard Worker //
177*03ce13f7SAndroid Build Coastguard Worker // For example:
178*03ce13f7SAndroid Build Coastguard Worker // createShuffle4( [a,b,c,d], [e,f,g,h], 0x0123 ) -> [a,b,c,d]
179*03ce13f7SAndroid Build Coastguard Worker // createShuffle4( [a,b,c,d], [e,f,g,h], 0x4567 ) -> [e,f,g,h]
180*03ce13f7SAndroid Build Coastguard Worker // createShuffle4( [a,b,c,d], [e,f,g,h], 0x4012 ) -> [e,a,b,c]
181*03ce13f7SAndroid Build Coastguard Worker //
createShuffle4(Value * lhs,Value * rhs,uint16_t select)182*03ce13f7SAndroid Build Coastguard Worker static Value *createShuffle4(Value *lhs, Value *rhs, uint16_t select)
183*03ce13f7SAndroid Build Coastguard Worker {
184*03ce13f7SAndroid Build Coastguard Worker std::vector<int> swizzle = {
185*03ce13f7SAndroid Build Coastguard Worker (select >> 12) & 0x07,
186*03ce13f7SAndroid Build Coastguard Worker (select >> 8) & 0x07,
187*03ce13f7SAndroid Build Coastguard Worker (select >> 4) & 0x07,
188*03ce13f7SAndroid Build Coastguard Worker (select >> 0) & 0x07,
189*03ce13f7SAndroid Build Coastguard Worker };
190*03ce13f7SAndroid Build Coastguard Worker
191*03ce13f7SAndroid Build Coastguard Worker return Nucleus::createShuffleVector(lhs, rhs, swizzle);
192*03ce13f7SAndroid Build Coastguard Worker }
193*03ce13f7SAndroid Build Coastguard Worker
194*03ce13f7SAndroid Build Coastguard Worker // NOTE: Only 8 bits out of 16 of the |select| value are used.
195*03ce13f7SAndroid Build Coastguard Worker // More specifically, the value should look like:
196*03ce13f7SAndroid Build Coastguard Worker //
197*03ce13f7SAndroid Build Coastguard Worker // msb lsb
198*03ce13f7SAndroid Build Coastguard Worker // v v
199*03ce13f7SAndroid Build Coastguard Worker // [..xx|..yy|..zz|..ww] where '.' means an ignored bit
200*03ce13f7SAndroid Build Coastguard Worker //
201*03ce13f7SAndroid Build Coastguard Worker // This format makes it easy to write calls with hexadecimal select values,
202*03ce13f7SAndroid Build Coastguard Worker // since each hex digit is a separate swizzle index.
203*03ce13f7SAndroid Build Coastguard Worker //
204*03ce13f7SAndroid Build Coastguard Worker // For example:
205*03ce13f7SAndroid Build Coastguard Worker // createSwizzle4( [a,b,c,d], 0x0123 ) -> [a,b,c,d]
206*03ce13f7SAndroid Build Coastguard Worker // createSwizzle4( [a,b,c,d], 0x0033 ) -> [a,a,d,d]
207*03ce13f7SAndroid Build Coastguard Worker //
createSwizzle4(Value * val,uint16_t select)208*03ce13f7SAndroid Build Coastguard Worker static Value *createSwizzle4(Value *val, uint16_t select)
209*03ce13f7SAndroid Build Coastguard Worker {
210*03ce13f7SAndroid Build Coastguard Worker std::vector<int> swizzle = {
211*03ce13f7SAndroid Build Coastguard Worker (select >> 12) & 0x03,
212*03ce13f7SAndroid Build Coastguard Worker (select >> 8) & 0x03,
213*03ce13f7SAndroid Build Coastguard Worker (select >> 4) & 0x03,
214*03ce13f7SAndroid Build Coastguard Worker (select >> 0) & 0x03,
215*03ce13f7SAndroid Build Coastguard Worker };
216*03ce13f7SAndroid Build Coastguard Worker
217*03ce13f7SAndroid Build Coastguard Worker return Nucleus::createShuffleVector(val, val, swizzle);
218*03ce13f7SAndroid Build Coastguard Worker }
219*03ce13f7SAndroid Build Coastguard Worker
createMask4(Value * lhs,Value * rhs,uint16_t select)220*03ce13f7SAndroid Build Coastguard Worker static Value *createMask4(Value *lhs, Value *rhs, uint16_t select)
221*03ce13f7SAndroid Build Coastguard Worker {
222*03ce13f7SAndroid Build Coastguard Worker bool mask[4] = { false, false, false, false };
223*03ce13f7SAndroid Build Coastguard Worker
224*03ce13f7SAndroid Build Coastguard Worker mask[(select >> 12) & 0x03] = true;
225*03ce13f7SAndroid Build Coastguard Worker mask[(select >> 8) & 0x03] = true;
226*03ce13f7SAndroid Build Coastguard Worker mask[(select >> 4) & 0x03] = true;
227*03ce13f7SAndroid Build Coastguard Worker mask[(select >> 0) & 0x03] = true;
228*03ce13f7SAndroid Build Coastguard Worker
229*03ce13f7SAndroid Build Coastguard Worker std::vector<int> swizzle = {
230*03ce13f7SAndroid Build Coastguard Worker mask[0] ? 4 : 0,
231*03ce13f7SAndroid Build Coastguard Worker mask[1] ? 5 : 1,
232*03ce13f7SAndroid Build Coastguard Worker mask[2] ? 6 : 2,
233*03ce13f7SAndroid Build Coastguard Worker mask[3] ? 7 : 3,
234*03ce13f7SAndroid Build Coastguard Worker };
235*03ce13f7SAndroid Build Coastguard Worker
236*03ce13f7SAndroid Build Coastguard Worker return Nucleus::createShuffleVector(lhs, rhs, swizzle);
237*03ce13f7SAndroid Build Coastguard Worker }
238*03ce13f7SAndroid Build Coastguard Worker
Bool(Argument<Bool> argument)239*03ce13f7SAndroid Build Coastguard Worker Bool::Bool(Argument<Bool> argument)
240*03ce13f7SAndroid Build Coastguard Worker {
241*03ce13f7SAndroid Build Coastguard Worker store(argument.rvalue());
242*03ce13f7SAndroid Build Coastguard Worker }
243*03ce13f7SAndroid Build Coastguard Worker
Bool(bool x)244*03ce13f7SAndroid Build Coastguard Worker Bool::Bool(bool x)
245*03ce13f7SAndroid Build Coastguard Worker {
246*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantBool(x));
247*03ce13f7SAndroid Build Coastguard Worker }
248*03ce13f7SAndroid Build Coastguard Worker
Bool(RValue<Bool> rhs)249*03ce13f7SAndroid Build Coastguard Worker Bool::Bool(RValue<Bool> rhs)
250*03ce13f7SAndroid Build Coastguard Worker {
251*03ce13f7SAndroid Build Coastguard Worker store(rhs);
252*03ce13f7SAndroid Build Coastguard Worker }
253*03ce13f7SAndroid Build Coastguard Worker
Bool(const Bool & rhs)254*03ce13f7SAndroid Build Coastguard Worker Bool::Bool(const Bool &rhs)
255*03ce13f7SAndroid Build Coastguard Worker {
256*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
257*03ce13f7SAndroid Build Coastguard Worker }
258*03ce13f7SAndroid Build Coastguard Worker
Bool(const Reference<Bool> & rhs)259*03ce13f7SAndroid Build Coastguard Worker Bool::Bool(const Reference<Bool> &rhs)
260*03ce13f7SAndroid Build Coastguard Worker {
261*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
262*03ce13f7SAndroid Build Coastguard Worker }
263*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<Bool> rhs)264*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> Bool::operator=(RValue<Bool> rhs)
265*03ce13f7SAndroid Build Coastguard Worker {
266*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
267*03ce13f7SAndroid Build Coastguard Worker }
268*03ce13f7SAndroid Build Coastguard Worker
operator =(const Bool & rhs)269*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> Bool::operator=(const Bool &rhs)
270*03ce13f7SAndroid Build Coastguard Worker {
271*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
272*03ce13f7SAndroid Build Coastguard Worker }
273*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<Bool> & rhs)274*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> Bool::operator=(const Reference<Bool> &rhs)
275*03ce13f7SAndroid Build Coastguard Worker {
276*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
277*03ce13f7SAndroid Build Coastguard Worker }
278*03ce13f7SAndroid Build Coastguard Worker
operator !(RValue<Bool> val)279*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator!(RValue<Bool> val)
280*03ce13f7SAndroid Build Coastguard Worker {
281*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createNot(val.value()));
282*03ce13f7SAndroid Build Coastguard Worker }
283*03ce13f7SAndroid Build Coastguard Worker
operator &&(RValue<Bool> lhs,RValue<Bool> rhs)284*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator&&(RValue<Bool> lhs, RValue<Bool> rhs)
285*03ce13f7SAndroid Build Coastguard Worker {
286*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createAnd(lhs.value(), rhs.value()));
287*03ce13f7SAndroid Build Coastguard Worker }
288*03ce13f7SAndroid Build Coastguard Worker
operator ||(RValue<Bool> lhs,RValue<Bool> rhs)289*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator||(RValue<Bool> lhs, RValue<Bool> rhs)
290*03ce13f7SAndroid Build Coastguard Worker {
291*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createOr(lhs.value(), rhs.value()));
292*03ce13f7SAndroid Build Coastguard Worker }
293*03ce13f7SAndroid Build Coastguard Worker
operator !=(RValue<Bool> lhs,RValue<Bool> rhs)294*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator!=(RValue<Bool> lhs, RValue<Bool> rhs)
295*03ce13f7SAndroid Build Coastguard Worker {
296*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpNE(lhs.value(), rhs.value()));
297*03ce13f7SAndroid Build Coastguard Worker }
298*03ce13f7SAndroid Build Coastguard Worker
operator ==(RValue<Bool> lhs,RValue<Bool> rhs)299*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator==(RValue<Bool> lhs, RValue<Bool> rhs)
300*03ce13f7SAndroid Build Coastguard Worker {
301*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpEQ(lhs.value(), rhs.value()));
302*03ce13f7SAndroid Build Coastguard Worker }
303*03ce13f7SAndroid Build Coastguard Worker
Byte(Argument<Byte> argument)304*03ce13f7SAndroid Build Coastguard Worker Byte::Byte(Argument<Byte> argument)
305*03ce13f7SAndroid Build Coastguard Worker {
306*03ce13f7SAndroid Build Coastguard Worker store(argument.rvalue());
307*03ce13f7SAndroid Build Coastguard Worker }
308*03ce13f7SAndroid Build Coastguard Worker
Byte(RValue<Int> cast)309*03ce13f7SAndroid Build Coastguard Worker Byte::Byte(RValue<Int> cast)
310*03ce13f7SAndroid Build Coastguard Worker {
311*03ce13f7SAndroid Build Coastguard Worker Value *integer = Nucleus::createTrunc(cast.value(), Byte::type());
312*03ce13f7SAndroid Build Coastguard Worker
313*03ce13f7SAndroid Build Coastguard Worker storeValue(integer);
314*03ce13f7SAndroid Build Coastguard Worker }
315*03ce13f7SAndroid Build Coastguard Worker
Byte(RValue<UInt> cast)316*03ce13f7SAndroid Build Coastguard Worker Byte::Byte(RValue<UInt> cast)
317*03ce13f7SAndroid Build Coastguard Worker {
318*03ce13f7SAndroid Build Coastguard Worker Value *integer = Nucleus::createTrunc(cast.value(), Byte::type());
319*03ce13f7SAndroid Build Coastguard Worker
320*03ce13f7SAndroid Build Coastguard Worker storeValue(integer);
321*03ce13f7SAndroid Build Coastguard Worker }
322*03ce13f7SAndroid Build Coastguard Worker
Byte(RValue<UShort> cast)323*03ce13f7SAndroid Build Coastguard Worker Byte::Byte(RValue<UShort> cast)
324*03ce13f7SAndroid Build Coastguard Worker {
325*03ce13f7SAndroid Build Coastguard Worker Value *integer = Nucleus::createTrunc(cast.value(), Byte::type());
326*03ce13f7SAndroid Build Coastguard Worker
327*03ce13f7SAndroid Build Coastguard Worker storeValue(integer);
328*03ce13f7SAndroid Build Coastguard Worker }
329*03ce13f7SAndroid Build Coastguard Worker
Byte(int x)330*03ce13f7SAndroid Build Coastguard Worker Byte::Byte(int x)
331*03ce13f7SAndroid Build Coastguard Worker {
332*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantByte((unsigned char)x));
333*03ce13f7SAndroid Build Coastguard Worker }
334*03ce13f7SAndroid Build Coastguard Worker
Byte(unsigned char x)335*03ce13f7SAndroid Build Coastguard Worker Byte::Byte(unsigned char x)
336*03ce13f7SAndroid Build Coastguard Worker {
337*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantByte(x));
338*03ce13f7SAndroid Build Coastguard Worker }
339*03ce13f7SAndroid Build Coastguard Worker
Byte(RValue<Byte> rhs)340*03ce13f7SAndroid Build Coastguard Worker Byte::Byte(RValue<Byte> rhs)
341*03ce13f7SAndroid Build Coastguard Worker {
342*03ce13f7SAndroid Build Coastguard Worker store(rhs);
343*03ce13f7SAndroid Build Coastguard Worker }
344*03ce13f7SAndroid Build Coastguard Worker
Byte(const Byte & rhs)345*03ce13f7SAndroid Build Coastguard Worker Byte::Byte(const Byte &rhs)
346*03ce13f7SAndroid Build Coastguard Worker {
347*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
348*03ce13f7SAndroid Build Coastguard Worker }
349*03ce13f7SAndroid Build Coastguard Worker
Byte(const Reference<Byte> & rhs)350*03ce13f7SAndroid Build Coastguard Worker Byte::Byte(const Reference<Byte> &rhs)
351*03ce13f7SAndroid Build Coastguard Worker {
352*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
353*03ce13f7SAndroid Build Coastguard Worker }
354*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<Byte> rhs)355*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> Byte::operator=(RValue<Byte> rhs)
356*03ce13f7SAndroid Build Coastguard Worker {
357*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
358*03ce13f7SAndroid Build Coastguard Worker }
359*03ce13f7SAndroid Build Coastguard Worker
operator =(const Byte & rhs)360*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> Byte::operator=(const Byte &rhs)
361*03ce13f7SAndroid Build Coastguard Worker {
362*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
363*03ce13f7SAndroid Build Coastguard Worker }
364*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<Byte> & rhs)365*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> Byte::operator=(const Reference<Byte> &rhs)
366*03ce13f7SAndroid Build Coastguard Worker {
367*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
368*03ce13f7SAndroid Build Coastguard Worker }
369*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<Byte> lhs,RValue<Byte> rhs)370*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator+(RValue<Byte> lhs, RValue<Byte> rhs)
371*03ce13f7SAndroid Build Coastguard Worker {
372*03ce13f7SAndroid Build Coastguard Worker return RValue<Byte>(Nucleus::createAdd(lhs.value(), rhs.value()));
373*03ce13f7SAndroid Build Coastguard Worker }
374*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<Byte> lhs,RValue<Byte> rhs)375*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator-(RValue<Byte> lhs, RValue<Byte> rhs)
376*03ce13f7SAndroid Build Coastguard Worker {
377*03ce13f7SAndroid Build Coastguard Worker return RValue<Byte>(Nucleus::createSub(lhs.value(), rhs.value()));
378*03ce13f7SAndroid Build Coastguard Worker }
379*03ce13f7SAndroid Build Coastguard Worker
operator *(RValue<Byte> lhs,RValue<Byte> rhs)380*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator*(RValue<Byte> lhs, RValue<Byte> rhs)
381*03ce13f7SAndroid Build Coastguard Worker {
382*03ce13f7SAndroid Build Coastguard Worker return RValue<Byte>(Nucleus::createMul(lhs.value(), rhs.value()));
383*03ce13f7SAndroid Build Coastguard Worker }
384*03ce13f7SAndroid Build Coastguard Worker
operator /(RValue<Byte> lhs,RValue<Byte> rhs)385*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator/(RValue<Byte> lhs, RValue<Byte> rhs)
386*03ce13f7SAndroid Build Coastguard Worker {
387*03ce13f7SAndroid Build Coastguard Worker return RValue<Byte>(Nucleus::createUDiv(lhs.value(), rhs.value()));
388*03ce13f7SAndroid Build Coastguard Worker }
389*03ce13f7SAndroid Build Coastguard Worker
operator %(RValue<Byte> lhs,RValue<Byte> rhs)390*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator%(RValue<Byte> lhs, RValue<Byte> rhs)
391*03ce13f7SAndroid Build Coastguard Worker {
392*03ce13f7SAndroid Build Coastguard Worker return RValue<Byte>(Nucleus::createURem(lhs.value(), rhs.value()));
393*03ce13f7SAndroid Build Coastguard Worker }
394*03ce13f7SAndroid Build Coastguard Worker
operator &(RValue<Byte> lhs,RValue<Byte> rhs)395*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator&(RValue<Byte> lhs, RValue<Byte> rhs)
396*03ce13f7SAndroid Build Coastguard Worker {
397*03ce13f7SAndroid Build Coastguard Worker return RValue<Byte>(Nucleus::createAnd(lhs.value(), rhs.value()));
398*03ce13f7SAndroid Build Coastguard Worker }
399*03ce13f7SAndroid Build Coastguard Worker
operator |(RValue<Byte> lhs,RValue<Byte> rhs)400*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator|(RValue<Byte> lhs, RValue<Byte> rhs)
401*03ce13f7SAndroid Build Coastguard Worker {
402*03ce13f7SAndroid Build Coastguard Worker return RValue<Byte>(Nucleus::createOr(lhs.value(), rhs.value()));
403*03ce13f7SAndroid Build Coastguard Worker }
404*03ce13f7SAndroid Build Coastguard Worker
operator ^(RValue<Byte> lhs,RValue<Byte> rhs)405*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator^(RValue<Byte> lhs, RValue<Byte> rhs)
406*03ce13f7SAndroid Build Coastguard Worker {
407*03ce13f7SAndroid Build Coastguard Worker return RValue<Byte>(Nucleus::createXor(lhs.value(), rhs.value()));
408*03ce13f7SAndroid Build Coastguard Worker }
409*03ce13f7SAndroid Build Coastguard Worker
operator <<(RValue<Byte> lhs,RValue<Byte> rhs)410*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator<<(RValue<Byte> lhs, RValue<Byte> rhs)
411*03ce13f7SAndroid Build Coastguard Worker {
412*03ce13f7SAndroid Build Coastguard Worker return RValue<Byte>(Nucleus::createShl(lhs.value(), rhs.value()));
413*03ce13f7SAndroid Build Coastguard Worker }
414*03ce13f7SAndroid Build Coastguard Worker
operator >>(RValue<Byte> lhs,RValue<Byte> rhs)415*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator>>(RValue<Byte> lhs, RValue<Byte> rhs)
416*03ce13f7SAndroid Build Coastguard Worker {
417*03ce13f7SAndroid Build Coastguard Worker return RValue<Byte>(Nucleus::createLShr(lhs.value(), rhs.value()));
418*03ce13f7SAndroid Build Coastguard Worker }
419*03ce13f7SAndroid Build Coastguard Worker
operator +=(Byte & lhs,RValue<Byte> rhs)420*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator+=(Byte &lhs, RValue<Byte> rhs)
421*03ce13f7SAndroid Build Coastguard Worker {
422*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs + rhs;
423*03ce13f7SAndroid Build Coastguard Worker }
424*03ce13f7SAndroid Build Coastguard Worker
operator -=(Byte & lhs,RValue<Byte> rhs)425*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator-=(Byte &lhs, RValue<Byte> rhs)
426*03ce13f7SAndroid Build Coastguard Worker {
427*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs - rhs;
428*03ce13f7SAndroid Build Coastguard Worker }
429*03ce13f7SAndroid Build Coastguard Worker
operator *=(Byte & lhs,RValue<Byte> rhs)430*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator*=(Byte &lhs, RValue<Byte> rhs)
431*03ce13f7SAndroid Build Coastguard Worker {
432*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs * rhs;
433*03ce13f7SAndroid Build Coastguard Worker }
434*03ce13f7SAndroid Build Coastguard Worker
operator /=(Byte & lhs,RValue<Byte> rhs)435*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator/=(Byte &lhs, RValue<Byte> rhs)
436*03ce13f7SAndroid Build Coastguard Worker {
437*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs / rhs;
438*03ce13f7SAndroid Build Coastguard Worker }
439*03ce13f7SAndroid Build Coastguard Worker
operator %=(Byte & lhs,RValue<Byte> rhs)440*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator%=(Byte &lhs, RValue<Byte> rhs)
441*03ce13f7SAndroid Build Coastguard Worker {
442*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs % rhs;
443*03ce13f7SAndroid Build Coastguard Worker }
444*03ce13f7SAndroid Build Coastguard Worker
operator &=(Byte & lhs,RValue<Byte> rhs)445*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator&=(Byte &lhs, RValue<Byte> rhs)
446*03ce13f7SAndroid Build Coastguard Worker {
447*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs & rhs;
448*03ce13f7SAndroid Build Coastguard Worker }
449*03ce13f7SAndroid Build Coastguard Worker
operator |=(Byte & lhs,RValue<Byte> rhs)450*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator|=(Byte &lhs, RValue<Byte> rhs)
451*03ce13f7SAndroid Build Coastguard Worker {
452*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs | rhs;
453*03ce13f7SAndroid Build Coastguard Worker }
454*03ce13f7SAndroid Build Coastguard Worker
operator ^=(Byte & lhs,RValue<Byte> rhs)455*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator^=(Byte &lhs, RValue<Byte> rhs)
456*03ce13f7SAndroid Build Coastguard Worker {
457*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs ^ rhs;
458*03ce13f7SAndroid Build Coastguard Worker }
459*03ce13f7SAndroid Build Coastguard Worker
operator <<=(Byte & lhs,RValue<Byte> rhs)460*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator<<=(Byte &lhs, RValue<Byte> rhs)
461*03ce13f7SAndroid Build Coastguard Worker {
462*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs << rhs;
463*03ce13f7SAndroid Build Coastguard Worker }
464*03ce13f7SAndroid Build Coastguard Worker
operator >>=(Byte & lhs,RValue<Byte> rhs)465*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator>>=(Byte &lhs, RValue<Byte> rhs)
466*03ce13f7SAndroid Build Coastguard Worker {
467*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs >> rhs;
468*03ce13f7SAndroid Build Coastguard Worker }
469*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<Byte> val)470*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator+(RValue<Byte> val)
471*03ce13f7SAndroid Build Coastguard Worker {
472*03ce13f7SAndroid Build Coastguard Worker return val;
473*03ce13f7SAndroid Build Coastguard Worker }
474*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<Byte> val)475*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator-(RValue<Byte> val)
476*03ce13f7SAndroid Build Coastguard Worker {
477*03ce13f7SAndroid Build Coastguard Worker return RValue<Byte>(Nucleus::createNeg(val.value()));
478*03ce13f7SAndroid Build Coastguard Worker }
479*03ce13f7SAndroid Build Coastguard Worker
operator ~(RValue<Byte> val)480*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator~(RValue<Byte> val)
481*03ce13f7SAndroid Build Coastguard Worker {
482*03ce13f7SAndroid Build Coastguard Worker return RValue<Byte>(Nucleus::createNot(val.value()));
483*03ce13f7SAndroid Build Coastguard Worker }
484*03ce13f7SAndroid Build Coastguard Worker
operator ++(Byte & val,int)485*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator++(Byte &val, int) // Post-increment
486*03ce13f7SAndroid Build Coastguard Worker {
487*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> res = val;
488*03ce13f7SAndroid Build Coastguard Worker
489*03ce13f7SAndroid Build Coastguard Worker Value *inc = Nucleus::createAdd(res.value(), Nucleus::createConstantByte((unsigned char)1));
490*03ce13f7SAndroid Build Coastguard Worker val.storeValue(inc);
491*03ce13f7SAndroid Build Coastguard Worker
492*03ce13f7SAndroid Build Coastguard Worker return res;
493*03ce13f7SAndroid Build Coastguard Worker }
494*03ce13f7SAndroid Build Coastguard Worker
operator ++(Byte & val)495*03ce13f7SAndroid Build Coastguard Worker const Byte &operator++(Byte &val) // Pre-increment
496*03ce13f7SAndroid Build Coastguard Worker {
497*03ce13f7SAndroid Build Coastguard Worker Value *inc = Nucleus::createAdd(val.loadValue(), Nucleus::createConstantByte((unsigned char)1));
498*03ce13f7SAndroid Build Coastguard Worker val.storeValue(inc);
499*03ce13f7SAndroid Build Coastguard Worker
500*03ce13f7SAndroid Build Coastguard Worker return val;
501*03ce13f7SAndroid Build Coastguard Worker }
502*03ce13f7SAndroid Build Coastguard Worker
operator --(Byte & val,int)503*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> operator--(Byte &val, int) // Post-decrement
504*03ce13f7SAndroid Build Coastguard Worker {
505*03ce13f7SAndroid Build Coastguard Worker RValue<Byte> res = val;
506*03ce13f7SAndroid Build Coastguard Worker
507*03ce13f7SAndroid Build Coastguard Worker Value *inc = Nucleus::createSub(res.value(), Nucleus::createConstantByte((unsigned char)1));
508*03ce13f7SAndroid Build Coastguard Worker val.storeValue(inc);
509*03ce13f7SAndroid Build Coastguard Worker
510*03ce13f7SAndroid Build Coastguard Worker return res;
511*03ce13f7SAndroid Build Coastguard Worker }
512*03ce13f7SAndroid Build Coastguard Worker
operator --(Byte & val)513*03ce13f7SAndroid Build Coastguard Worker const Byte &operator--(Byte &val) // Pre-decrement
514*03ce13f7SAndroid Build Coastguard Worker {
515*03ce13f7SAndroid Build Coastguard Worker Value *inc = Nucleus::createSub(val.loadValue(), Nucleus::createConstantByte((unsigned char)1));
516*03ce13f7SAndroid Build Coastguard Worker val.storeValue(inc);
517*03ce13f7SAndroid Build Coastguard Worker
518*03ce13f7SAndroid Build Coastguard Worker return val;
519*03ce13f7SAndroid Build Coastguard Worker }
520*03ce13f7SAndroid Build Coastguard Worker
operator <(RValue<Byte> lhs,RValue<Byte> rhs)521*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator<(RValue<Byte> lhs, RValue<Byte> rhs)
522*03ce13f7SAndroid Build Coastguard Worker {
523*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpULT(lhs.value(), rhs.value()));
524*03ce13f7SAndroid Build Coastguard Worker }
525*03ce13f7SAndroid Build Coastguard Worker
operator <=(RValue<Byte> lhs,RValue<Byte> rhs)526*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator<=(RValue<Byte> lhs, RValue<Byte> rhs)
527*03ce13f7SAndroid Build Coastguard Worker {
528*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpULE(lhs.value(), rhs.value()));
529*03ce13f7SAndroid Build Coastguard Worker }
530*03ce13f7SAndroid Build Coastguard Worker
operator >(RValue<Byte> lhs,RValue<Byte> rhs)531*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator>(RValue<Byte> lhs, RValue<Byte> rhs)
532*03ce13f7SAndroid Build Coastguard Worker {
533*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpUGT(lhs.value(), rhs.value()));
534*03ce13f7SAndroid Build Coastguard Worker }
535*03ce13f7SAndroid Build Coastguard Worker
operator >=(RValue<Byte> lhs,RValue<Byte> rhs)536*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator>=(RValue<Byte> lhs, RValue<Byte> rhs)
537*03ce13f7SAndroid Build Coastguard Worker {
538*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpUGE(lhs.value(), rhs.value()));
539*03ce13f7SAndroid Build Coastguard Worker }
540*03ce13f7SAndroid Build Coastguard Worker
operator !=(RValue<Byte> lhs,RValue<Byte> rhs)541*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator!=(RValue<Byte> lhs, RValue<Byte> rhs)
542*03ce13f7SAndroid Build Coastguard Worker {
543*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpNE(lhs.value(), rhs.value()));
544*03ce13f7SAndroid Build Coastguard Worker }
545*03ce13f7SAndroid Build Coastguard Worker
operator ==(RValue<Byte> lhs,RValue<Byte> rhs)546*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator==(RValue<Byte> lhs, RValue<Byte> rhs)
547*03ce13f7SAndroid Build Coastguard Worker {
548*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpEQ(lhs.value(), rhs.value()));
549*03ce13f7SAndroid Build Coastguard Worker }
550*03ce13f7SAndroid Build Coastguard Worker
SByte(Argument<SByte> argument)551*03ce13f7SAndroid Build Coastguard Worker SByte::SByte(Argument<SByte> argument)
552*03ce13f7SAndroid Build Coastguard Worker {
553*03ce13f7SAndroid Build Coastguard Worker store(argument.rvalue());
554*03ce13f7SAndroid Build Coastguard Worker }
555*03ce13f7SAndroid Build Coastguard Worker
SByte(RValue<Int> cast)556*03ce13f7SAndroid Build Coastguard Worker SByte::SByte(RValue<Int> cast)
557*03ce13f7SAndroid Build Coastguard Worker {
558*03ce13f7SAndroid Build Coastguard Worker Value *integer = Nucleus::createTrunc(cast.value(), SByte::type());
559*03ce13f7SAndroid Build Coastguard Worker
560*03ce13f7SAndroid Build Coastguard Worker storeValue(integer);
561*03ce13f7SAndroid Build Coastguard Worker }
562*03ce13f7SAndroid Build Coastguard Worker
SByte(RValue<Short> cast)563*03ce13f7SAndroid Build Coastguard Worker SByte::SByte(RValue<Short> cast)
564*03ce13f7SAndroid Build Coastguard Worker {
565*03ce13f7SAndroid Build Coastguard Worker Value *integer = Nucleus::createTrunc(cast.value(), SByte::type());
566*03ce13f7SAndroid Build Coastguard Worker
567*03ce13f7SAndroid Build Coastguard Worker storeValue(integer);
568*03ce13f7SAndroid Build Coastguard Worker }
569*03ce13f7SAndroid Build Coastguard Worker
SByte(signed char x)570*03ce13f7SAndroid Build Coastguard Worker SByte::SByte(signed char x)
571*03ce13f7SAndroid Build Coastguard Worker {
572*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantByte(x));
573*03ce13f7SAndroid Build Coastguard Worker }
574*03ce13f7SAndroid Build Coastguard Worker
SByte(RValue<SByte> rhs)575*03ce13f7SAndroid Build Coastguard Worker SByte::SByte(RValue<SByte> rhs)
576*03ce13f7SAndroid Build Coastguard Worker {
577*03ce13f7SAndroid Build Coastguard Worker store(rhs);
578*03ce13f7SAndroid Build Coastguard Worker }
579*03ce13f7SAndroid Build Coastguard Worker
SByte(const SByte & rhs)580*03ce13f7SAndroid Build Coastguard Worker SByte::SByte(const SByte &rhs)
581*03ce13f7SAndroid Build Coastguard Worker {
582*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
583*03ce13f7SAndroid Build Coastguard Worker }
584*03ce13f7SAndroid Build Coastguard Worker
SByte(const Reference<SByte> & rhs)585*03ce13f7SAndroid Build Coastguard Worker SByte::SByte(const Reference<SByte> &rhs)
586*03ce13f7SAndroid Build Coastguard Worker {
587*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
588*03ce13f7SAndroid Build Coastguard Worker }
589*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<SByte> rhs)590*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> SByte::operator=(RValue<SByte> rhs)
591*03ce13f7SAndroid Build Coastguard Worker {
592*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
593*03ce13f7SAndroid Build Coastguard Worker }
594*03ce13f7SAndroid Build Coastguard Worker
operator =(const SByte & rhs)595*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> SByte::operator=(const SByte &rhs)
596*03ce13f7SAndroid Build Coastguard Worker {
597*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
598*03ce13f7SAndroid Build Coastguard Worker }
599*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<SByte> & rhs)600*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> SByte::operator=(const Reference<SByte> &rhs)
601*03ce13f7SAndroid Build Coastguard Worker {
602*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
603*03ce13f7SAndroid Build Coastguard Worker }
604*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<SByte> lhs,RValue<SByte> rhs)605*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator+(RValue<SByte> lhs, RValue<SByte> rhs)
606*03ce13f7SAndroid Build Coastguard Worker {
607*03ce13f7SAndroid Build Coastguard Worker return RValue<SByte>(Nucleus::createAdd(lhs.value(), rhs.value()));
608*03ce13f7SAndroid Build Coastguard Worker }
609*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<SByte> lhs,RValue<SByte> rhs)610*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator-(RValue<SByte> lhs, RValue<SByte> rhs)
611*03ce13f7SAndroid Build Coastguard Worker {
612*03ce13f7SAndroid Build Coastguard Worker return RValue<SByte>(Nucleus::createSub(lhs.value(), rhs.value()));
613*03ce13f7SAndroid Build Coastguard Worker }
614*03ce13f7SAndroid Build Coastguard Worker
operator *(RValue<SByte> lhs,RValue<SByte> rhs)615*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator*(RValue<SByte> lhs, RValue<SByte> rhs)
616*03ce13f7SAndroid Build Coastguard Worker {
617*03ce13f7SAndroid Build Coastguard Worker return RValue<SByte>(Nucleus::createMul(lhs.value(), rhs.value()));
618*03ce13f7SAndroid Build Coastguard Worker }
619*03ce13f7SAndroid Build Coastguard Worker
operator /(RValue<SByte> lhs,RValue<SByte> rhs)620*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator/(RValue<SByte> lhs, RValue<SByte> rhs)
621*03ce13f7SAndroid Build Coastguard Worker {
622*03ce13f7SAndroid Build Coastguard Worker return RValue<SByte>(Nucleus::createSDiv(lhs.value(), rhs.value()));
623*03ce13f7SAndroid Build Coastguard Worker }
624*03ce13f7SAndroid Build Coastguard Worker
operator %(RValue<SByte> lhs,RValue<SByte> rhs)625*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator%(RValue<SByte> lhs, RValue<SByte> rhs)
626*03ce13f7SAndroid Build Coastguard Worker {
627*03ce13f7SAndroid Build Coastguard Worker return RValue<SByte>(Nucleus::createSRem(lhs.value(), rhs.value()));
628*03ce13f7SAndroid Build Coastguard Worker }
629*03ce13f7SAndroid Build Coastguard Worker
operator &(RValue<SByte> lhs,RValue<SByte> rhs)630*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator&(RValue<SByte> lhs, RValue<SByte> rhs)
631*03ce13f7SAndroid Build Coastguard Worker {
632*03ce13f7SAndroid Build Coastguard Worker return RValue<SByte>(Nucleus::createAnd(lhs.value(), rhs.value()));
633*03ce13f7SAndroid Build Coastguard Worker }
634*03ce13f7SAndroid Build Coastguard Worker
operator |(RValue<SByte> lhs,RValue<SByte> rhs)635*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator|(RValue<SByte> lhs, RValue<SByte> rhs)
636*03ce13f7SAndroid Build Coastguard Worker {
637*03ce13f7SAndroid Build Coastguard Worker return RValue<SByte>(Nucleus::createOr(lhs.value(), rhs.value()));
638*03ce13f7SAndroid Build Coastguard Worker }
639*03ce13f7SAndroid Build Coastguard Worker
operator ^(RValue<SByte> lhs,RValue<SByte> rhs)640*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator^(RValue<SByte> lhs, RValue<SByte> rhs)
641*03ce13f7SAndroid Build Coastguard Worker {
642*03ce13f7SAndroid Build Coastguard Worker return RValue<SByte>(Nucleus::createXor(lhs.value(), rhs.value()));
643*03ce13f7SAndroid Build Coastguard Worker }
644*03ce13f7SAndroid Build Coastguard Worker
operator <<(RValue<SByte> lhs,RValue<SByte> rhs)645*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator<<(RValue<SByte> lhs, RValue<SByte> rhs)
646*03ce13f7SAndroid Build Coastguard Worker {
647*03ce13f7SAndroid Build Coastguard Worker return RValue<SByte>(Nucleus::createShl(lhs.value(), rhs.value()));
648*03ce13f7SAndroid Build Coastguard Worker }
649*03ce13f7SAndroid Build Coastguard Worker
operator >>(RValue<SByte> lhs,RValue<SByte> rhs)650*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator>>(RValue<SByte> lhs, RValue<SByte> rhs)
651*03ce13f7SAndroid Build Coastguard Worker {
652*03ce13f7SAndroid Build Coastguard Worker return RValue<SByte>(Nucleus::createAShr(lhs.value(), rhs.value()));
653*03ce13f7SAndroid Build Coastguard Worker }
654*03ce13f7SAndroid Build Coastguard Worker
operator +=(SByte & lhs,RValue<SByte> rhs)655*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator+=(SByte &lhs, RValue<SByte> rhs)
656*03ce13f7SAndroid Build Coastguard Worker {
657*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs + rhs;
658*03ce13f7SAndroid Build Coastguard Worker }
659*03ce13f7SAndroid Build Coastguard Worker
operator -=(SByte & lhs,RValue<SByte> rhs)660*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator-=(SByte &lhs, RValue<SByte> rhs)
661*03ce13f7SAndroid Build Coastguard Worker {
662*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs - rhs;
663*03ce13f7SAndroid Build Coastguard Worker }
664*03ce13f7SAndroid Build Coastguard Worker
operator *=(SByte & lhs,RValue<SByte> rhs)665*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator*=(SByte &lhs, RValue<SByte> rhs)
666*03ce13f7SAndroid Build Coastguard Worker {
667*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs * rhs;
668*03ce13f7SAndroid Build Coastguard Worker }
669*03ce13f7SAndroid Build Coastguard Worker
operator /=(SByte & lhs,RValue<SByte> rhs)670*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator/=(SByte &lhs, RValue<SByte> rhs)
671*03ce13f7SAndroid Build Coastguard Worker {
672*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs / rhs;
673*03ce13f7SAndroid Build Coastguard Worker }
674*03ce13f7SAndroid Build Coastguard Worker
operator %=(SByte & lhs,RValue<SByte> rhs)675*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator%=(SByte &lhs, RValue<SByte> rhs)
676*03ce13f7SAndroid Build Coastguard Worker {
677*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs % rhs;
678*03ce13f7SAndroid Build Coastguard Worker }
679*03ce13f7SAndroid Build Coastguard Worker
operator &=(SByte & lhs,RValue<SByte> rhs)680*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator&=(SByte &lhs, RValue<SByte> rhs)
681*03ce13f7SAndroid Build Coastguard Worker {
682*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs & rhs;
683*03ce13f7SAndroid Build Coastguard Worker }
684*03ce13f7SAndroid Build Coastguard Worker
operator |=(SByte & lhs,RValue<SByte> rhs)685*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator|=(SByte &lhs, RValue<SByte> rhs)
686*03ce13f7SAndroid Build Coastguard Worker {
687*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs | rhs;
688*03ce13f7SAndroid Build Coastguard Worker }
689*03ce13f7SAndroid Build Coastguard Worker
operator ^=(SByte & lhs,RValue<SByte> rhs)690*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator^=(SByte &lhs, RValue<SByte> rhs)
691*03ce13f7SAndroid Build Coastguard Worker {
692*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs ^ rhs;
693*03ce13f7SAndroid Build Coastguard Worker }
694*03ce13f7SAndroid Build Coastguard Worker
operator <<=(SByte & lhs,RValue<SByte> rhs)695*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator<<=(SByte &lhs, RValue<SByte> rhs)
696*03ce13f7SAndroid Build Coastguard Worker {
697*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs << rhs;
698*03ce13f7SAndroid Build Coastguard Worker }
699*03ce13f7SAndroid Build Coastguard Worker
operator >>=(SByte & lhs,RValue<SByte> rhs)700*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator>>=(SByte &lhs, RValue<SByte> rhs)
701*03ce13f7SAndroid Build Coastguard Worker {
702*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs >> rhs;
703*03ce13f7SAndroid Build Coastguard Worker }
704*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<SByte> val)705*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator+(RValue<SByte> val)
706*03ce13f7SAndroid Build Coastguard Worker {
707*03ce13f7SAndroid Build Coastguard Worker return val;
708*03ce13f7SAndroid Build Coastguard Worker }
709*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<SByte> val)710*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator-(RValue<SByte> val)
711*03ce13f7SAndroid Build Coastguard Worker {
712*03ce13f7SAndroid Build Coastguard Worker return RValue<SByte>(Nucleus::createNeg(val.value()));
713*03ce13f7SAndroid Build Coastguard Worker }
714*03ce13f7SAndroid Build Coastguard Worker
operator ~(RValue<SByte> val)715*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator~(RValue<SByte> val)
716*03ce13f7SAndroid Build Coastguard Worker {
717*03ce13f7SAndroid Build Coastguard Worker return RValue<SByte>(Nucleus::createNot(val.value()));
718*03ce13f7SAndroid Build Coastguard Worker }
719*03ce13f7SAndroid Build Coastguard Worker
operator ++(SByte & val,int)720*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator++(SByte &val, int) // Post-increment
721*03ce13f7SAndroid Build Coastguard Worker {
722*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> res = val;
723*03ce13f7SAndroid Build Coastguard Worker
724*03ce13f7SAndroid Build Coastguard Worker Value *inc = Nucleus::createAdd(res.value(), Nucleus::createConstantByte((signed char)1));
725*03ce13f7SAndroid Build Coastguard Worker val.storeValue(inc);
726*03ce13f7SAndroid Build Coastguard Worker
727*03ce13f7SAndroid Build Coastguard Worker return res;
728*03ce13f7SAndroid Build Coastguard Worker }
729*03ce13f7SAndroid Build Coastguard Worker
operator ++(SByte & val)730*03ce13f7SAndroid Build Coastguard Worker const SByte &operator++(SByte &val) // Pre-increment
731*03ce13f7SAndroid Build Coastguard Worker {
732*03ce13f7SAndroid Build Coastguard Worker Value *inc = Nucleus::createAdd(val.loadValue(), Nucleus::createConstantByte((signed char)1));
733*03ce13f7SAndroid Build Coastguard Worker val.storeValue(inc);
734*03ce13f7SAndroid Build Coastguard Worker
735*03ce13f7SAndroid Build Coastguard Worker return val;
736*03ce13f7SAndroid Build Coastguard Worker }
737*03ce13f7SAndroid Build Coastguard Worker
operator --(SByte & val,int)738*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> operator--(SByte &val, int) // Post-decrement
739*03ce13f7SAndroid Build Coastguard Worker {
740*03ce13f7SAndroid Build Coastguard Worker RValue<SByte> res = val;
741*03ce13f7SAndroid Build Coastguard Worker
742*03ce13f7SAndroid Build Coastguard Worker Value *inc = Nucleus::createSub(res.value(), Nucleus::createConstantByte((signed char)1));
743*03ce13f7SAndroid Build Coastguard Worker val.storeValue(inc);
744*03ce13f7SAndroid Build Coastguard Worker
745*03ce13f7SAndroid Build Coastguard Worker return res;
746*03ce13f7SAndroid Build Coastguard Worker }
747*03ce13f7SAndroid Build Coastguard Worker
operator --(SByte & val)748*03ce13f7SAndroid Build Coastguard Worker const SByte &operator--(SByte &val) // Pre-decrement
749*03ce13f7SAndroid Build Coastguard Worker {
750*03ce13f7SAndroid Build Coastguard Worker Value *inc = Nucleus::createSub(val.loadValue(), Nucleus::createConstantByte((signed char)1));
751*03ce13f7SAndroid Build Coastguard Worker val.storeValue(inc);
752*03ce13f7SAndroid Build Coastguard Worker
753*03ce13f7SAndroid Build Coastguard Worker return val;
754*03ce13f7SAndroid Build Coastguard Worker }
755*03ce13f7SAndroid Build Coastguard Worker
operator <(RValue<SByte> lhs,RValue<SByte> rhs)756*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator<(RValue<SByte> lhs, RValue<SByte> rhs)
757*03ce13f7SAndroid Build Coastguard Worker {
758*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpSLT(lhs.value(), rhs.value()));
759*03ce13f7SAndroid Build Coastguard Worker }
760*03ce13f7SAndroid Build Coastguard Worker
operator <=(RValue<SByte> lhs,RValue<SByte> rhs)761*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator<=(RValue<SByte> lhs, RValue<SByte> rhs)
762*03ce13f7SAndroid Build Coastguard Worker {
763*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpSLE(lhs.value(), rhs.value()));
764*03ce13f7SAndroid Build Coastguard Worker }
765*03ce13f7SAndroid Build Coastguard Worker
operator >(RValue<SByte> lhs,RValue<SByte> rhs)766*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator>(RValue<SByte> lhs, RValue<SByte> rhs)
767*03ce13f7SAndroid Build Coastguard Worker {
768*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpSGT(lhs.value(), rhs.value()));
769*03ce13f7SAndroid Build Coastguard Worker }
770*03ce13f7SAndroid Build Coastguard Worker
operator >=(RValue<SByte> lhs,RValue<SByte> rhs)771*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator>=(RValue<SByte> lhs, RValue<SByte> rhs)
772*03ce13f7SAndroid Build Coastguard Worker {
773*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpSGE(lhs.value(), rhs.value()));
774*03ce13f7SAndroid Build Coastguard Worker }
775*03ce13f7SAndroid Build Coastguard Worker
operator !=(RValue<SByte> lhs,RValue<SByte> rhs)776*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator!=(RValue<SByte> lhs, RValue<SByte> rhs)
777*03ce13f7SAndroid Build Coastguard Worker {
778*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpNE(lhs.value(), rhs.value()));
779*03ce13f7SAndroid Build Coastguard Worker }
780*03ce13f7SAndroid Build Coastguard Worker
operator ==(RValue<SByte> lhs,RValue<SByte> rhs)781*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator==(RValue<SByte> lhs, RValue<SByte> rhs)
782*03ce13f7SAndroid Build Coastguard Worker {
783*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpEQ(lhs.value(), rhs.value()));
784*03ce13f7SAndroid Build Coastguard Worker }
785*03ce13f7SAndroid Build Coastguard Worker
Short(Argument<Short> argument)786*03ce13f7SAndroid Build Coastguard Worker Short::Short(Argument<Short> argument)
787*03ce13f7SAndroid Build Coastguard Worker {
788*03ce13f7SAndroid Build Coastguard Worker store(argument.rvalue());
789*03ce13f7SAndroid Build Coastguard Worker }
790*03ce13f7SAndroid Build Coastguard Worker
Short(RValue<Int> cast)791*03ce13f7SAndroid Build Coastguard Worker Short::Short(RValue<Int> cast)
792*03ce13f7SAndroid Build Coastguard Worker {
793*03ce13f7SAndroid Build Coastguard Worker Value *integer = Nucleus::createTrunc(cast.value(), Short::type());
794*03ce13f7SAndroid Build Coastguard Worker
795*03ce13f7SAndroid Build Coastguard Worker storeValue(integer);
796*03ce13f7SAndroid Build Coastguard Worker }
797*03ce13f7SAndroid Build Coastguard Worker
Short(short x)798*03ce13f7SAndroid Build Coastguard Worker Short::Short(short x)
799*03ce13f7SAndroid Build Coastguard Worker {
800*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantShort(x));
801*03ce13f7SAndroid Build Coastguard Worker }
802*03ce13f7SAndroid Build Coastguard Worker
Short(RValue<Short> rhs)803*03ce13f7SAndroid Build Coastguard Worker Short::Short(RValue<Short> rhs)
804*03ce13f7SAndroid Build Coastguard Worker {
805*03ce13f7SAndroid Build Coastguard Worker store(rhs);
806*03ce13f7SAndroid Build Coastguard Worker }
807*03ce13f7SAndroid Build Coastguard Worker
Short(const Short & rhs)808*03ce13f7SAndroid Build Coastguard Worker Short::Short(const Short &rhs)
809*03ce13f7SAndroid Build Coastguard Worker {
810*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
811*03ce13f7SAndroid Build Coastguard Worker }
812*03ce13f7SAndroid Build Coastguard Worker
Short(const Reference<Short> & rhs)813*03ce13f7SAndroid Build Coastguard Worker Short::Short(const Reference<Short> &rhs)
814*03ce13f7SAndroid Build Coastguard Worker {
815*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
816*03ce13f7SAndroid Build Coastguard Worker }
817*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<Short> rhs)818*03ce13f7SAndroid Build Coastguard Worker RValue<Short> Short::operator=(RValue<Short> rhs)
819*03ce13f7SAndroid Build Coastguard Worker {
820*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
821*03ce13f7SAndroid Build Coastguard Worker }
822*03ce13f7SAndroid Build Coastguard Worker
operator =(const Short & rhs)823*03ce13f7SAndroid Build Coastguard Worker RValue<Short> Short::operator=(const Short &rhs)
824*03ce13f7SAndroid Build Coastguard Worker {
825*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
826*03ce13f7SAndroid Build Coastguard Worker }
827*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<Short> & rhs)828*03ce13f7SAndroid Build Coastguard Worker RValue<Short> Short::operator=(const Reference<Short> &rhs)
829*03ce13f7SAndroid Build Coastguard Worker {
830*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
831*03ce13f7SAndroid Build Coastguard Worker }
832*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<Short> lhs,RValue<Short> rhs)833*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator+(RValue<Short> lhs, RValue<Short> rhs)
834*03ce13f7SAndroid Build Coastguard Worker {
835*03ce13f7SAndroid Build Coastguard Worker return RValue<Short>(Nucleus::createAdd(lhs.value(), rhs.value()));
836*03ce13f7SAndroid Build Coastguard Worker }
837*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<Short> lhs,RValue<Short> rhs)838*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator-(RValue<Short> lhs, RValue<Short> rhs)
839*03ce13f7SAndroid Build Coastguard Worker {
840*03ce13f7SAndroid Build Coastguard Worker return RValue<Short>(Nucleus::createSub(lhs.value(), rhs.value()));
841*03ce13f7SAndroid Build Coastguard Worker }
842*03ce13f7SAndroid Build Coastguard Worker
operator *(RValue<Short> lhs,RValue<Short> rhs)843*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator*(RValue<Short> lhs, RValue<Short> rhs)
844*03ce13f7SAndroid Build Coastguard Worker {
845*03ce13f7SAndroid Build Coastguard Worker return RValue<Short>(Nucleus::createMul(lhs.value(), rhs.value()));
846*03ce13f7SAndroid Build Coastguard Worker }
847*03ce13f7SAndroid Build Coastguard Worker
operator /(RValue<Short> lhs,RValue<Short> rhs)848*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator/(RValue<Short> lhs, RValue<Short> rhs)
849*03ce13f7SAndroid Build Coastguard Worker {
850*03ce13f7SAndroid Build Coastguard Worker return RValue<Short>(Nucleus::createSDiv(lhs.value(), rhs.value()));
851*03ce13f7SAndroid Build Coastguard Worker }
852*03ce13f7SAndroid Build Coastguard Worker
operator %(RValue<Short> lhs,RValue<Short> rhs)853*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator%(RValue<Short> lhs, RValue<Short> rhs)
854*03ce13f7SAndroid Build Coastguard Worker {
855*03ce13f7SAndroid Build Coastguard Worker return RValue<Short>(Nucleus::createSRem(lhs.value(), rhs.value()));
856*03ce13f7SAndroid Build Coastguard Worker }
857*03ce13f7SAndroid Build Coastguard Worker
operator &(RValue<Short> lhs,RValue<Short> rhs)858*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator&(RValue<Short> lhs, RValue<Short> rhs)
859*03ce13f7SAndroid Build Coastguard Worker {
860*03ce13f7SAndroid Build Coastguard Worker return RValue<Short>(Nucleus::createAnd(lhs.value(), rhs.value()));
861*03ce13f7SAndroid Build Coastguard Worker }
862*03ce13f7SAndroid Build Coastguard Worker
operator |(RValue<Short> lhs,RValue<Short> rhs)863*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator|(RValue<Short> lhs, RValue<Short> rhs)
864*03ce13f7SAndroid Build Coastguard Worker {
865*03ce13f7SAndroid Build Coastguard Worker return RValue<Short>(Nucleus::createOr(lhs.value(), rhs.value()));
866*03ce13f7SAndroid Build Coastguard Worker }
867*03ce13f7SAndroid Build Coastguard Worker
operator ^(RValue<Short> lhs,RValue<Short> rhs)868*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator^(RValue<Short> lhs, RValue<Short> rhs)
869*03ce13f7SAndroid Build Coastguard Worker {
870*03ce13f7SAndroid Build Coastguard Worker return RValue<Short>(Nucleus::createXor(lhs.value(), rhs.value()));
871*03ce13f7SAndroid Build Coastguard Worker }
872*03ce13f7SAndroid Build Coastguard Worker
operator <<(RValue<Short> lhs,RValue<Short> rhs)873*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator<<(RValue<Short> lhs, RValue<Short> rhs)
874*03ce13f7SAndroid Build Coastguard Worker {
875*03ce13f7SAndroid Build Coastguard Worker return RValue<Short>(Nucleus::createShl(lhs.value(), rhs.value()));
876*03ce13f7SAndroid Build Coastguard Worker }
877*03ce13f7SAndroid Build Coastguard Worker
operator >>(RValue<Short> lhs,RValue<Short> rhs)878*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator>>(RValue<Short> lhs, RValue<Short> rhs)
879*03ce13f7SAndroid Build Coastguard Worker {
880*03ce13f7SAndroid Build Coastguard Worker return RValue<Short>(Nucleus::createAShr(lhs.value(), rhs.value()));
881*03ce13f7SAndroid Build Coastguard Worker }
882*03ce13f7SAndroid Build Coastguard Worker
operator +=(Short & lhs,RValue<Short> rhs)883*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator+=(Short &lhs, RValue<Short> rhs)
884*03ce13f7SAndroid Build Coastguard Worker {
885*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs + rhs;
886*03ce13f7SAndroid Build Coastguard Worker }
887*03ce13f7SAndroid Build Coastguard Worker
operator -=(Short & lhs,RValue<Short> rhs)888*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator-=(Short &lhs, RValue<Short> rhs)
889*03ce13f7SAndroid Build Coastguard Worker {
890*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs - rhs;
891*03ce13f7SAndroid Build Coastguard Worker }
892*03ce13f7SAndroid Build Coastguard Worker
operator *=(Short & lhs,RValue<Short> rhs)893*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator*=(Short &lhs, RValue<Short> rhs)
894*03ce13f7SAndroid Build Coastguard Worker {
895*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs * rhs;
896*03ce13f7SAndroid Build Coastguard Worker }
897*03ce13f7SAndroid Build Coastguard Worker
operator /=(Short & lhs,RValue<Short> rhs)898*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator/=(Short &lhs, RValue<Short> rhs)
899*03ce13f7SAndroid Build Coastguard Worker {
900*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs / rhs;
901*03ce13f7SAndroid Build Coastguard Worker }
902*03ce13f7SAndroid Build Coastguard Worker
operator %=(Short & lhs,RValue<Short> rhs)903*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator%=(Short &lhs, RValue<Short> rhs)
904*03ce13f7SAndroid Build Coastguard Worker {
905*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs % rhs;
906*03ce13f7SAndroid Build Coastguard Worker }
907*03ce13f7SAndroid Build Coastguard Worker
operator &=(Short & lhs,RValue<Short> rhs)908*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator&=(Short &lhs, RValue<Short> rhs)
909*03ce13f7SAndroid Build Coastguard Worker {
910*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs & rhs;
911*03ce13f7SAndroid Build Coastguard Worker }
912*03ce13f7SAndroid Build Coastguard Worker
operator |=(Short & lhs,RValue<Short> rhs)913*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator|=(Short &lhs, RValue<Short> rhs)
914*03ce13f7SAndroid Build Coastguard Worker {
915*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs | rhs;
916*03ce13f7SAndroid Build Coastguard Worker }
917*03ce13f7SAndroid Build Coastguard Worker
operator ^=(Short & lhs,RValue<Short> rhs)918*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator^=(Short &lhs, RValue<Short> rhs)
919*03ce13f7SAndroid Build Coastguard Worker {
920*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs ^ rhs;
921*03ce13f7SAndroid Build Coastguard Worker }
922*03ce13f7SAndroid Build Coastguard Worker
operator <<=(Short & lhs,RValue<Short> rhs)923*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator<<=(Short &lhs, RValue<Short> rhs)
924*03ce13f7SAndroid Build Coastguard Worker {
925*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs << rhs;
926*03ce13f7SAndroid Build Coastguard Worker }
927*03ce13f7SAndroid Build Coastguard Worker
operator >>=(Short & lhs,RValue<Short> rhs)928*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator>>=(Short &lhs, RValue<Short> rhs)
929*03ce13f7SAndroid Build Coastguard Worker {
930*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs >> rhs;
931*03ce13f7SAndroid Build Coastguard Worker }
932*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<Short> val)933*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator+(RValue<Short> val)
934*03ce13f7SAndroid Build Coastguard Worker {
935*03ce13f7SAndroid Build Coastguard Worker return val;
936*03ce13f7SAndroid Build Coastguard Worker }
937*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<Short> val)938*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator-(RValue<Short> val)
939*03ce13f7SAndroid Build Coastguard Worker {
940*03ce13f7SAndroid Build Coastguard Worker return RValue<Short>(Nucleus::createNeg(val.value()));
941*03ce13f7SAndroid Build Coastguard Worker }
942*03ce13f7SAndroid Build Coastguard Worker
operator ~(RValue<Short> val)943*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator~(RValue<Short> val)
944*03ce13f7SAndroid Build Coastguard Worker {
945*03ce13f7SAndroid Build Coastguard Worker return RValue<Short>(Nucleus::createNot(val.value()));
946*03ce13f7SAndroid Build Coastguard Worker }
947*03ce13f7SAndroid Build Coastguard Worker
operator ++(Short & val,int)948*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator++(Short &val, int) // Post-increment
949*03ce13f7SAndroid Build Coastguard Worker {
950*03ce13f7SAndroid Build Coastguard Worker RValue<Short> res = val;
951*03ce13f7SAndroid Build Coastguard Worker
952*03ce13f7SAndroid Build Coastguard Worker Value *inc = Nucleus::createAdd(res.value(), Nucleus::createConstantShort((short)1));
953*03ce13f7SAndroid Build Coastguard Worker val.storeValue(inc);
954*03ce13f7SAndroid Build Coastguard Worker
955*03ce13f7SAndroid Build Coastguard Worker return res;
956*03ce13f7SAndroid Build Coastguard Worker }
957*03ce13f7SAndroid Build Coastguard Worker
operator ++(Short & val)958*03ce13f7SAndroid Build Coastguard Worker const Short &operator++(Short &val) // Pre-increment
959*03ce13f7SAndroid Build Coastguard Worker {
960*03ce13f7SAndroid Build Coastguard Worker Value *inc = Nucleus::createAdd(val.loadValue(), Nucleus::createConstantShort((short)1));
961*03ce13f7SAndroid Build Coastguard Worker val.storeValue(inc);
962*03ce13f7SAndroid Build Coastguard Worker
963*03ce13f7SAndroid Build Coastguard Worker return val;
964*03ce13f7SAndroid Build Coastguard Worker }
965*03ce13f7SAndroid Build Coastguard Worker
operator --(Short & val,int)966*03ce13f7SAndroid Build Coastguard Worker RValue<Short> operator--(Short &val, int) // Post-decrement
967*03ce13f7SAndroid Build Coastguard Worker {
968*03ce13f7SAndroid Build Coastguard Worker RValue<Short> res = val;
969*03ce13f7SAndroid Build Coastguard Worker
970*03ce13f7SAndroid Build Coastguard Worker Value *inc = Nucleus::createSub(res.value(), Nucleus::createConstantShort((short)1));
971*03ce13f7SAndroid Build Coastguard Worker val.storeValue(inc);
972*03ce13f7SAndroid Build Coastguard Worker
973*03ce13f7SAndroid Build Coastguard Worker return res;
974*03ce13f7SAndroid Build Coastguard Worker }
975*03ce13f7SAndroid Build Coastguard Worker
operator --(Short & val)976*03ce13f7SAndroid Build Coastguard Worker const Short &operator--(Short &val) // Pre-decrement
977*03ce13f7SAndroid Build Coastguard Worker {
978*03ce13f7SAndroid Build Coastguard Worker Value *inc = Nucleus::createSub(val.loadValue(), Nucleus::createConstantShort((short)1));
979*03ce13f7SAndroid Build Coastguard Worker val.storeValue(inc);
980*03ce13f7SAndroid Build Coastguard Worker
981*03ce13f7SAndroid Build Coastguard Worker return val;
982*03ce13f7SAndroid Build Coastguard Worker }
983*03ce13f7SAndroid Build Coastguard Worker
operator <(RValue<Short> lhs,RValue<Short> rhs)984*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator<(RValue<Short> lhs, RValue<Short> rhs)
985*03ce13f7SAndroid Build Coastguard Worker {
986*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpSLT(lhs.value(), rhs.value()));
987*03ce13f7SAndroid Build Coastguard Worker }
988*03ce13f7SAndroid Build Coastguard Worker
operator <=(RValue<Short> lhs,RValue<Short> rhs)989*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator<=(RValue<Short> lhs, RValue<Short> rhs)
990*03ce13f7SAndroid Build Coastguard Worker {
991*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpSLE(lhs.value(), rhs.value()));
992*03ce13f7SAndroid Build Coastguard Worker }
993*03ce13f7SAndroid Build Coastguard Worker
operator >(RValue<Short> lhs,RValue<Short> rhs)994*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator>(RValue<Short> lhs, RValue<Short> rhs)
995*03ce13f7SAndroid Build Coastguard Worker {
996*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpSGT(lhs.value(), rhs.value()));
997*03ce13f7SAndroid Build Coastguard Worker }
998*03ce13f7SAndroid Build Coastguard Worker
operator >=(RValue<Short> lhs,RValue<Short> rhs)999*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator>=(RValue<Short> lhs, RValue<Short> rhs)
1000*03ce13f7SAndroid Build Coastguard Worker {
1001*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpSGE(lhs.value(), rhs.value()));
1002*03ce13f7SAndroid Build Coastguard Worker }
1003*03ce13f7SAndroid Build Coastguard Worker
operator !=(RValue<Short> lhs,RValue<Short> rhs)1004*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator!=(RValue<Short> lhs, RValue<Short> rhs)
1005*03ce13f7SAndroid Build Coastguard Worker {
1006*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpNE(lhs.value(), rhs.value()));
1007*03ce13f7SAndroid Build Coastguard Worker }
1008*03ce13f7SAndroid Build Coastguard Worker
operator ==(RValue<Short> lhs,RValue<Short> rhs)1009*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator==(RValue<Short> lhs, RValue<Short> rhs)
1010*03ce13f7SAndroid Build Coastguard Worker {
1011*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpEQ(lhs.value(), rhs.value()));
1012*03ce13f7SAndroid Build Coastguard Worker }
1013*03ce13f7SAndroid Build Coastguard Worker
UShort(Argument<UShort> argument)1014*03ce13f7SAndroid Build Coastguard Worker UShort::UShort(Argument<UShort> argument)
1015*03ce13f7SAndroid Build Coastguard Worker {
1016*03ce13f7SAndroid Build Coastguard Worker store(argument.rvalue());
1017*03ce13f7SAndroid Build Coastguard Worker }
1018*03ce13f7SAndroid Build Coastguard Worker
UShort(RValue<UInt> cast)1019*03ce13f7SAndroid Build Coastguard Worker UShort::UShort(RValue<UInt> cast)
1020*03ce13f7SAndroid Build Coastguard Worker {
1021*03ce13f7SAndroid Build Coastguard Worker Value *integer = Nucleus::createTrunc(cast.value(), UShort::type());
1022*03ce13f7SAndroid Build Coastguard Worker
1023*03ce13f7SAndroid Build Coastguard Worker storeValue(integer);
1024*03ce13f7SAndroid Build Coastguard Worker }
1025*03ce13f7SAndroid Build Coastguard Worker
UShort(RValue<Int> cast)1026*03ce13f7SAndroid Build Coastguard Worker UShort::UShort(RValue<Int> cast)
1027*03ce13f7SAndroid Build Coastguard Worker {
1028*03ce13f7SAndroid Build Coastguard Worker Value *integer = Nucleus::createTrunc(cast.value(), UShort::type());
1029*03ce13f7SAndroid Build Coastguard Worker
1030*03ce13f7SAndroid Build Coastguard Worker storeValue(integer);
1031*03ce13f7SAndroid Build Coastguard Worker }
1032*03ce13f7SAndroid Build Coastguard Worker
UShort(RValue<Byte> cast)1033*03ce13f7SAndroid Build Coastguard Worker UShort::UShort(RValue<Byte> cast)
1034*03ce13f7SAndroid Build Coastguard Worker {
1035*03ce13f7SAndroid Build Coastguard Worker Value *integer = Nucleus::createZExt(cast.value(), UShort::type());
1036*03ce13f7SAndroid Build Coastguard Worker
1037*03ce13f7SAndroid Build Coastguard Worker storeValue(integer);
1038*03ce13f7SAndroid Build Coastguard Worker }
1039*03ce13f7SAndroid Build Coastguard Worker
UShort(unsigned short x)1040*03ce13f7SAndroid Build Coastguard Worker UShort::UShort(unsigned short x)
1041*03ce13f7SAndroid Build Coastguard Worker {
1042*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantShort(x));
1043*03ce13f7SAndroid Build Coastguard Worker }
1044*03ce13f7SAndroid Build Coastguard Worker
UShort(RValue<UShort> rhs)1045*03ce13f7SAndroid Build Coastguard Worker UShort::UShort(RValue<UShort> rhs)
1046*03ce13f7SAndroid Build Coastguard Worker {
1047*03ce13f7SAndroid Build Coastguard Worker store(rhs);
1048*03ce13f7SAndroid Build Coastguard Worker }
1049*03ce13f7SAndroid Build Coastguard Worker
UShort(const UShort & rhs)1050*03ce13f7SAndroid Build Coastguard Worker UShort::UShort(const UShort &rhs)
1051*03ce13f7SAndroid Build Coastguard Worker {
1052*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
1053*03ce13f7SAndroid Build Coastguard Worker }
1054*03ce13f7SAndroid Build Coastguard Worker
UShort(const Reference<UShort> & rhs)1055*03ce13f7SAndroid Build Coastguard Worker UShort::UShort(const Reference<UShort> &rhs)
1056*03ce13f7SAndroid Build Coastguard Worker {
1057*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
1058*03ce13f7SAndroid Build Coastguard Worker }
1059*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<UShort> rhs)1060*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> UShort::operator=(RValue<UShort> rhs)
1061*03ce13f7SAndroid Build Coastguard Worker {
1062*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
1063*03ce13f7SAndroid Build Coastguard Worker }
1064*03ce13f7SAndroid Build Coastguard Worker
operator =(const UShort & rhs)1065*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> UShort::operator=(const UShort &rhs)
1066*03ce13f7SAndroid Build Coastguard Worker {
1067*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
1068*03ce13f7SAndroid Build Coastguard Worker }
1069*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<UShort> & rhs)1070*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> UShort::operator=(const Reference<UShort> &rhs)
1071*03ce13f7SAndroid Build Coastguard Worker {
1072*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
1073*03ce13f7SAndroid Build Coastguard Worker }
1074*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<UShort> lhs,RValue<UShort> rhs)1075*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator+(RValue<UShort> lhs, RValue<UShort> rhs)
1076*03ce13f7SAndroid Build Coastguard Worker {
1077*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort>(Nucleus::createAdd(lhs.value(), rhs.value()));
1078*03ce13f7SAndroid Build Coastguard Worker }
1079*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<UShort> lhs,RValue<UShort> rhs)1080*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator-(RValue<UShort> lhs, RValue<UShort> rhs)
1081*03ce13f7SAndroid Build Coastguard Worker {
1082*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort>(Nucleus::createSub(lhs.value(), rhs.value()));
1083*03ce13f7SAndroid Build Coastguard Worker }
1084*03ce13f7SAndroid Build Coastguard Worker
operator *(RValue<UShort> lhs,RValue<UShort> rhs)1085*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator*(RValue<UShort> lhs, RValue<UShort> rhs)
1086*03ce13f7SAndroid Build Coastguard Worker {
1087*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort>(Nucleus::createMul(lhs.value(), rhs.value()));
1088*03ce13f7SAndroid Build Coastguard Worker }
1089*03ce13f7SAndroid Build Coastguard Worker
operator /(RValue<UShort> lhs,RValue<UShort> rhs)1090*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator/(RValue<UShort> lhs, RValue<UShort> rhs)
1091*03ce13f7SAndroid Build Coastguard Worker {
1092*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort>(Nucleus::createUDiv(lhs.value(), rhs.value()));
1093*03ce13f7SAndroid Build Coastguard Worker }
1094*03ce13f7SAndroid Build Coastguard Worker
operator %(RValue<UShort> lhs,RValue<UShort> rhs)1095*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator%(RValue<UShort> lhs, RValue<UShort> rhs)
1096*03ce13f7SAndroid Build Coastguard Worker {
1097*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort>(Nucleus::createURem(lhs.value(), rhs.value()));
1098*03ce13f7SAndroid Build Coastguard Worker }
1099*03ce13f7SAndroid Build Coastguard Worker
operator &(RValue<UShort> lhs,RValue<UShort> rhs)1100*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator&(RValue<UShort> lhs, RValue<UShort> rhs)
1101*03ce13f7SAndroid Build Coastguard Worker {
1102*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort>(Nucleus::createAnd(lhs.value(), rhs.value()));
1103*03ce13f7SAndroid Build Coastguard Worker }
1104*03ce13f7SAndroid Build Coastguard Worker
operator |(RValue<UShort> lhs,RValue<UShort> rhs)1105*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator|(RValue<UShort> lhs, RValue<UShort> rhs)
1106*03ce13f7SAndroid Build Coastguard Worker {
1107*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort>(Nucleus::createOr(lhs.value(), rhs.value()));
1108*03ce13f7SAndroid Build Coastguard Worker }
1109*03ce13f7SAndroid Build Coastguard Worker
operator ^(RValue<UShort> lhs,RValue<UShort> rhs)1110*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator^(RValue<UShort> lhs, RValue<UShort> rhs)
1111*03ce13f7SAndroid Build Coastguard Worker {
1112*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort>(Nucleus::createXor(lhs.value(), rhs.value()));
1113*03ce13f7SAndroid Build Coastguard Worker }
1114*03ce13f7SAndroid Build Coastguard Worker
operator <<(RValue<UShort> lhs,RValue<UShort> rhs)1115*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator<<(RValue<UShort> lhs, RValue<UShort> rhs)
1116*03ce13f7SAndroid Build Coastguard Worker {
1117*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort>(Nucleus::createShl(lhs.value(), rhs.value()));
1118*03ce13f7SAndroid Build Coastguard Worker }
1119*03ce13f7SAndroid Build Coastguard Worker
operator >>(RValue<UShort> lhs,RValue<UShort> rhs)1120*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator>>(RValue<UShort> lhs, RValue<UShort> rhs)
1121*03ce13f7SAndroid Build Coastguard Worker {
1122*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort>(Nucleus::createLShr(lhs.value(), rhs.value()));
1123*03ce13f7SAndroid Build Coastguard Worker }
1124*03ce13f7SAndroid Build Coastguard Worker
operator +=(UShort & lhs,RValue<UShort> rhs)1125*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator+=(UShort &lhs, RValue<UShort> rhs)
1126*03ce13f7SAndroid Build Coastguard Worker {
1127*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs + rhs;
1128*03ce13f7SAndroid Build Coastguard Worker }
1129*03ce13f7SAndroid Build Coastguard Worker
operator -=(UShort & lhs,RValue<UShort> rhs)1130*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator-=(UShort &lhs, RValue<UShort> rhs)
1131*03ce13f7SAndroid Build Coastguard Worker {
1132*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs - rhs;
1133*03ce13f7SAndroid Build Coastguard Worker }
1134*03ce13f7SAndroid Build Coastguard Worker
operator *=(UShort & lhs,RValue<UShort> rhs)1135*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator*=(UShort &lhs, RValue<UShort> rhs)
1136*03ce13f7SAndroid Build Coastguard Worker {
1137*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs * rhs;
1138*03ce13f7SAndroid Build Coastguard Worker }
1139*03ce13f7SAndroid Build Coastguard Worker
operator /=(UShort & lhs,RValue<UShort> rhs)1140*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator/=(UShort &lhs, RValue<UShort> rhs)
1141*03ce13f7SAndroid Build Coastguard Worker {
1142*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs / rhs;
1143*03ce13f7SAndroid Build Coastguard Worker }
1144*03ce13f7SAndroid Build Coastguard Worker
operator %=(UShort & lhs,RValue<UShort> rhs)1145*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator%=(UShort &lhs, RValue<UShort> rhs)
1146*03ce13f7SAndroid Build Coastguard Worker {
1147*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs % rhs;
1148*03ce13f7SAndroid Build Coastguard Worker }
1149*03ce13f7SAndroid Build Coastguard Worker
operator &=(UShort & lhs,RValue<UShort> rhs)1150*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator&=(UShort &lhs, RValue<UShort> rhs)
1151*03ce13f7SAndroid Build Coastguard Worker {
1152*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs & rhs;
1153*03ce13f7SAndroid Build Coastguard Worker }
1154*03ce13f7SAndroid Build Coastguard Worker
operator |=(UShort & lhs,RValue<UShort> rhs)1155*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator|=(UShort &lhs, RValue<UShort> rhs)
1156*03ce13f7SAndroid Build Coastguard Worker {
1157*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs | rhs;
1158*03ce13f7SAndroid Build Coastguard Worker }
1159*03ce13f7SAndroid Build Coastguard Worker
operator ^=(UShort & lhs,RValue<UShort> rhs)1160*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator^=(UShort &lhs, RValue<UShort> rhs)
1161*03ce13f7SAndroid Build Coastguard Worker {
1162*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs ^ rhs;
1163*03ce13f7SAndroid Build Coastguard Worker }
1164*03ce13f7SAndroid Build Coastguard Worker
operator <<=(UShort & lhs,RValue<UShort> rhs)1165*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator<<=(UShort &lhs, RValue<UShort> rhs)
1166*03ce13f7SAndroid Build Coastguard Worker {
1167*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs << rhs;
1168*03ce13f7SAndroid Build Coastguard Worker }
1169*03ce13f7SAndroid Build Coastguard Worker
operator >>=(UShort & lhs,RValue<UShort> rhs)1170*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator>>=(UShort &lhs, RValue<UShort> rhs)
1171*03ce13f7SAndroid Build Coastguard Worker {
1172*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs >> rhs;
1173*03ce13f7SAndroid Build Coastguard Worker }
1174*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<UShort> val)1175*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator+(RValue<UShort> val)
1176*03ce13f7SAndroid Build Coastguard Worker {
1177*03ce13f7SAndroid Build Coastguard Worker return val;
1178*03ce13f7SAndroid Build Coastguard Worker }
1179*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<UShort> val)1180*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator-(RValue<UShort> val)
1181*03ce13f7SAndroid Build Coastguard Worker {
1182*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort>(Nucleus::createNeg(val.value()));
1183*03ce13f7SAndroid Build Coastguard Worker }
1184*03ce13f7SAndroid Build Coastguard Worker
operator ~(RValue<UShort> val)1185*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator~(RValue<UShort> val)
1186*03ce13f7SAndroid Build Coastguard Worker {
1187*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort>(Nucleus::createNot(val.value()));
1188*03ce13f7SAndroid Build Coastguard Worker }
1189*03ce13f7SAndroid Build Coastguard Worker
operator ++(UShort & val,int)1190*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator++(UShort &val, int) // Post-increment
1191*03ce13f7SAndroid Build Coastguard Worker {
1192*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> res = val;
1193*03ce13f7SAndroid Build Coastguard Worker
1194*03ce13f7SAndroid Build Coastguard Worker Value *inc = Nucleus::createAdd(res.value(), Nucleus::createConstantShort((unsigned short)1));
1195*03ce13f7SAndroid Build Coastguard Worker val.storeValue(inc);
1196*03ce13f7SAndroid Build Coastguard Worker
1197*03ce13f7SAndroid Build Coastguard Worker return res;
1198*03ce13f7SAndroid Build Coastguard Worker }
1199*03ce13f7SAndroid Build Coastguard Worker
operator ++(UShort & val)1200*03ce13f7SAndroid Build Coastguard Worker const UShort &operator++(UShort &val) // Pre-increment
1201*03ce13f7SAndroid Build Coastguard Worker {
1202*03ce13f7SAndroid Build Coastguard Worker Value *inc = Nucleus::createAdd(val.loadValue(), Nucleus::createConstantShort((unsigned short)1));
1203*03ce13f7SAndroid Build Coastguard Worker val.storeValue(inc);
1204*03ce13f7SAndroid Build Coastguard Worker
1205*03ce13f7SAndroid Build Coastguard Worker return val;
1206*03ce13f7SAndroid Build Coastguard Worker }
1207*03ce13f7SAndroid Build Coastguard Worker
operator --(UShort & val,int)1208*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> operator--(UShort &val, int) // Post-decrement
1209*03ce13f7SAndroid Build Coastguard Worker {
1210*03ce13f7SAndroid Build Coastguard Worker RValue<UShort> res = val;
1211*03ce13f7SAndroid Build Coastguard Worker
1212*03ce13f7SAndroid Build Coastguard Worker Value *inc = Nucleus::createSub(res.value(), Nucleus::createConstantShort((unsigned short)1));
1213*03ce13f7SAndroid Build Coastguard Worker val.storeValue(inc);
1214*03ce13f7SAndroid Build Coastguard Worker
1215*03ce13f7SAndroid Build Coastguard Worker return res;
1216*03ce13f7SAndroid Build Coastguard Worker }
1217*03ce13f7SAndroid Build Coastguard Worker
operator --(UShort & val)1218*03ce13f7SAndroid Build Coastguard Worker const UShort &operator--(UShort &val) // Pre-decrement
1219*03ce13f7SAndroid Build Coastguard Worker {
1220*03ce13f7SAndroid Build Coastguard Worker Value *inc = Nucleus::createSub(val.loadValue(), Nucleus::createConstantShort((unsigned short)1));
1221*03ce13f7SAndroid Build Coastguard Worker val.storeValue(inc);
1222*03ce13f7SAndroid Build Coastguard Worker
1223*03ce13f7SAndroid Build Coastguard Worker return val;
1224*03ce13f7SAndroid Build Coastguard Worker }
1225*03ce13f7SAndroid Build Coastguard Worker
operator <(RValue<UShort> lhs,RValue<UShort> rhs)1226*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator<(RValue<UShort> lhs, RValue<UShort> rhs)
1227*03ce13f7SAndroid Build Coastguard Worker {
1228*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpULT(lhs.value(), rhs.value()));
1229*03ce13f7SAndroid Build Coastguard Worker }
1230*03ce13f7SAndroid Build Coastguard Worker
operator <=(RValue<UShort> lhs,RValue<UShort> rhs)1231*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator<=(RValue<UShort> lhs, RValue<UShort> rhs)
1232*03ce13f7SAndroid Build Coastguard Worker {
1233*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpULE(lhs.value(), rhs.value()));
1234*03ce13f7SAndroid Build Coastguard Worker }
1235*03ce13f7SAndroid Build Coastguard Worker
operator >(RValue<UShort> lhs,RValue<UShort> rhs)1236*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator>(RValue<UShort> lhs, RValue<UShort> rhs)
1237*03ce13f7SAndroid Build Coastguard Worker {
1238*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpUGT(lhs.value(), rhs.value()));
1239*03ce13f7SAndroid Build Coastguard Worker }
1240*03ce13f7SAndroid Build Coastguard Worker
operator >=(RValue<UShort> lhs,RValue<UShort> rhs)1241*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator>=(RValue<UShort> lhs, RValue<UShort> rhs)
1242*03ce13f7SAndroid Build Coastguard Worker {
1243*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpUGE(lhs.value(), rhs.value()));
1244*03ce13f7SAndroid Build Coastguard Worker }
1245*03ce13f7SAndroid Build Coastguard Worker
operator !=(RValue<UShort> lhs,RValue<UShort> rhs)1246*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator!=(RValue<UShort> lhs, RValue<UShort> rhs)
1247*03ce13f7SAndroid Build Coastguard Worker {
1248*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpNE(lhs.value(), rhs.value()));
1249*03ce13f7SAndroid Build Coastguard Worker }
1250*03ce13f7SAndroid Build Coastguard Worker
operator ==(RValue<UShort> lhs,RValue<UShort> rhs)1251*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator==(RValue<UShort> lhs, RValue<UShort> rhs)
1252*03ce13f7SAndroid Build Coastguard Worker {
1253*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpEQ(lhs.value(), rhs.value()));
1254*03ce13f7SAndroid Build Coastguard Worker }
1255*03ce13f7SAndroid Build Coastguard Worker
Byte4(RValue<Byte8> cast)1256*03ce13f7SAndroid Build Coastguard Worker Byte4::Byte4(RValue<Byte8> cast)
1257*03ce13f7SAndroid Build Coastguard Worker {
1258*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createBitCast(cast.value(), type()));
1259*03ce13f7SAndroid Build Coastguard Worker }
1260*03ce13f7SAndroid Build Coastguard Worker
Byte4(RValue<UShort4> cast)1261*03ce13f7SAndroid Build Coastguard Worker Byte4::Byte4(RValue<UShort4> cast)
1262*03ce13f7SAndroid Build Coastguard Worker {
1263*03ce13f7SAndroid Build Coastguard Worker // TODO(b/148379603): Optimize narrowing swizzle.
1264*03ce13f7SAndroid Build Coastguard Worker *this = As<Byte4>(Swizzle(As<Byte8>(cast), 0x0246'0246));
1265*03ce13f7SAndroid Build Coastguard Worker }
1266*03ce13f7SAndroid Build Coastguard Worker
Byte4(RValue<Short4> cast)1267*03ce13f7SAndroid Build Coastguard Worker Byte4::Byte4(RValue<Short4> cast)
1268*03ce13f7SAndroid Build Coastguard Worker {
1269*03ce13f7SAndroid Build Coastguard Worker // TODO(b/148379603): Optimize narrowing swizzle.
1270*03ce13f7SAndroid Build Coastguard Worker *this = As<Byte4>(Swizzle(As<Byte8>(cast), 0x0246'0246));
1271*03ce13f7SAndroid Build Coastguard Worker }
1272*03ce13f7SAndroid Build Coastguard Worker
Byte4(RValue<UInt4> cast)1273*03ce13f7SAndroid Build Coastguard Worker Byte4::Byte4(RValue<UInt4> cast)
1274*03ce13f7SAndroid Build Coastguard Worker {
1275*03ce13f7SAndroid Build Coastguard Worker // TODO(b/148379603): Optimize narrowing swizzle.
1276*03ce13f7SAndroid Build Coastguard Worker *this = As<Byte4>(Swizzle(As<Byte16>(cast), 0x048C'048C'048C'048C));
1277*03ce13f7SAndroid Build Coastguard Worker }
1278*03ce13f7SAndroid Build Coastguard Worker
Byte4(RValue<Int4> cast)1279*03ce13f7SAndroid Build Coastguard Worker Byte4::Byte4(RValue<Int4> cast)
1280*03ce13f7SAndroid Build Coastguard Worker {
1281*03ce13f7SAndroid Build Coastguard Worker // TODO(b/148379603): Optimize narrowing swizzle.
1282*03ce13f7SAndroid Build Coastguard Worker *this = As<Byte4>(Swizzle(As<Byte16>(cast), 0x048C'048C'048C'048C));
1283*03ce13f7SAndroid Build Coastguard Worker }
1284*03ce13f7SAndroid Build Coastguard Worker
Byte4(RValue<Byte4> rhs)1285*03ce13f7SAndroid Build Coastguard Worker Byte4::Byte4(RValue<Byte4> rhs)
1286*03ce13f7SAndroid Build Coastguard Worker {
1287*03ce13f7SAndroid Build Coastguard Worker store(rhs);
1288*03ce13f7SAndroid Build Coastguard Worker }
1289*03ce13f7SAndroid Build Coastguard Worker
Byte4(const Byte4 & rhs)1290*03ce13f7SAndroid Build Coastguard Worker Byte4::Byte4(const Byte4 &rhs)
1291*03ce13f7SAndroid Build Coastguard Worker {
1292*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
1293*03ce13f7SAndroid Build Coastguard Worker }
1294*03ce13f7SAndroid Build Coastguard Worker
Byte4(const Reference<Byte4> & rhs)1295*03ce13f7SAndroid Build Coastguard Worker Byte4::Byte4(const Reference<Byte4> &rhs)
1296*03ce13f7SAndroid Build Coastguard Worker {
1297*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
1298*03ce13f7SAndroid Build Coastguard Worker }
1299*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<Byte4> rhs)1300*03ce13f7SAndroid Build Coastguard Worker RValue<Byte4> Byte4::operator=(RValue<Byte4> rhs)
1301*03ce13f7SAndroid Build Coastguard Worker {
1302*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
1303*03ce13f7SAndroid Build Coastguard Worker }
1304*03ce13f7SAndroid Build Coastguard Worker
operator =(const Byte4 & rhs)1305*03ce13f7SAndroid Build Coastguard Worker RValue<Byte4> Byte4::operator=(const Byte4 &rhs)
1306*03ce13f7SAndroid Build Coastguard Worker {
1307*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
1308*03ce13f7SAndroid Build Coastguard Worker }
1309*03ce13f7SAndroid Build Coastguard Worker
Insert(RValue<Byte4> val,RValue<Byte> element,int i)1310*03ce13f7SAndroid Build Coastguard Worker RValue<Byte4> Insert(RValue<Byte4> val, RValue<Byte> element, int i)
1311*03ce13f7SAndroid Build Coastguard Worker {
1312*03ce13f7SAndroid Build Coastguard Worker return RValue<Byte4>(Nucleus::createInsertElement(val.value(), element.value(), i));
1313*03ce13f7SAndroid Build Coastguard Worker }
1314*03ce13f7SAndroid Build Coastguard Worker
Byte8(uint8_t x0,uint8_t x1,uint8_t x2,uint8_t x3,uint8_t x4,uint8_t x5,uint8_t x6,uint8_t x7)1315*03ce13f7SAndroid Build Coastguard Worker Byte8::Byte8(uint8_t x0, uint8_t x1, uint8_t x2, uint8_t x3, uint8_t x4, uint8_t x5, uint8_t x6, uint8_t x7)
1316*03ce13f7SAndroid Build Coastguard Worker {
1317*03ce13f7SAndroid Build Coastguard Worker std::vector<int64_t> constantVector = { x0, x1, x2, x3, x4, x5, x6, x7 };
1318*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantVector(constantVector, type()));
1319*03ce13f7SAndroid Build Coastguard Worker }
1320*03ce13f7SAndroid Build Coastguard Worker
Byte8(RValue<Byte8> rhs)1321*03ce13f7SAndroid Build Coastguard Worker Byte8::Byte8(RValue<Byte8> rhs)
1322*03ce13f7SAndroid Build Coastguard Worker {
1323*03ce13f7SAndroid Build Coastguard Worker store(rhs);
1324*03ce13f7SAndroid Build Coastguard Worker }
1325*03ce13f7SAndroid Build Coastguard Worker
Byte8(const Byte8 & rhs)1326*03ce13f7SAndroid Build Coastguard Worker Byte8::Byte8(const Byte8 &rhs)
1327*03ce13f7SAndroid Build Coastguard Worker {
1328*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
1329*03ce13f7SAndroid Build Coastguard Worker }
1330*03ce13f7SAndroid Build Coastguard Worker
Byte8(const Reference<Byte8> & rhs)1331*03ce13f7SAndroid Build Coastguard Worker Byte8::Byte8(const Reference<Byte8> &rhs)
1332*03ce13f7SAndroid Build Coastguard Worker {
1333*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
1334*03ce13f7SAndroid Build Coastguard Worker }
1335*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<Byte8> rhs)1336*03ce13f7SAndroid Build Coastguard Worker RValue<Byte8> Byte8::operator=(RValue<Byte8> rhs)
1337*03ce13f7SAndroid Build Coastguard Worker {
1338*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
1339*03ce13f7SAndroid Build Coastguard Worker }
1340*03ce13f7SAndroid Build Coastguard Worker
operator =(const Byte8 & rhs)1341*03ce13f7SAndroid Build Coastguard Worker RValue<Byte8> Byte8::operator=(const Byte8 &rhs)
1342*03ce13f7SAndroid Build Coastguard Worker {
1343*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
1344*03ce13f7SAndroid Build Coastguard Worker }
1345*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<Byte8> & rhs)1346*03ce13f7SAndroid Build Coastguard Worker RValue<Byte8> Byte8::operator=(const Reference<Byte8> &rhs)
1347*03ce13f7SAndroid Build Coastguard Worker {
1348*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
1349*03ce13f7SAndroid Build Coastguard Worker }
1350*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<Byte8> lhs,RValue<Byte8> rhs)1351*03ce13f7SAndroid Build Coastguard Worker RValue<Byte8> operator+(RValue<Byte8> lhs, RValue<Byte8> rhs)
1352*03ce13f7SAndroid Build Coastguard Worker {
1353*03ce13f7SAndroid Build Coastguard Worker return RValue<Byte8>(Nucleus::createAdd(lhs.value(), rhs.value()));
1354*03ce13f7SAndroid Build Coastguard Worker }
1355*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<Byte8> lhs,RValue<Byte8> rhs)1356*03ce13f7SAndroid Build Coastguard Worker RValue<Byte8> operator-(RValue<Byte8> lhs, RValue<Byte8> rhs)
1357*03ce13f7SAndroid Build Coastguard Worker {
1358*03ce13f7SAndroid Build Coastguard Worker return RValue<Byte8>(Nucleus::createSub(lhs.value(), rhs.value()));
1359*03ce13f7SAndroid Build Coastguard Worker }
1360*03ce13f7SAndroid Build Coastguard Worker
1361*03ce13f7SAndroid Build Coastguard Worker // RValue<Byte8> operator*(RValue<Byte8> lhs, RValue<Byte8> rhs)
1362*03ce13f7SAndroid Build Coastguard Worker // {
1363*03ce13f7SAndroid Build Coastguard Worker // return RValue<Byte8>(Nucleus::createMul(lhs.value(), rhs.value()));
1364*03ce13f7SAndroid Build Coastguard Worker // }
1365*03ce13f7SAndroid Build Coastguard Worker
1366*03ce13f7SAndroid Build Coastguard Worker // RValue<Byte8> operator/(RValue<Byte8> lhs, RValue<Byte8> rhs)
1367*03ce13f7SAndroid Build Coastguard Worker // {
1368*03ce13f7SAndroid Build Coastguard Worker // return RValue<Byte8>(Nucleus::createUDiv(lhs.value(), rhs.value()));
1369*03ce13f7SAndroid Build Coastguard Worker // }
1370*03ce13f7SAndroid Build Coastguard Worker
1371*03ce13f7SAndroid Build Coastguard Worker // RValue<Byte8> operator%(RValue<Byte8> lhs, RValue<Byte8> rhs)
1372*03ce13f7SAndroid Build Coastguard Worker // {
1373*03ce13f7SAndroid Build Coastguard Worker // return RValue<Byte8>(Nucleus::createURem(lhs.value(), rhs.value()));
1374*03ce13f7SAndroid Build Coastguard Worker // }
1375*03ce13f7SAndroid Build Coastguard Worker
operator &(RValue<Byte8> lhs,RValue<Byte8> rhs)1376*03ce13f7SAndroid Build Coastguard Worker RValue<Byte8> operator&(RValue<Byte8> lhs, RValue<Byte8> rhs)
1377*03ce13f7SAndroid Build Coastguard Worker {
1378*03ce13f7SAndroid Build Coastguard Worker return RValue<Byte8>(Nucleus::createAnd(lhs.value(), rhs.value()));
1379*03ce13f7SAndroid Build Coastguard Worker }
1380*03ce13f7SAndroid Build Coastguard Worker
operator |(RValue<Byte8> lhs,RValue<Byte8> rhs)1381*03ce13f7SAndroid Build Coastguard Worker RValue<Byte8> operator|(RValue<Byte8> lhs, RValue<Byte8> rhs)
1382*03ce13f7SAndroid Build Coastguard Worker {
1383*03ce13f7SAndroid Build Coastguard Worker return RValue<Byte8>(Nucleus::createOr(lhs.value(), rhs.value()));
1384*03ce13f7SAndroid Build Coastguard Worker }
1385*03ce13f7SAndroid Build Coastguard Worker
operator ^(RValue<Byte8> lhs,RValue<Byte8> rhs)1386*03ce13f7SAndroid Build Coastguard Worker RValue<Byte8> operator^(RValue<Byte8> lhs, RValue<Byte8> rhs)
1387*03ce13f7SAndroid Build Coastguard Worker {
1388*03ce13f7SAndroid Build Coastguard Worker return RValue<Byte8>(Nucleus::createXor(lhs.value(), rhs.value()));
1389*03ce13f7SAndroid Build Coastguard Worker }
1390*03ce13f7SAndroid Build Coastguard Worker
1391*03ce13f7SAndroid Build Coastguard Worker // RValue<Byte8> operator<<(RValue<Byte8> lhs, unsigned char rhs)
1392*03ce13f7SAndroid Build Coastguard Worker // {
1393*03ce13f7SAndroid Build Coastguard Worker // return RValue<Byte8>(Nucleus::createShl(lhs.value(), rhs.value()));
1394*03ce13f7SAndroid Build Coastguard Worker // }
1395*03ce13f7SAndroid Build Coastguard Worker
1396*03ce13f7SAndroid Build Coastguard Worker // RValue<Byte8> operator>>(RValue<Byte8> lhs, unsigned char rhs)
1397*03ce13f7SAndroid Build Coastguard Worker // {
1398*03ce13f7SAndroid Build Coastguard Worker // return RValue<Byte8>(Nucleus::createLShr(lhs.value(), rhs.value()));
1399*03ce13f7SAndroid Build Coastguard Worker // }
1400*03ce13f7SAndroid Build Coastguard Worker
operator +=(Byte8 & lhs,RValue<Byte8> rhs)1401*03ce13f7SAndroid Build Coastguard Worker RValue<Byte8> operator+=(Byte8 &lhs, RValue<Byte8> rhs)
1402*03ce13f7SAndroid Build Coastguard Worker {
1403*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs + rhs;
1404*03ce13f7SAndroid Build Coastguard Worker }
1405*03ce13f7SAndroid Build Coastguard Worker
operator -=(Byte8 & lhs,RValue<Byte8> rhs)1406*03ce13f7SAndroid Build Coastguard Worker RValue<Byte8> operator-=(Byte8 &lhs, RValue<Byte8> rhs)
1407*03ce13f7SAndroid Build Coastguard Worker {
1408*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs - rhs;
1409*03ce13f7SAndroid Build Coastguard Worker }
1410*03ce13f7SAndroid Build Coastguard Worker
1411*03ce13f7SAndroid Build Coastguard Worker // RValue<Byte8> operator*=(Byte8 &lhs, RValue<Byte8> rhs)
1412*03ce13f7SAndroid Build Coastguard Worker // {
1413*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs * rhs;
1414*03ce13f7SAndroid Build Coastguard Worker // }
1415*03ce13f7SAndroid Build Coastguard Worker
1416*03ce13f7SAndroid Build Coastguard Worker // RValue<Byte8> operator/=(Byte8 &lhs, RValue<Byte8> rhs)
1417*03ce13f7SAndroid Build Coastguard Worker // {
1418*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs / rhs;
1419*03ce13f7SAndroid Build Coastguard Worker // }
1420*03ce13f7SAndroid Build Coastguard Worker
1421*03ce13f7SAndroid Build Coastguard Worker // RValue<Byte8> operator%=(Byte8 &lhs, RValue<Byte8> rhs)
1422*03ce13f7SAndroid Build Coastguard Worker // {
1423*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs % rhs;
1424*03ce13f7SAndroid Build Coastguard Worker // }
1425*03ce13f7SAndroid Build Coastguard Worker
operator &=(Byte8 & lhs,RValue<Byte8> rhs)1426*03ce13f7SAndroid Build Coastguard Worker RValue<Byte8> operator&=(Byte8 &lhs, RValue<Byte8> rhs)
1427*03ce13f7SAndroid Build Coastguard Worker {
1428*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs & rhs;
1429*03ce13f7SAndroid Build Coastguard Worker }
1430*03ce13f7SAndroid Build Coastguard Worker
operator |=(Byte8 & lhs,RValue<Byte8> rhs)1431*03ce13f7SAndroid Build Coastguard Worker RValue<Byte8> operator|=(Byte8 &lhs, RValue<Byte8> rhs)
1432*03ce13f7SAndroid Build Coastguard Worker {
1433*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs | rhs;
1434*03ce13f7SAndroid Build Coastguard Worker }
1435*03ce13f7SAndroid Build Coastguard Worker
operator ^=(Byte8 & lhs,RValue<Byte8> rhs)1436*03ce13f7SAndroid Build Coastguard Worker RValue<Byte8> operator^=(Byte8 &lhs, RValue<Byte8> rhs)
1437*03ce13f7SAndroid Build Coastguard Worker {
1438*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs ^ rhs;
1439*03ce13f7SAndroid Build Coastguard Worker }
1440*03ce13f7SAndroid Build Coastguard Worker
1441*03ce13f7SAndroid Build Coastguard Worker // RValue<Byte8> operator<<=(Byte8 &lhs, RValue<Byte8> rhs)
1442*03ce13f7SAndroid Build Coastguard Worker // {
1443*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs << rhs;
1444*03ce13f7SAndroid Build Coastguard Worker // }
1445*03ce13f7SAndroid Build Coastguard Worker
1446*03ce13f7SAndroid Build Coastguard Worker // RValue<Byte8> operator>>=(Byte8 &lhs, RValue<Byte8> rhs)
1447*03ce13f7SAndroid Build Coastguard Worker // {
1448*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs >> rhs;
1449*03ce13f7SAndroid Build Coastguard Worker // }
1450*03ce13f7SAndroid Build Coastguard Worker
1451*03ce13f7SAndroid Build Coastguard Worker // RValue<Byte8> operator+(RValue<Byte8> val)
1452*03ce13f7SAndroid Build Coastguard Worker // {
1453*03ce13f7SAndroid Build Coastguard Worker // return val;
1454*03ce13f7SAndroid Build Coastguard Worker // }
1455*03ce13f7SAndroid Build Coastguard Worker
1456*03ce13f7SAndroid Build Coastguard Worker // RValue<Byte8> operator-(RValue<Byte8> val)
1457*03ce13f7SAndroid Build Coastguard Worker // {
1458*03ce13f7SAndroid Build Coastguard Worker // return RValue<Byte8>(Nucleus::createNeg(val.value()));
1459*03ce13f7SAndroid Build Coastguard Worker // }
1460*03ce13f7SAndroid Build Coastguard Worker
operator ~(RValue<Byte8> val)1461*03ce13f7SAndroid Build Coastguard Worker RValue<Byte8> operator~(RValue<Byte8> val)
1462*03ce13f7SAndroid Build Coastguard Worker {
1463*03ce13f7SAndroid Build Coastguard Worker return RValue<Byte8>(Nucleus::createNot(val.value()));
1464*03ce13f7SAndroid Build Coastguard Worker }
1465*03ce13f7SAndroid Build Coastguard Worker
Swizzle(RValue<Byte8> x,uint32_t select)1466*03ce13f7SAndroid Build Coastguard Worker RValue<Byte8> Swizzle(RValue<Byte8> x, uint32_t select)
1467*03ce13f7SAndroid Build Coastguard Worker {
1468*03ce13f7SAndroid Build Coastguard Worker // Real type is v16i8
1469*03ce13f7SAndroid Build Coastguard Worker // TODO(b/148379603): Optimize narrowing swizzle.
1470*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = {
1471*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 28) & 0x07),
1472*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 24) & 0x07),
1473*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 20) & 0x07),
1474*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 16) & 0x07),
1475*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 12) & 0x07),
1476*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 8) & 0x07),
1477*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 4) & 0x07),
1478*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 0) & 0x07),
1479*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 28) & 0x07),
1480*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 24) & 0x07),
1481*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 20) & 0x07),
1482*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 16) & 0x07),
1483*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 12) & 0x07),
1484*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 8) & 0x07),
1485*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 4) & 0x07),
1486*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 0) & 0x07),
1487*03ce13f7SAndroid Build Coastguard Worker };
1488*03ce13f7SAndroid Build Coastguard Worker
1489*03ce13f7SAndroid Build Coastguard Worker return As<Byte8>(Nucleus::createShuffleVector(x.value(), x.value(), shuffle));
1490*03ce13f7SAndroid Build Coastguard Worker }
1491*03ce13f7SAndroid Build Coastguard Worker
Unpack(RValue<Byte4> x)1492*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> Unpack(RValue<Byte4> x)
1493*03ce13f7SAndroid Build Coastguard Worker {
1494*03ce13f7SAndroid Build Coastguard Worker // TODO(b/148379603): Optimize narrowing swizzle.
1495*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7 }; // Real type is v16i8
1496*03ce13f7SAndroid Build Coastguard Worker return As<Short4>(Nucleus::createShuffleVector(x.value(), x.value(), shuffle));
1497*03ce13f7SAndroid Build Coastguard Worker }
1498*03ce13f7SAndroid Build Coastguard Worker
Unpack(RValue<Byte4> x,RValue<Byte4> y)1499*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> Unpack(RValue<Byte4> x, RValue<Byte4> y)
1500*03ce13f7SAndroid Build Coastguard Worker {
1501*03ce13f7SAndroid Build Coastguard Worker return UnpackLow(As<Byte8>(x), As<Byte8>(y));
1502*03ce13f7SAndroid Build Coastguard Worker }
1503*03ce13f7SAndroid Build Coastguard Worker
UnpackLow(RValue<Byte8> x,RValue<Byte8> y)1504*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> UnpackLow(RValue<Byte8> x, RValue<Byte8> y)
1505*03ce13f7SAndroid Build Coastguard Worker {
1506*03ce13f7SAndroid Build Coastguard Worker // TODO(b/148379603): Optimize narrowing swizzle.
1507*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = { 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23 }; // Real type is v16i8
1508*03ce13f7SAndroid Build Coastguard Worker return As<Short4>(Nucleus::createShuffleVector(x.value(), y.value(), shuffle));
1509*03ce13f7SAndroid Build Coastguard Worker }
1510*03ce13f7SAndroid Build Coastguard Worker
UnpackHigh(RValue<Byte8> x,RValue<Byte8> y)1511*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> UnpackHigh(RValue<Byte8> x, RValue<Byte8> y)
1512*03ce13f7SAndroid Build Coastguard Worker {
1513*03ce13f7SAndroid Build Coastguard Worker // TODO(b/148379603): Optimize narrowing swizzle.
1514*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = { 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23 }; // Real type is v16i8
1515*03ce13f7SAndroid Build Coastguard Worker auto lowHigh = RValue<Byte16>(Nucleus::createShuffleVector(x.value(), y.value(), shuffle));
1516*03ce13f7SAndroid Build Coastguard Worker return As<Short4>(Swizzle(As<Int4>(lowHigh), 0x2323));
1517*03ce13f7SAndroid Build Coastguard Worker }
1518*03ce13f7SAndroid Build Coastguard Worker
SByte8(uint8_t x0,uint8_t x1,uint8_t x2,uint8_t x3,uint8_t x4,uint8_t x5,uint8_t x6,uint8_t x7)1519*03ce13f7SAndroid Build Coastguard Worker SByte8::SByte8(uint8_t x0, uint8_t x1, uint8_t x2, uint8_t x3, uint8_t x4, uint8_t x5, uint8_t x6, uint8_t x7)
1520*03ce13f7SAndroid Build Coastguard Worker {
1521*03ce13f7SAndroid Build Coastguard Worker std::vector<int64_t> constantVector = { x0, x1, x2, x3, x4, x5, x6, x7 };
1522*03ce13f7SAndroid Build Coastguard Worker Value *vector = Nucleus::createConstantVector(constantVector, type());
1523*03ce13f7SAndroid Build Coastguard Worker
1524*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createBitCast(vector, type()));
1525*03ce13f7SAndroid Build Coastguard Worker }
1526*03ce13f7SAndroid Build Coastguard Worker
SByte8(RValue<SByte8> rhs)1527*03ce13f7SAndroid Build Coastguard Worker SByte8::SByte8(RValue<SByte8> rhs)
1528*03ce13f7SAndroid Build Coastguard Worker {
1529*03ce13f7SAndroid Build Coastguard Worker store(rhs);
1530*03ce13f7SAndroid Build Coastguard Worker }
1531*03ce13f7SAndroid Build Coastguard Worker
SByte8(const SByte8 & rhs)1532*03ce13f7SAndroid Build Coastguard Worker SByte8::SByte8(const SByte8 &rhs)
1533*03ce13f7SAndroid Build Coastguard Worker {
1534*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
1535*03ce13f7SAndroid Build Coastguard Worker }
1536*03ce13f7SAndroid Build Coastguard Worker
SByte8(const Reference<SByte8> & rhs)1537*03ce13f7SAndroid Build Coastguard Worker SByte8::SByte8(const Reference<SByte8> &rhs)
1538*03ce13f7SAndroid Build Coastguard Worker {
1539*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
1540*03ce13f7SAndroid Build Coastguard Worker }
1541*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<SByte8> rhs)1542*03ce13f7SAndroid Build Coastguard Worker RValue<SByte8> SByte8::operator=(RValue<SByte8> rhs)
1543*03ce13f7SAndroid Build Coastguard Worker {
1544*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
1545*03ce13f7SAndroid Build Coastguard Worker }
1546*03ce13f7SAndroid Build Coastguard Worker
operator =(const SByte8 & rhs)1547*03ce13f7SAndroid Build Coastguard Worker RValue<SByte8> SByte8::operator=(const SByte8 &rhs)
1548*03ce13f7SAndroid Build Coastguard Worker {
1549*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
1550*03ce13f7SAndroid Build Coastguard Worker }
1551*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<SByte8> & rhs)1552*03ce13f7SAndroid Build Coastguard Worker RValue<SByte8> SByte8::operator=(const Reference<SByte8> &rhs)
1553*03ce13f7SAndroid Build Coastguard Worker {
1554*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
1555*03ce13f7SAndroid Build Coastguard Worker }
1556*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<SByte8> lhs,RValue<SByte8> rhs)1557*03ce13f7SAndroid Build Coastguard Worker RValue<SByte8> operator+(RValue<SByte8> lhs, RValue<SByte8> rhs)
1558*03ce13f7SAndroid Build Coastguard Worker {
1559*03ce13f7SAndroid Build Coastguard Worker return RValue<SByte8>(Nucleus::createAdd(lhs.value(), rhs.value()));
1560*03ce13f7SAndroid Build Coastguard Worker }
1561*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<SByte8> lhs,RValue<SByte8> rhs)1562*03ce13f7SAndroid Build Coastguard Worker RValue<SByte8> operator-(RValue<SByte8> lhs, RValue<SByte8> rhs)
1563*03ce13f7SAndroid Build Coastguard Worker {
1564*03ce13f7SAndroid Build Coastguard Worker return RValue<SByte8>(Nucleus::createSub(lhs.value(), rhs.value()));
1565*03ce13f7SAndroid Build Coastguard Worker }
1566*03ce13f7SAndroid Build Coastguard Worker
1567*03ce13f7SAndroid Build Coastguard Worker // RValue<SByte8> operator*(RValue<SByte8> lhs, RValue<SByte8> rhs)
1568*03ce13f7SAndroid Build Coastguard Worker // {
1569*03ce13f7SAndroid Build Coastguard Worker // return RValue<SByte8>(Nucleus::createMul(lhs.value(), rhs.value()));
1570*03ce13f7SAndroid Build Coastguard Worker // }
1571*03ce13f7SAndroid Build Coastguard Worker
1572*03ce13f7SAndroid Build Coastguard Worker // RValue<SByte8> operator/(RValue<SByte8> lhs, RValue<SByte8> rhs)
1573*03ce13f7SAndroid Build Coastguard Worker // {
1574*03ce13f7SAndroid Build Coastguard Worker // return RValue<SByte8>(Nucleus::createSDiv(lhs.value(), rhs.value()));
1575*03ce13f7SAndroid Build Coastguard Worker // }
1576*03ce13f7SAndroid Build Coastguard Worker
1577*03ce13f7SAndroid Build Coastguard Worker // RValue<SByte8> operator%(RValue<SByte8> lhs, RValue<SByte8> rhs)
1578*03ce13f7SAndroid Build Coastguard Worker // {
1579*03ce13f7SAndroid Build Coastguard Worker // return RValue<SByte8>(Nucleus::createSRem(lhs.value(), rhs.value()));
1580*03ce13f7SAndroid Build Coastguard Worker // }
1581*03ce13f7SAndroid Build Coastguard Worker
operator &(RValue<SByte8> lhs,RValue<SByte8> rhs)1582*03ce13f7SAndroid Build Coastguard Worker RValue<SByte8> operator&(RValue<SByte8> lhs, RValue<SByte8> rhs)
1583*03ce13f7SAndroid Build Coastguard Worker {
1584*03ce13f7SAndroid Build Coastguard Worker return RValue<SByte8>(Nucleus::createAnd(lhs.value(), rhs.value()));
1585*03ce13f7SAndroid Build Coastguard Worker }
1586*03ce13f7SAndroid Build Coastguard Worker
operator |(RValue<SByte8> lhs,RValue<SByte8> rhs)1587*03ce13f7SAndroid Build Coastguard Worker RValue<SByte8> operator|(RValue<SByte8> lhs, RValue<SByte8> rhs)
1588*03ce13f7SAndroid Build Coastguard Worker {
1589*03ce13f7SAndroid Build Coastguard Worker return RValue<SByte8>(Nucleus::createOr(lhs.value(), rhs.value()));
1590*03ce13f7SAndroid Build Coastguard Worker }
1591*03ce13f7SAndroid Build Coastguard Worker
operator ^(RValue<SByte8> lhs,RValue<SByte8> rhs)1592*03ce13f7SAndroid Build Coastguard Worker RValue<SByte8> operator^(RValue<SByte8> lhs, RValue<SByte8> rhs)
1593*03ce13f7SAndroid Build Coastguard Worker {
1594*03ce13f7SAndroid Build Coastguard Worker return RValue<SByte8>(Nucleus::createXor(lhs.value(), rhs.value()));
1595*03ce13f7SAndroid Build Coastguard Worker }
1596*03ce13f7SAndroid Build Coastguard Worker
1597*03ce13f7SAndroid Build Coastguard Worker // RValue<SByte8> operator<<(RValue<SByte8> lhs, unsigned char rhs)
1598*03ce13f7SAndroid Build Coastguard Worker // {
1599*03ce13f7SAndroid Build Coastguard Worker // return RValue<SByte8>(Nucleus::createShl(lhs.value(), rhs.value()));
1600*03ce13f7SAndroid Build Coastguard Worker // }
1601*03ce13f7SAndroid Build Coastguard Worker
1602*03ce13f7SAndroid Build Coastguard Worker // RValue<SByte8> operator>>(RValue<SByte8> lhs, unsigned char rhs)
1603*03ce13f7SAndroid Build Coastguard Worker // {
1604*03ce13f7SAndroid Build Coastguard Worker // return RValue<SByte8>(Nucleus::createAShr(lhs.value(), rhs.value()));
1605*03ce13f7SAndroid Build Coastguard Worker // }
1606*03ce13f7SAndroid Build Coastguard Worker
operator +=(SByte8 & lhs,RValue<SByte8> rhs)1607*03ce13f7SAndroid Build Coastguard Worker RValue<SByte8> operator+=(SByte8 &lhs, RValue<SByte8> rhs)
1608*03ce13f7SAndroid Build Coastguard Worker {
1609*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs + rhs;
1610*03ce13f7SAndroid Build Coastguard Worker }
1611*03ce13f7SAndroid Build Coastguard Worker
operator -=(SByte8 & lhs,RValue<SByte8> rhs)1612*03ce13f7SAndroid Build Coastguard Worker RValue<SByte8> operator-=(SByte8 &lhs, RValue<SByte8> rhs)
1613*03ce13f7SAndroid Build Coastguard Worker {
1614*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs - rhs;
1615*03ce13f7SAndroid Build Coastguard Worker }
1616*03ce13f7SAndroid Build Coastguard Worker
1617*03ce13f7SAndroid Build Coastguard Worker // RValue<SByte8> operator*=(SByte8 &lhs, RValue<SByte8> rhs)
1618*03ce13f7SAndroid Build Coastguard Worker // {
1619*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs * rhs;
1620*03ce13f7SAndroid Build Coastguard Worker // }
1621*03ce13f7SAndroid Build Coastguard Worker
1622*03ce13f7SAndroid Build Coastguard Worker // RValue<SByte8> operator/=(SByte8 &lhs, RValue<SByte8> rhs)
1623*03ce13f7SAndroid Build Coastguard Worker // {
1624*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs / rhs;
1625*03ce13f7SAndroid Build Coastguard Worker // }
1626*03ce13f7SAndroid Build Coastguard Worker
1627*03ce13f7SAndroid Build Coastguard Worker // RValue<SByte8> operator%=(SByte8 &lhs, RValue<SByte8> rhs)
1628*03ce13f7SAndroid Build Coastguard Worker // {
1629*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs % rhs;
1630*03ce13f7SAndroid Build Coastguard Worker // }
1631*03ce13f7SAndroid Build Coastguard Worker
operator &=(SByte8 & lhs,RValue<SByte8> rhs)1632*03ce13f7SAndroid Build Coastguard Worker RValue<SByte8> operator&=(SByte8 &lhs, RValue<SByte8> rhs)
1633*03ce13f7SAndroid Build Coastguard Worker {
1634*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs & rhs;
1635*03ce13f7SAndroid Build Coastguard Worker }
1636*03ce13f7SAndroid Build Coastguard Worker
operator |=(SByte8 & lhs,RValue<SByte8> rhs)1637*03ce13f7SAndroid Build Coastguard Worker RValue<SByte8> operator|=(SByte8 &lhs, RValue<SByte8> rhs)
1638*03ce13f7SAndroid Build Coastguard Worker {
1639*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs | rhs;
1640*03ce13f7SAndroid Build Coastguard Worker }
1641*03ce13f7SAndroid Build Coastguard Worker
operator ^=(SByte8 & lhs,RValue<SByte8> rhs)1642*03ce13f7SAndroid Build Coastguard Worker RValue<SByte8> operator^=(SByte8 &lhs, RValue<SByte8> rhs)
1643*03ce13f7SAndroid Build Coastguard Worker {
1644*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs ^ rhs;
1645*03ce13f7SAndroid Build Coastguard Worker }
1646*03ce13f7SAndroid Build Coastguard Worker
1647*03ce13f7SAndroid Build Coastguard Worker // RValue<SByte8> operator<<=(SByte8 &lhs, RValue<SByte8> rhs)
1648*03ce13f7SAndroid Build Coastguard Worker // {
1649*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs << rhs;
1650*03ce13f7SAndroid Build Coastguard Worker // }
1651*03ce13f7SAndroid Build Coastguard Worker
1652*03ce13f7SAndroid Build Coastguard Worker // RValue<SByte8> operator>>=(SByte8 &lhs, RValue<SByte8> rhs)
1653*03ce13f7SAndroid Build Coastguard Worker // {
1654*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs >> rhs;
1655*03ce13f7SAndroid Build Coastguard Worker // }
1656*03ce13f7SAndroid Build Coastguard Worker
1657*03ce13f7SAndroid Build Coastguard Worker // RValue<SByte8> operator+(RValue<SByte8> val)
1658*03ce13f7SAndroid Build Coastguard Worker // {
1659*03ce13f7SAndroid Build Coastguard Worker // return val;
1660*03ce13f7SAndroid Build Coastguard Worker // }
1661*03ce13f7SAndroid Build Coastguard Worker
1662*03ce13f7SAndroid Build Coastguard Worker // RValue<SByte8> operator-(RValue<SByte8> val)
1663*03ce13f7SAndroid Build Coastguard Worker // {
1664*03ce13f7SAndroid Build Coastguard Worker // return RValue<SByte8>(Nucleus::createNeg(val.value()));
1665*03ce13f7SAndroid Build Coastguard Worker // }
1666*03ce13f7SAndroid Build Coastguard Worker
operator ~(RValue<SByte8> val)1667*03ce13f7SAndroid Build Coastguard Worker RValue<SByte8> operator~(RValue<SByte8> val)
1668*03ce13f7SAndroid Build Coastguard Worker {
1669*03ce13f7SAndroid Build Coastguard Worker return RValue<SByte8>(Nucleus::createNot(val.value()));
1670*03ce13f7SAndroid Build Coastguard Worker }
1671*03ce13f7SAndroid Build Coastguard Worker
UnpackLow(RValue<SByte8> x,RValue<SByte8> y)1672*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> UnpackLow(RValue<SByte8> x, RValue<SByte8> y)
1673*03ce13f7SAndroid Build Coastguard Worker {
1674*03ce13f7SAndroid Build Coastguard Worker // TODO(b/148379603): Optimize narrowing swizzle.
1675*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = { 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23 }; // Real type is v16i8
1676*03ce13f7SAndroid Build Coastguard Worker return As<Short4>(Nucleus::createShuffleVector(x.value(), y.value(), shuffle));
1677*03ce13f7SAndroid Build Coastguard Worker }
1678*03ce13f7SAndroid Build Coastguard Worker
UnpackHigh(RValue<SByte8> x,RValue<SByte8> y)1679*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> UnpackHigh(RValue<SByte8> x, RValue<SByte8> y)
1680*03ce13f7SAndroid Build Coastguard Worker {
1681*03ce13f7SAndroid Build Coastguard Worker // TODO(b/148379603): Optimize narrowing swizzle.
1682*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = { 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23 }; // Real type is v16i8
1683*03ce13f7SAndroid Build Coastguard Worker auto lowHigh = RValue<Byte16>(Nucleus::createShuffleVector(x.value(), y.value(), shuffle));
1684*03ce13f7SAndroid Build Coastguard Worker return As<Short4>(Swizzle(As<Int4>(lowHigh), 0x2323));
1685*03ce13f7SAndroid Build Coastguard Worker }
1686*03ce13f7SAndroid Build Coastguard Worker
Byte16(RValue<Byte16> rhs)1687*03ce13f7SAndroid Build Coastguard Worker Byte16::Byte16(RValue<Byte16> rhs)
1688*03ce13f7SAndroid Build Coastguard Worker {
1689*03ce13f7SAndroid Build Coastguard Worker store(rhs);
1690*03ce13f7SAndroid Build Coastguard Worker }
1691*03ce13f7SAndroid Build Coastguard Worker
Byte16(const Byte16 & rhs)1692*03ce13f7SAndroid Build Coastguard Worker Byte16::Byte16(const Byte16 &rhs)
1693*03ce13f7SAndroid Build Coastguard Worker {
1694*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
1695*03ce13f7SAndroid Build Coastguard Worker }
1696*03ce13f7SAndroid Build Coastguard Worker
Byte16(const Reference<Byte16> & rhs)1697*03ce13f7SAndroid Build Coastguard Worker Byte16::Byte16(const Reference<Byte16> &rhs)
1698*03ce13f7SAndroid Build Coastguard Worker {
1699*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
1700*03ce13f7SAndroid Build Coastguard Worker }
1701*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<Byte16> rhs)1702*03ce13f7SAndroid Build Coastguard Worker RValue<Byte16> Byte16::operator=(RValue<Byte16> rhs)
1703*03ce13f7SAndroid Build Coastguard Worker {
1704*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
1705*03ce13f7SAndroid Build Coastguard Worker }
1706*03ce13f7SAndroid Build Coastguard Worker
operator =(const Byte16 & rhs)1707*03ce13f7SAndroid Build Coastguard Worker RValue<Byte16> Byte16::operator=(const Byte16 &rhs)
1708*03ce13f7SAndroid Build Coastguard Worker {
1709*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
1710*03ce13f7SAndroid Build Coastguard Worker }
1711*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<Byte16> & rhs)1712*03ce13f7SAndroid Build Coastguard Worker RValue<Byte16> Byte16::operator=(const Reference<Byte16> &rhs)
1713*03ce13f7SAndroid Build Coastguard Worker {
1714*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
1715*03ce13f7SAndroid Build Coastguard Worker }
1716*03ce13f7SAndroid Build Coastguard Worker
Swizzle(RValue<Byte16> x,uint64_t select)1717*03ce13f7SAndroid Build Coastguard Worker RValue<Byte16> Swizzle(RValue<Byte16> x, uint64_t select)
1718*03ce13f7SAndroid Build Coastguard Worker {
1719*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = {
1720*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 60) & 0x0F),
1721*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 56) & 0x0F),
1722*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 52) & 0x0F),
1723*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 48) & 0x0F),
1724*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 44) & 0x0F),
1725*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 40) & 0x0F),
1726*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 36) & 0x0F),
1727*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 32) & 0x0F),
1728*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 28) & 0x0F),
1729*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 24) & 0x0F),
1730*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 20) & 0x0F),
1731*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 16) & 0x0F),
1732*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 12) & 0x0F),
1733*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 8) & 0x0F),
1734*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 4) & 0x0F),
1735*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 0) & 0x0F),
1736*03ce13f7SAndroid Build Coastguard Worker };
1737*03ce13f7SAndroid Build Coastguard Worker
1738*03ce13f7SAndroid Build Coastguard Worker return As<Byte16>(Nucleus::createShuffleVector(x.value(), x.value(), shuffle));
1739*03ce13f7SAndroid Build Coastguard Worker }
1740*03ce13f7SAndroid Build Coastguard Worker
Short2(RValue<Short4> cast)1741*03ce13f7SAndroid Build Coastguard Worker Short2::Short2(RValue<Short4> cast)
1742*03ce13f7SAndroid Build Coastguard Worker {
1743*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createBitCast(cast.value(), type()));
1744*03ce13f7SAndroid Build Coastguard Worker }
1745*03ce13f7SAndroid Build Coastguard Worker
UShort2(RValue<UShort4> cast)1746*03ce13f7SAndroid Build Coastguard Worker UShort2::UShort2(RValue<UShort4> cast)
1747*03ce13f7SAndroid Build Coastguard Worker {
1748*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createBitCast(cast.value(), type()));
1749*03ce13f7SAndroid Build Coastguard Worker }
1750*03ce13f7SAndroid Build Coastguard Worker
Short4(RValue<Int> cast)1751*03ce13f7SAndroid Build Coastguard Worker Short4::Short4(RValue<Int> cast)
1752*03ce13f7SAndroid Build Coastguard Worker {
1753*03ce13f7SAndroid Build Coastguard Worker Value *vector = loadValue();
1754*03ce13f7SAndroid Build Coastguard Worker Value *element = Nucleus::createTrunc(cast.value(), Short::type());
1755*03ce13f7SAndroid Build Coastguard Worker Value *insert = Nucleus::createInsertElement(vector, element, 0);
1756*03ce13f7SAndroid Build Coastguard Worker Value *swizzle = Swizzle(RValue<Short4>(insert), 0x0000).value();
1757*03ce13f7SAndroid Build Coastguard Worker
1758*03ce13f7SAndroid Build Coastguard Worker storeValue(swizzle);
1759*03ce13f7SAndroid Build Coastguard Worker }
1760*03ce13f7SAndroid Build Coastguard Worker
Short4(RValue<UInt4> cast)1761*03ce13f7SAndroid Build Coastguard Worker Short4::Short4(RValue<UInt4> cast)
1762*03ce13f7SAndroid Build Coastguard Worker : Short4(As<Int4>(cast))
1763*03ce13f7SAndroid Build Coastguard Worker {
1764*03ce13f7SAndroid Build Coastguard Worker }
1765*03ce13f7SAndroid Build Coastguard Worker
1766*03ce13f7SAndroid Build Coastguard Worker // Short4::Short4(RValue<Float> cast)
1767*03ce13f7SAndroid Build Coastguard Worker // {
1768*03ce13f7SAndroid Build Coastguard Worker // }
1769*03ce13f7SAndroid Build Coastguard Worker
Short4(short xyzw)1770*03ce13f7SAndroid Build Coastguard Worker Short4::Short4(short xyzw)
1771*03ce13f7SAndroid Build Coastguard Worker {
1772*03ce13f7SAndroid Build Coastguard Worker std::vector<int64_t> constantVector = { xyzw };
1773*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantVector(constantVector, type()));
1774*03ce13f7SAndroid Build Coastguard Worker }
1775*03ce13f7SAndroid Build Coastguard Worker
Short4(short x,short y,short z,short w)1776*03ce13f7SAndroid Build Coastguard Worker Short4::Short4(short x, short y, short z, short w)
1777*03ce13f7SAndroid Build Coastguard Worker {
1778*03ce13f7SAndroid Build Coastguard Worker std::vector<int64_t> constantVector = { x, y, z, w };
1779*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantVector(constantVector, type()));
1780*03ce13f7SAndroid Build Coastguard Worker }
1781*03ce13f7SAndroid Build Coastguard Worker
Short4(RValue<Short4> rhs)1782*03ce13f7SAndroid Build Coastguard Worker Short4::Short4(RValue<Short4> rhs)
1783*03ce13f7SAndroid Build Coastguard Worker {
1784*03ce13f7SAndroid Build Coastguard Worker store(rhs);
1785*03ce13f7SAndroid Build Coastguard Worker }
1786*03ce13f7SAndroid Build Coastguard Worker
Short4(const Short4 & rhs)1787*03ce13f7SAndroid Build Coastguard Worker Short4::Short4(const Short4 &rhs)
1788*03ce13f7SAndroid Build Coastguard Worker {
1789*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
1790*03ce13f7SAndroid Build Coastguard Worker }
1791*03ce13f7SAndroid Build Coastguard Worker
Short4(const Reference<Short4> & rhs)1792*03ce13f7SAndroid Build Coastguard Worker Short4::Short4(const Reference<Short4> &rhs)
1793*03ce13f7SAndroid Build Coastguard Worker {
1794*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
1795*03ce13f7SAndroid Build Coastguard Worker }
1796*03ce13f7SAndroid Build Coastguard Worker
Short4(RValue<UShort4> rhs)1797*03ce13f7SAndroid Build Coastguard Worker Short4::Short4(RValue<UShort4> rhs)
1798*03ce13f7SAndroid Build Coastguard Worker {
1799*03ce13f7SAndroid Build Coastguard Worker storeValue(rhs.value());
1800*03ce13f7SAndroid Build Coastguard Worker }
1801*03ce13f7SAndroid Build Coastguard Worker
Short4(const UShort4 & rhs)1802*03ce13f7SAndroid Build Coastguard Worker Short4::Short4(const UShort4 &rhs)
1803*03ce13f7SAndroid Build Coastguard Worker {
1804*03ce13f7SAndroid Build Coastguard Worker storeValue(rhs.loadValue());
1805*03ce13f7SAndroid Build Coastguard Worker }
1806*03ce13f7SAndroid Build Coastguard Worker
Short4(const Reference<UShort4> & rhs)1807*03ce13f7SAndroid Build Coastguard Worker Short4::Short4(const Reference<UShort4> &rhs)
1808*03ce13f7SAndroid Build Coastguard Worker {
1809*03ce13f7SAndroid Build Coastguard Worker storeValue(rhs.loadValue());
1810*03ce13f7SAndroid Build Coastguard Worker }
1811*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<Short4> rhs)1812*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> Short4::operator=(RValue<Short4> rhs)
1813*03ce13f7SAndroid Build Coastguard Worker {
1814*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
1815*03ce13f7SAndroid Build Coastguard Worker }
1816*03ce13f7SAndroid Build Coastguard Worker
operator =(const Short4 & rhs)1817*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> Short4::operator=(const Short4 &rhs)
1818*03ce13f7SAndroid Build Coastguard Worker {
1819*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
1820*03ce13f7SAndroid Build Coastguard Worker }
1821*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<Short4> & rhs)1822*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> Short4::operator=(const Reference<Short4> &rhs)
1823*03ce13f7SAndroid Build Coastguard Worker {
1824*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
1825*03ce13f7SAndroid Build Coastguard Worker }
1826*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<UShort4> rhs)1827*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> Short4::operator=(RValue<UShort4> rhs)
1828*03ce13f7SAndroid Build Coastguard Worker {
1829*03ce13f7SAndroid Build Coastguard Worker return RValue<Short4>(storeValue(rhs.value()));
1830*03ce13f7SAndroid Build Coastguard Worker }
1831*03ce13f7SAndroid Build Coastguard Worker
operator =(const UShort4 & rhs)1832*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> Short4::operator=(const UShort4 &rhs)
1833*03ce13f7SAndroid Build Coastguard Worker {
1834*03ce13f7SAndroid Build Coastguard Worker return RValue<Short4>(storeValue(rhs.loadValue()));
1835*03ce13f7SAndroid Build Coastguard Worker }
1836*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<UShort4> & rhs)1837*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> Short4::operator=(const Reference<UShort4> &rhs)
1838*03ce13f7SAndroid Build Coastguard Worker {
1839*03ce13f7SAndroid Build Coastguard Worker return RValue<Short4>(storeValue(rhs.loadValue()));
1840*03ce13f7SAndroid Build Coastguard Worker }
1841*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<Short4> lhs,RValue<Short4> rhs)1842*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> operator+(RValue<Short4> lhs, RValue<Short4> rhs)
1843*03ce13f7SAndroid Build Coastguard Worker {
1844*03ce13f7SAndroid Build Coastguard Worker return RValue<Short4>(Nucleus::createAdd(lhs.value(), rhs.value()));
1845*03ce13f7SAndroid Build Coastguard Worker }
1846*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<Short4> lhs,RValue<Short4> rhs)1847*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> operator-(RValue<Short4> lhs, RValue<Short4> rhs)
1848*03ce13f7SAndroid Build Coastguard Worker {
1849*03ce13f7SAndroid Build Coastguard Worker return RValue<Short4>(Nucleus::createSub(lhs.value(), rhs.value()));
1850*03ce13f7SAndroid Build Coastguard Worker }
1851*03ce13f7SAndroid Build Coastguard Worker
operator *(RValue<Short4> lhs,RValue<Short4> rhs)1852*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> operator*(RValue<Short4> lhs, RValue<Short4> rhs)
1853*03ce13f7SAndroid Build Coastguard Worker {
1854*03ce13f7SAndroid Build Coastguard Worker return RValue<Short4>(Nucleus::createMul(lhs.value(), rhs.value()));
1855*03ce13f7SAndroid Build Coastguard Worker }
1856*03ce13f7SAndroid Build Coastguard Worker
1857*03ce13f7SAndroid Build Coastguard Worker // RValue<Short4> operator/(RValue<Short4> lhs, RValue<Short4> rhs)
1858*03ce13f7SAndroid Build Coastguard Worker // {
1859*03ce13f7SAndroid Build Coastguard Worker // return RValue<Short4>(Nucleus::createSDiv(lhs.value(), rhs.value()));
1860*03ce13f7SAndroid Build Coastguard Worker // }
1861*03ce13f7SAndroid Build Coastguard Worker
1862*03ce13f7SAndroid Build Coastguard Worker // RValue<Short4> operator%(RValue<Short4> lhs, RValue<Short4> rhs)
1863*03ce13f7SAndroid Build Coastguard Worker // {
1864*03ce13f7SAndroid Build Coastguard Worker // return RValue<Short4>(Nucleus::createSRem(lhs.value(), rhs.value()));
1865*03ce13f7SAndroid Build Coastguard Worker // }
1866*03ce13f7SAndroid Build Coastguard Worker
operator &(RValue<Short4> lhs,RValue<Short4> rhs)1867*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> operator&(RValue<Short4> lhs, RValue<Short4> rhs)
1868*03ce13f7SAndroid Build Coastguard Worker {
1869*03ce13f7SAndroid Build Coastguard Worker return RValue<Short4>(Nucleus::createAnd(lhs.value(), rhs.value()));
1870*03ce13f7SAndroid Build Coastguard Worker }
1871*03ce13f7SAndroid Build Coastguard Worker
operator |(RValue<Short4> lhs,RValue<Short4> rhs)1872*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> operator|(RValue<Short4> lhs, RValue<Short4> rhs)
1873*03ce13f7SAndroid Build Coastguard Worker {
1874*03ce13f7SAndroid Build Coastguard Worker return RValue<Short4>(Nucleus::createOr(lhs.value(), rhs.value()));
1875*03ce13f7SAndroid Build Coastguard Worker }
1876*03ce13f7SAndroid Build Coastguard Worker
operator ^(RValue<Short4> lhs,RValue<Short4> rhs)1877*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> operator^(RValue<Short4> lhs, RValue<Short4> rhs)
1878*03ce13f7SAndroid Build Coastguard Worker {
1879*03ce13f7SAndroid Build Coastguard Worker return RValue<Short4>(Nucleus::createXor(lhs.value(), rhs.value()));
1880*03ce13f7SAndroid Build Coastguard Worker }
1881*03ce13f7SAndroid Build Coastguard Worker
operator +=(Short4 & lhs,RValue<Short4> rhs)1882*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> operator+=(Short4 &lhs, RValue<Short4> rhs)
1883*03ce13f7SAndroid Build Coastguard Worker {
1884*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs + rhs;
1885*03ce13f7SAndroid Build Coastguard Worker }
1886*03ce13f7SAndroid Build Coastguard Worker
operator -=(Short4 & lhs,RValue<Short4> rhs)1887*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> operator-=(Short4 &lhs, RValue<Short4> rhs)
1888*03ce13f7SAndroid Build Coastguard Worker {
1889*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs - rhs;
1890*03ce13f7SAndroid Build Coastguard Worker }
1891*03ce13f7SAndroid Build Coastguard Worker
operator *=(Short4 & lhs,RValue<Short4> rhs)1892*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> operator*=(Short4 &lhs, RValue<Short4> rhs)
1893*03ce13f7SAndroid Build Coastguard Worker {
1894*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs * rhs;
1895*03ce13f7SAndroid Build Coastguard Worker }
1896*03ce13f7SAndroid Build Coastguard Worker
1897*03ce13f7SAndroid Build Coastguard Worker // RValue<Short4> operator/=(Short4 &lhs, RValue<Short4> rhs)
1898*03ce13f7SAndroid Build Coastguard Worker // {
1899*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs / rhs;
1900*03ce13f7SAndroid Build Coastguard Worker // }
1901*03ce13f7SAndroid Build Coastguard Worker
1902*03ce13f7SAndroid Build Coastguard Worker // RValue<Short4> operator%=(Short4 &lhs, RValue<Short4> rhs)
1903*03ce13f7SAndroid Build Coastguard Worker // {
1904*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs % rhs;
1905*03ce13f7SAndroid Build Coastguard Worker // }
1906*03ce13f7SAndroid Build Coastguard Worker
operator &=(Short4 & lhs,RValue<Short4> rhs)1907*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> operator&=(Short4 &lhs, RValue<Short4> rhs)
1908*03ce13f7SAndroid Build Coastguard Worker {
1909*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs & rhs;
1910*03ce13f7SAndroid Build Coastguard Worker }
1911*03ce13f7SAndroid Build Coastguard Worker
operator |=(Short4 & lhs,RValue<Short4> rhs)1912*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> operator|=(Short4 &lhs, RValue<Short4> rhs)
1913*03ce13f7SAndroid Build Coastguard Worker {
1914*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs | rhs;
1915*03ce13f7SAndroid Build Coastguard Worker }
1916*03ce13f7SAndroid Build Coastguard Worker
operator ^=(Short4 & lhs,RValue<Short4> rhs)1917*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> operator^=(Short4 &lhs, RValue<Short4> rhs)
1918*03ce13f7SAndroid Build Coastguard Worker {
1919*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs ^ rhs;
1920*03ce13f7SAndroid Build Coastguard Worker }
1921*03ce13f7SAndroid Build Coastguard Worker
operator <<=(Short4 & lhs,unsigned char rhs)1922*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> operator<<=(Short4 &lhs, unsigned char rhs)
1923*03ce13f7SAndroid Build Coastguard Worker {
1924*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs << rhs;
1925*03ce13f7SAndroid Build Coastguard Worker }
1926*03ce13f7SAndroid Build Coastguard Worker
operator >>=(Short4 & lhs,unsigned char rhs)1927*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> operator>>=(Short4 &lhs, unsigned char rhs)
1928*03ce13f7SAndroid Build Coastguard Worker {
1929*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs >> rhs;
1930*03ce13f7SAndroid Build Coastguard Worker }
1931*03ce13f7SAndroid Build Coastguard Worker
1932*03ce13f7SAndroid Build Coastguard Worker // RValue<Short4> operator+(RValue<Short4> val)
1933*03ce13f7SAndroid Build Coastguard Worker // {
1934*03ce13f7SAndroid Build Coastguard Worker // return val;
1935*03ce13f7SAndroid Build Coastguard Worker // }
1936*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<Short4> val)1937*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> operator-(RValue<Short4> val)
1938*03ce13f7SAndroid Build Coastguard Worker {
1939*03ce13f7SAndroid Build Coastguard Worker return RValue<Short4>(Nucleus::createNeg(val.value()));
1940*03ce13f7SAndroid Build Coastguard Worker }
1941*03ce13f7SAndroid Build Coastguard Worker
operator ~(RValue<Short4> val)1942*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> operator~(RValue<Short4> val)
1943*03ce13f7SAndroid Build Coastguard Worker {
1944*03ce13f7SAndroid Build Coastguard Worker return RValue<Short4>(Nucleus::createNot(val.value()));
1945*03ce13f7SAndroid Build Coastguard Worker }
1946*03ce13f7SAndroid Build Coastguard Worker
RoundShort4(RValue<Float4> cast)1947*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> RoundShort4(RValue<Float4> cast)
1948*03ce13f7SAndroid Build Coastguard Worker {
1949*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> int4 = RoundInt(cast);
1950*03ce13f7SAndroid Build Coastguard Worker return As<Short4>(PackSigned(int4, int4));
1951*03ce13f7SAndroid Build Coastguard Worker }
1952*03ce13f7SAndroid Build Coastguard Worker
UnpackLow(RValue<Short4> x,RValue<Short4> y)1953*03ce13f7SAndroid Build Coastguard Worker RValue<Int2> UnpackLow(RValue<Short4> x, RValue<Short4> y)
1954*03ce13f7SAndroid Build Coastguard Worker {
1955*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = { 0, 8, 1, 9, 2, 10, 3, 11 }; // Real type is v8i16
1956*03ce13f7SAndroid Build Coastguard Worker return As<Int2>(Nucleus::createShuffleVector(x.value(), y.value(), shuffle));
1957*03ce13f7SAndroid Build Coastguard Worker }
1958*03ce13f7SAndroid Build Coastguard Worker
UnpackHigh(RValue<Short4> x,RValue<Short4> y)1959*03ce13f7SAndroid Build Coastguard Worker RValue<Int2> UnpackHigh(RValue<Short4> x, RValue<Short4> y)
1960*03ce13f7SAndroid Build Coastguard Worker {
1961*03ce13f7SAndroid Build Coastguard Worker // TODO(b/148379603): Optimize narrowing swizzle.
1962*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = { 0, 8, 1, 9, 2, 10, 3, 11 }; // Real type is v8i16
1963*03ce13f7SAndroid Build Coastguard Worker auto lowHigh = RValue<Short8>(Nucleus::createShuffleVector(x.value(), y.value(), shuffle));
1964*03ce13f7SAndroid Build Coastguard Worker return As<Int2>(Swizzle(As<Int4>(lowHigh), 0x2323));
1965*03ce13f7SAndroid Build Coastguard Worker }
1966*03ce13f7SAndroid Build Coastguard Worker
Swizzle(RValue<Short4> x,uint16_t select)1967*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> Swizzle(RValue<Short4> x, uint16_t select)
1968*03ce13f7SAndroid Build Coastguard Worker {
1969*03ce13f7SAndroid Build Coastguard Worker // Real type is v8i16
1970*03ce13f7SAndroid Build Coastguard Worker // TODO(b/148379603): Optimize narrowing swizzle.
1971*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = {
1972*03ce13f7SAndroid Build Coastguard Worker (select >> 12) & 0x03,
1973*03ce13f7SAndroid Build Coastguard Worker (select >> 8) & 0x03,
1974*03ce13f7SAndroid Build Coastguard Worker (select >> 4) & 0x03,
1975*03ce13f7SAndroid Build Coastguard Worker (select >> 0) & 0x03,
1976*03ce13f7SAndroid Build Coastguard Worker (select >> 12) & 0x03,
1977*03ce13f7SAndroid Build Coastguard Worker (select >> 8) & 0x03,
1978*03ce13f7SAndroid Build Coastguard Worker (select >> 4) & 0x03,
1979*03ce13f7SAndroid Build Coastguard Worker (select >> 0) & 0x03,
1980*03ce13f7SAndroid Build Coastguard Worker };
1981*03ce13f7SAndroid Build Coastguard Worker
1982*03ce13f7SAndroid Build Coastguard Worker return As<Short4>(Nucleus::createShuffleVector(x.value(), x.value(), shuffle));
1983*03ce13f7SAndroid Build Coastguard Worker }
1984*03ce13f7SAndroid Build Coastguard Worker
Insert(RValue<Short4> val,RValue<Short> element,int i)1985*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> Insert(RValue<Short4> val, RValue<Short> element, int i)
1986*03ce13f7SAndroid Build Coastguard Worker {
1987*03ce13f7SAndroid Build Coastguard Worker return RValue<Short4>(Nucleus::createInsertElement(val.value(), element.value(), i));
1988*03ce13f7SAndroid Build Coastguard Worker }
1989*03ce13f7SAndroid Build Coastguard Worker
Extract(RValue<Short4> val,int i)1990*03ce13f7SAndroid Build Coastguard Worker RValue<Short> Extract(RValue<Short4> val, int i)
1991*03ce13f7SAndroid Build Coastguard Worker {
1992*03ce13f7SAndroid Build Coastguard Worker return RValue<Short>(Nucleus::createExtractElement(val.value(), Short::type(), i));
1993*03ce13f7SAndroid Build Coastguard Worker }
1994*03ce13f7SAndroid Build Coastguard Worker
UShort4(RValue<UInt4> cast)1995*03ce13f7SAndroid Build Coastguard Worker UShort4::UShort4(RValue<UInt4> cast)
1996*03ce13f7SAndroid Build Coastguard Worker : UShort4(As<Int4>(cast))
1997*03ce13f7SAndroid Build Coastguard Worker {
1998*03ce13f7SAndroid Build Coastguard Worker }
1999*03ce13f7SAndroid Build Coastguard Worker
UShort4(RValue<Int4> cast)2000*03ce13f7SAndroid Build Coastguard Worker UShort4::UShort4(RValue<Int4> cast)
2001*03ce13f7SAndroid Build Coastguard Worker {
2002*03ce13f7SAndroid Build Coastguard Worker *this = Short4(cast);
2003*03ce13f7SAndroid Build Coastguard Worker }
2004*03ce13f7SAndroid Build Coastguard Worker
UShort4(unsigned short xyzw)2005*03ce13f7SAndroid Build Coastguard Worker UShort4::UShort4(unsigned short xyzw)
2006*03ce13f7SAndroid Build Coastguard Worker {
2007*03ce13f7SAndroid Build Coastguard Worker std::vector<int64_t> constantVector = { xyzw };
2008*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantVector(constantVector, type()));
2009*03ce13f7SAndroid Build Coastguard Worker }
2010*03ce13f7SAndroid Build Coastguard Worker
UShort4(unsigned short x,unsigned short y,unsigned short z,unsigned short w)2011*03ce13f7SAndroid Build Coastguard Worker UShort4::UShort4(unsigned short x, unsigned short y, unsigned short z, unsigned short w)
2012*03ce13f7SAndroid Build Coastguard Worker {
2013*03ce13f7SAndroid Build Coastguard Worker std::vector<int64_t> constantVector = { x, y, z, w };
2014*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantVector(constantVector, type()));
2015*03ce13f7SAndroid Build Coastguard Worker }
2016*03ce13f7SAndroid Build Coastguard Worker
UShort4(RValue<UShort4> rhs)2017*03ce13f7SAndroid Build Coastguard Worker UShort4::UShort4(RValue<UShort4> rhs)
2018*03ce13f7SAndroid Build Coastguard Worker {
2019*03ce13f7SAndroid Build Coastguard Worker store(rhs);
2020*03ce13f7SAndroid Build Coastguard Worker }
2021*03ce13f7SAndroid Build Coastguard Worker
UShort4(const UShort4 & rhs)2022*03ce13f7SAndroid Build Coastguard Worker UShort4::UShort4(const UShort4 &rhs)
2023*03ce13f7SAndroid Build Coastguard Worker {
2024*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
2025*03ce13f7SAndroid Build Coastguard Worker }
2026*03ce13f7SAndroid Build Coastguard Worker
UShort4(const Reference<UShort4> & rhs)2027*03ce13f7SAndroid Build Coastguard Worker UShort4::UShort4(const Reference<UShort4> &rhs)
2028*03ce13f7SAndroid Build Coastguard Worker {
2029*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
2030*03ce13f7SAndroid Build Coastguard Worker }
2031*03ce13f7SAndroid Build Coastguard Worker
UShort4(RValue<Short4> rhs)2032*03ce13f7SAndroid Build Coastguard Worker UShort4::UShort4(RValue<Short4> rhs)
2033*03ce13f7SAndroid Build Coastguard Worker {
2034*03ce13f7SAndroid Build Coastguard Worker storeValue(rhs.value());
2035*03ce13f7SAndroid Build Coastguard Worker }
2036*03ce13f7SAndroid Build Coastguard Worker
UShort4(const Short4 & rhs)2037*03ce13f7SAndroid Build Coastguard Worker UShort4::UShort4(const Short4 &rhs)
2038*03ce13f7SAndroid Build Coastguard Worker {
2039*03ce13f7SAndroid Build Coastguard Worker storeValue(rhs.loadValue());
2040*03ce13f7SAndroid Build Coastguard Worker }
2041*03ce13f7SAndroid Build Coastguard Worker
UShort4(const Reference<Short4> & rhs)2042*03ce13f7SAndroid Build Coastguard Worker UShort4::UShort4(const Reference<Short4> &rhs)
2043*03ce13f7SAndroid Build Coastguard Worker {
2044*03ce13f7SAndroid Build Coastguard Worker storeValue(rhs.loadValue());
2045*03ce13f7SAndroid Build Coastguard Worker }
2046*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<UShort4> rhs)2047*03ce13f7SAndroid Build Coastguard Worker RValue<UShort4> UShort4::operator=(RValue<UShort4> rhs)
2048*03ce13f7SAndroid Build Coastguard Worker {
2049*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
2050*03ce13f7SAndroid Build Coastguard Worker }
2051*03ce13f7SAndroid Build Coastguard Worker
operator =(const UShort4 & rhs)2052*03ce13f7SAndroid Build Coastguard Worker RValue<UShort4> UShort4::operator=(const UShort4 &rhs)
2053*03ce13f7SAndroid Build Coastguard Worker {
2054*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
2055*03ce13f7SAndroid Build Coastguard Worker }
2056*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<UShort4> & rhs)2057*03ce13f7SAndroid Build Coastguard Worker RValue<UShort4> UShort4::operator=(const Reference<UShort4> &rhs)
2058*03ce13f7SAndroid Build Coastguard Worker {
2059*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
2060*03ce13f7SAndroid Build Coastguard Worker }
2061*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<Short4> rhs)2062*03ce13f7SAndroid Build Coastguard Worker RValue<UShort4> UShort4::operator=(RValue<Short4> rhs)
2063*03ce13f7SAndroid Build Coastguard Worker {
2064*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort4>(storeValue(rhs.value()));
2065*03ce13f7SAndroid Build Coastguard Worker }
2066*03ce13f7SAndroid Build Coastguard Worker
operator =(const Short4 & rhs)2067*03ce13f7SAndroid Build Coastguard Worker RValue<UShort4> UShort4::operator=(const Short4 &rhs)
2068*03ce13f7SAndroid Build Coastguard Worker {
2069*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort4>(storeValue(rhs.loadValue()));
2070*03ce13f7SAndroid Build Coastguard Worker }
2071*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<Short4> & rhs)2072*03ce13f7SAndroid Build Coastguard Worker RValue<UShort4> UShort4::operator=(const Reference<Short4> &rhs)
2073*03ce13f7SAndroid Build Coastguard Worker {
2074*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort4>(storeValue(rhs.loadValue()));
2075*03ce13f7SAndroid Build Coastguard Worker }
2076*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<UShort4> lhs,RValue<UShort4> rhs)2077*03ce13f7SAndroid Build Coastguard Worker RValue<UShort4> operator+(RValue<UShort4> lhs, RValue<UShort4> rhs)
2078*03ce13f7SAndroid Build Coastguard Worker {
2079*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort4>(Nucleus::createAdd(lhs.value(), rhs.value()));
2080*03ce13f7SAndroid Build Coastguard Worker }
2081*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<UShort4> lhs,RValue<UShort4> rhs)2082*03ce13f7SAndroid Build Coastguard Worker RValue<UShort4> operator-(RValue<UShort4> lhs, RValue<UShort4> rhs)
2083*03ce13f7SAndroid Build Coastguard Worker {
2084*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort4>(Nucleus::createSub(lhs.value(), rhs.value()));
2085*03ce13f7SAndroid Build Coastguard Worker }
2086*03ce13f7SAndroid Build Coastguard Worker
operator *(RValue<UShort4> lhs,RValue<UShort4> rhs)2087*03ce13f7SAndroid Build Coastguard Worker RValue<UShort4> operator*(RValue<UShort4> lhs, RValue<UShort4> rhs)
2088*03ce13f7SAndroid Build Coastguard Worker {
2089*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort4>(Nucleus::createMul(lhs.value(), rhs.value()));
2090*03ce13f7SAndroid Build Coastguard Worker }
2091*03ce13f7SAndroid Build Coastguard Worker
operator &(RValue<UShort4> lhs,RValue<UShort4> rhs)2092*03ce13f7SAndroid Build Coastguard Worker RValue<UShort4> operator&(RValue<UShort4> lhs, RValue<UShort4> rhs)
2093*03ce13f7SAndroid Build Coastguard Worker {
2094*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort4>(Nucleus::createAnd(lhs.value(), rhs.value()));
2095*03ce13f7SAndroid Build Coastguard Worker }
2096*03ce13f7SAndroid Build Coastguard Worker
operator |(RValue<UShort4> lhs,RValue<UShort4> rhs)2097*03ce13f7SAndroid Build Coastguard Worker RValue<UShort4> operator|(RValue<UShort4> lhs, RValue<UShort4> rhs)
2098*03ce13f7SAndroid Build Coastguard Worker {
2099*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort4>(Nucleus::createOr(lhs.value(), rhs.value()));
2100*03ce13f7SAndroid Build Coastguard Worker }
2101*03ce13f7SAndroid Build Coastguard Worker
operator ^(RValue<UShort4> lhs,RValue<UShort4> rhs)2102*03ce13f7SAndroid Build Coastguard Worker RValue<UShort4> operator^(RValue<UShort4> lhs, RValue<UShort4> rhs)
2103*03ce13f7SAndroid Build Coastguard Worker {
2104*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort4>(Nucleus::createXor(lhs.value(), rhs.value()));
2105*03ce13f7SAndroid Build Coastguard Worker }
2106*03ce13f7SAndroid Build Coastguard Worker
operator <<=(UShort4 & lhs,unsigned char rhs)2107*03ce13f7SAndroid Build Coastguard Worker RValue<UShort4> operator<<=(UShort4 &lhs, unsigned char rhs)
2108*03ce13f7SAndroid Build Coastguard Worker {
2109*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs << rhs;
2110*03ce13f7SAndroid Build Coastguard Worker }
2111*03ce13f7SAndroid Build Coastguard Worker
operator >>=(UShort4 & lhs,unsigned char rhs)2112*03ce13f7SAndroid Build Coastguard Worker RValue<UShort4> operator>>=(UShort4 &lhs, unsigned char rhs)
2113*03ce13f7SAndroid Build Coastguard Worker {
2114*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs >> rhs;
2115*03ce13f7SAndroid Build Coastguard Worker }
2116*03ce13f7SAndroid Build Coastguard Worker
operator ~(RValue<UShort4> val)2117*03ce13f7SAndroid Build Coastguard Worker RValue<UShort4> operator~(RValue<UShort4> val)
2118*03ce13f7SAndroid Build Coastguard Worker {
2119*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort4>(Nucleus::createNot(val.value()));
2120*03ce13f7SAndroid Build Coastguard Worker }
2121*03ce13f7SAndroid Build Coastguard Worker
Insert(RValue<UShort4> val,RValue<UShort> element,int i)2122*03ce13f7SAndroid Build Coastguard Worker RValue<UShort4> Insert(RValue<UShort4> val, RValue<UShort> element, int i)
2123*03ce13f7SAndroid Build Coastguard Worker {
2124*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort4>(Nucleus::createInsertElement(val.value(), element.value(), i));
2125*03ce13f7SAndroid Build Coastguard Worker }
2126*03ce13f7SAndroid Build Coastguard Worker
Short8(short c)2127*03ce13f7SAndroid Build Coastguard Worker Short8::Short8(short c)
2128*03ce13f7SAndroid Build Coastguard Worker {
2129*03ce13f7SAndroid Build Coastguard Worker std::vector<int64_t> constantVector = { c };
2130*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantVector(constantVector, type()));
2131*03ce13f7SAndroid Build Coastguard Worker }
2132*03ce13f7SAndroid Build Coastguard Worker
Short8(short c0,short c1,short c2,short c3,short c4,short c5,short c6,short c7)2133*03ce13f7SAndroid Build Coastguard Worker Short8::Short8(short c0, short c1, short c2, short c3, short c4, short c5, short c6, short c7)
2134*03ce13f7SAndroid Build Coastguard Worker {
2135*03ce13f7SAndroid Build Coastguard Worker std::vector<int64_t> constantVector = { c0, c1, c2, c3, c4, c5, c6, c7 };
2136*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantVector(constantVector, type()));
2137*03ce13f7SAndroid Build Coastguard Worker }
2138*03ce13f7SAndroid Build Coastguard Worker
Short8(RValue<Short8> rhs)2139*03ce13f7SAndroid Build Coastguard Worker Short8::Short8(RValue<Short8> rhs)
2140*03ce13f7SAndroid Build Coastguard Worker {
2141*03ce13f7SAndroid Build Coastguard Worker store(rhs);
2142*03ce13f7SAndroid Build Coastguard Worker }
2143*03ce13f7SAndroid Build Coastguard Worker
Short8(const Reference<Short8> & rhs)2144*03ce13f7SAndroid Build Coastguard Worker Short8::Short8(const Reference<Short8> &rhs)
2145*03ce13f7SAndroid Build Coastguard Worker {
2146*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
2147*03ce13f7SAndroid Build Coastguard Worker }
2148*03ce13f7SAndroid Build Coastguard Worker
Short8(RValue<Short4> lo,RValue<Short4> hi)2149*03ce13f7SAndroid Build Coastguard Worker Short8::Short8(RValue<Short4> lo, RValue<Short4> hi)
2150*03ce13f7SAndroid Build Coastguard Worker {
2151*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = { 0, 1, 2, 3, 8, 9, 10, 11 }; // Real type is v8i16
2152*03ce13f7SAndroid Build Coastguard Worker Value *packed = Nucleus::createShuffleVector(lo.value(), hi.value(), shuffle);
2153*03ce13f7SAndroid Build Coastguard Worker
2154*03ce13f7SAndroid Build Coastguard Worker storeValue(packed);
2155*03ce13f7SAndroid Build Coastguard Worker }
2156*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<Short8> rhs)2157*03ce13f7SAndroid Build Coastguard Worker RValue<Short8> Short8::operator=(RValue<Short8> rhs)
2158*03ce13f7SAndroid Build Coastguard Worker {
2159*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
2160*03ce13f7SAndroid Build Coastguard Worker }
2161*03ce13f7SAndroid Build Coastguard Worker
operator =(const Short8 & rhs)2162*03ce13f7SAndroid Build Coastguard Worker RValue<Short8> Short8::operator=(const Short8 &rhs)
2163*03ce13f7SAndroid Build Coastguard Worker {
2164*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
2165*03ce13f7SAndroid Build Coastguard Worker }
2166*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<Short8> & rhs)2167*03ce13f7SAndroid Build Coastguard Worker RValue<Short8> Short8::operator=(const Reference<Short8> &rhs)
2168*03ce13f7SAndroid Build Coastguard Worker {
2169*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
2170*03ce13f7SAndroid Build Coastguard Worker }
2171*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<Short8> lhs,RValue<Short8> rhs)2172*03ce13f7SAndroid Build Coastguard Worker RValue<Short8> operator+(RValue<Short8> lhs, RValue<Short8> rhs)
2173*03ce13f7SAndroid Build Coastguard Worker {
2174*03ce13f7SAndroid Build Coastguard Worker return RValue<Short8>(Nucleus::createAdd(lhs.value(), rhs.value()));
2175*03ce13f7SAndroid Build Coastguard Worker }
2176*03ce13f7SAndroid Build Coastguard Worker
operator &(RValue<Short8> lhs,RValue<Short8> rhs)2177*03ce13f7SAndroid Build Coastguard Worker RValue<Short8> operator&(RValue<Short8> lhs, RValue<Short8> rhs)
2178*03ce13f7SAndroid Build Coastguard Worker {
2179*03ce13f7SAndroid Build Coastguard Worker return RValue<Short8>(Nucleus::createAnd(lhs.value(), rhs.value()));
2180*03ce13f7SAndroid Build Coastguard Worker }
2181*03ce13f7SAndroid Build Coastguard Worker
UShort8(unsigned short c)2182*03ce13f7SAndroid Build Coastguard Worker UShort8::UShort8(unsigned short c)
2183*03ce13f7SAndroid Build Coastguard Worker {
2184*03ce13f7SAndroid Build Coastguard Worker std::vector<int64_t> constantVector = { c };
2185*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantVector(constantVector, type()));
2186*03ce13f7SAndroid Build Coastguard Worker }
2187*03ce13f7SAndroid Build Coastguard Worker
UShort8(unsigned short c0,unsigned short c1,unsigned short c2,unsigned short c3,unsigned short c4,unsigned short c5,unsigned short c6,unsigned short c7)2188*03ce13f7SAndroid Build Coastguard Worker UShort8::UShort8(unsigned short c0, unsigned short c1, unsigned short c2, unsigned short c3, unsigned short c4, unsigned short c5, unsigned short c6, unsigned short c7)
2189*03ce13f7SAndroid Build Coastguard Worker {
2190*03ce13f7SAndroid Build Coastguard Worker std::vector<int64_t> constantVector = { c0, c1, c2, c3, c4, c5, c6, c7 };
2191*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantVector(constantVector, type()));
2192*03ce13f7SAndroid Build Coastguard Worker }
2193*03ce13f7SAndroid Build Coastguard Worker
UShort8(RValue<UShort8> rhs)2194*03ce13f7SAndroid Build Coastguard Worker UShort8::UShort8(RValue<UShort8> rhs)
2195*03ce13f7SAndroid Build Coastguard Worker {
2196*03ce13f7SAndroid Build Coastguard Worker store(rhs);
2197*03ce13f7SAndroid Build Coastguard Worker }
2198*03ce13f7SAndroid Build Coastguard Worker
UShort8(const Reference<UShort8> & rhs)2199*03ce13f7SAndroid Build Coastguard Worker UShort8::UShort8(const Reference<UShort8> &rhs)
2200*03ce13f7SAndroid Build Coastguard Worker {
2201*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
2202*03ce13f7SAndroid Build Coastguard Worker }
2203*03ce13f7SAndroid Build Coastguard Worker
UShort8(RValue<UShort4> lo,RValue<UShort4> hi)2204*03ce13f7SAndroid Build Coastguard Worker UShort8::UShort8(RValue<UShort4> lo, RValue<UShort4> hi)
2205*03ce13f7SAndroid Build Coastguard Worker {
2206*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = { 0, 1, 2, 3, 8, 9, 10, 11 }; // Real type is v8i16
2207*03ce13f7SAndroid Build Coastguard Worker Value *packed = Nucleus::createShuffleVector(lo.value(), hi.value(), shuffle);
2208*03ce13f7SAndroid Build Coastguard Worker
2209*03ce13f7SAndroid Build Coastguard Worker storeValue(packed);
2210*03ce13f7SAndroid Build Coastguard Worker }
2211*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<UShort8> rhs)2212*03ce13f7SAndroid Build Coastguard Worker RValue<UShort8> UShort8::operator=(RValue<UShort8> rhs)
2213*03ce13f7SAndroid Build Coastguard Worker {
2214*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
2215*03ce13f7SAndroid Build Coastguard Worker }
2216*03ce13f7SAndroid Build Coastguard Worker
operator =(const UShort8 & rhs)2217*03ce13f7SAndroid Build Coastguard Worker RValue<UShort8> UShort8::operator=(const UShort8 &rhs)
2218*03ce13f7SAndroid Build Coastguard Worker {
2219*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
2220*03ce13f7SAndroid Build Coastguard Worker }
2221*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<UShort8> & rhs)2222*03ce13f7SAndroid Build Coastguard Worker RValue<UShort8> UShort8::operator=(const Reference<UShort8> &rhs)
2223*03ce13f7SAndroid Build Coastguard Worker {
2224*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
2225*03ce13f7SAndroid Build Coastguard Worker }
2226*03ce13f7SAndroid Build Coastguard Worker
operator &(RValue<UShort8> lhs,RValue<UShort8> rhs)2227*03ce13f7SAndroid Build Coastguard Worker RValue<UShort8> operator&(RValue<UShort8> lhs, RValue<UShort8> rhs)
2228*03ce13f7SAndroid Build Coastguard Worker {
2229*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort8>(Nucleus::createAnd(lhs.value(), rhs.value()));
2230*03ce13f7SAndroid Build Coastguard Worker }
2231*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<UShort8> lhs,RValue<UShort8> rhs)2232*03ce13f7SAndroid Build Coastguard Worker RValue<UShort8> operator+(RValue<UShort8> lhs, RValue<UShort8> rhs)
2233*03ce13f7SAndroid Build Coastguard Worker {
2234*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort8>(Nucleus::createAdd(lhs.value(), rhs.value()));
2235*03ce13f7SAndroid Build Coastguard Worker }
2236*03ce13f7SAndroid Build Coastguard Worker
operator *(RValue<UShort8> lhs,RValue<UShort8> rhs)2237*03ce13f7SAndroid Build Coastguard Worker RValue<UShort8> operator*(RValue<UShort8> lhs, RValue<UShort8> rhs)
2238*03ce13f7SAndroid Build Coastguard Worker {
2239*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort8>(Nucleus::createMul(lhs.value(), rhs.value()));
2240*03ce13f7SAndroid Build Coastguard Worker }
2241*03ce13f7SAndroid Build Coastguard Worker
operator +=(UShort8 & lhs,RValue<UShort8> rhs)2242*03ce13f7SAndroid Build Coastguard Worker RValue<UShort8> operator+=(UShort8 &lhs, RValue<UShort8> rhs)
2243*03ce13f7SAndroid Build Coastguard Worker {
2244*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs + rhs;
2245*03ce13f7SAndroid Build Coastguard Worker }
2246*03ce13f7SAndroid Build Coastguard Worker
operator ~(RValue<UShort8> val)2247*03ce13f7SAndroid Build Coastguard Worker RValue<UShort8> operator~(RValue<UShort8> val)
2248*03ce13f7SAndroid Build Coastguard Worker {
2249*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort8>(Nucleus::createNot(val.value()));
2250*03ce13f7SAndroid Build Coastguard Worker }
2251*03ce13f7SAndroid Build Coastguard Worker
Swizzle(RValue<UShort8> x,uint32_t select)2252*03ce13f7SAndroid Build Coastguard Worker RValue<UShort8> Swizzle(RValue<UShort8> x, uint32_t select)
2253*03ce13f7SAndroid Build Coastguard Worker {
2254*03ce13f7SAndroid Build Coastguard Worker std::vector<int> swizzle = {
2255*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 28) & 0x07),
2256*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 24) & 0x07),
2257*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 20) & 0x07),
2258*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 16) & 0x07),
2259*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 12) & 0x07),
2260*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 8) & 0x07),
2261*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 4) & 0x07),
2262*03ce13f7SAndroid Build Coastguard Worker static_cast<int>((select >> 0) & 0x07),
2263*03ce13f7SAndroid Build Coastguard Worker };
2264*03ce13f7SAndroid Build Coastguard Worker
2265*03ce13f7SAndroid Build Coastguard Worker return RValue<UShort8>(Nucleus::createShuffleVector(x.value(), x.value(), swizzle));
2266*03ce13f7SAndroid Build Coastguard Worker }
2267*03ce13f7SAndroid Build Coastguard Worker
Int(Argument<Int> argument)2268*03ce13f7SAndroid Build Coastguard Worker Int::Int(Argument<Int> argument)
2269*03ce13f7SAndroid Build Coastguard Worker {
2270*03ce13f7SAndroid Build Coastguard Worker store(argument.rvalue());
2271*03ce13f7SAndroid Build Coastguard Worker }
2272*03ce13f7SAndroid Build Coastguard Worker
Int(RValue<Byte> cast)2273*03ce13f7SAndroid Build Coastguard Worker Int::Int(RValue<Byte> cast)
2274*03ce13f7SAndroid Build Coastguard Worker {
2275*03ce13f7SAndroid Build Coastguard Worker Value *integer = Nucleus::createZExt(cast.value(), Int::type());
2276*03ce13f7SAndroid Build Coastguard Worker
2277*03ce13f7SAndroid Build Coastguard Worker storeValue(integer);
2278*03ce13f7SAndroid Build Coastguard Worker }
2279*03ce13f7SAndroid Build Coastguard Worker
Int(RValue<SByte> cast)2280*03ce13f7SAndroid Build Coastguard Worker Int::Int(RValue<SByte> cast)
2281*03ce13f7SAndroid Build Coastguard Worker {
2282*03ce13f7SAndroid Build Coastguard Worker Value *integer = Nucleus::createSExt(cast.value(), Int::type());
2283*03ce13f7SAndroid Build Coastguard Worker
2284*03ce13f7SAndroid Build Coastguard Worker storeValue(integer);
2285*03ce13f7SAndroid Build Coastguard Worker }
2286*03ce13f7SAndroid Build Coastguard Worker
Int(RValue<Short> cast)2287*03ce13f7SAndroid Build Coastguard Worker Int::Int(RValue<Short> cast)
2288*03ce13f7SAndroid Build Coastguard Worker {
2289*03ce13f7SAndroid Build Coastguard Worker Value *integer = Nucleus::createSExt(cast.value(), Int::type());
2290*03ce13f7SAndroid Build Coastguard Worker
2291*03ce13f7SAndroid Build Coastguard Worker storeValue(integer);
2292*03ce13f7SAndroid Build Coastguard Worker }
2293*03ce13f7SAndroid Build Coastguard Worker
Int(RValue<UShort> cast)2294*03ce13f7SAndroid Build Coastguard Worker Int::Int(RValue<UShort> cast)
2295*03ce13f7SAndroid Build Coastguard Worker {
2296*03ce13f7SAndroid Build Coastguard Worker Value *integer = Nucleus::createZExt(cast.value(), Int::type());
2297*03ce13f7SAndroid Build Coastguard Worker
2298*03ce13f7SAndroid Build Coastguard Worker storeValue(integer);
2299*03ce13f7SAndroid Build Coastguard Worker }
2300*03ce13f7SAndroid Build Coastguard Worker
Int(RValue<Int2> cast)2301*03ce13f7SAndroid Build Coastguard Worker Int::Int(RValue<Int2> cast)
2302*03ce13f7SAndroid Build Coastguard Worker {
2303*03ce13f7SAndroid Build Coastguard Worker *this = Extract(cast, 0);
2304*03ce13f7SAndroid Build Coastguard Worker }
2305*03ce13f7SAndroid Build Coastguard Worker
Int(RValue<Long> cast)2306*03ce13f7SAndroid Build Coastguard Worker Int::Int(RValue<Long> cast)
2307*03ce13f7SAndroid Build Coastguard Worker {
2308*03ce13f7SAndroid Build Coastguard Worker Value *integer = Nucleus::createTrunc(cast.value(), Int::type());
2309*03ce13f7SAndroid Build Coastguard Worker
2310*03ce13f7SAndroid Build Coastguard Worker storeValue(integer);
2311*03ce13f7SAndroid Build Coastguard Worker }
2312*03ce13f7SAndroid Build Coastguard Worker
Int(RValue<Float> cast)2313*03ce13f7SAndroid Build Coastguard Worker Int::Int(RValue<Float> cast)
2314*03ce13f7SAndroid Build Coastguard Worker {
2315*03ce13f7SAndroid Build Coastguard Worker Value *integer = Nucleus::createFPToSI(cast.value(), Int::type());
2316*03ce13f7SAndroid Build Coastguard Worker
2317*03ce13f7SAndroid Build Coastguard Worker storeValue(integer);
2318*03ce13f7SAndroid Build Coastguard Worker }
2319*03ce13f7SAndroid Build Coastguard Worker
Int(int x)2320*03ce13f7SAndroid Build Coastguard Worker Int::Int(int x)
2321*03ce13f7SAndroid Build Coastguard Worker {
2322*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantInt(x));
2323*03ce13f7SAndroid Build Coastguard Worker }
2324*03ce13f7SAndroid Build Coastguard Worker
Int(RValue<Int> rhs)2325*03ce13f7SAndroid Build Coastguard Worker Int::Int(RValue<Int> rhs)
2326*03ce13f7SAndroid Build Coastguard Worker {
2327*03ce13f7SAndroid Build Coastguard Worker store(rhs);
2328*03ce13f7SAndroid Build Coastguard Worker }
2329*03ce13f7SAndroid Build Coastguard Worker
Int(RValue<UInt> rhs)2330*03ce13f7SAndroid Build Coastguard Worker Int::Int(RValue<UInt> rhs)
2331*03ce13f7SAndroid Build Coastguard Worker {
2332*03ce13f7SAndroid Build Coastguard Worker storeValue(rhs.value());
2333*03ce13f7SAndroid Build Coastguard Worker }
2334*03ce13f7SAndroid Build Coastguard Worker
Int(const Int & rhs)2335*03ce13f7SAndroid Build Coastguard Worker Int::Int(const Int &rhs)
2336*03ce13f7SAndroid Build Coastguard Worker {
2337*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
2338*03ce13f7SAndroid Build Coastguard Worker }
2339*03ce13f7SAndroid Build Coastguard Worker
Int(const Reference<Int> & rhs)2340*03ce13f7SAndroid Build Coastguard Worker Int::Int(const Reference<Int> &rhs)
2341*03ce13f7SAndroid Build Coastguard Worker {
2342*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
2343*03ce13f7SAndroid Build Coastguard Worker }
2344*03ce13f7SAndroid Build Coastguard Worker
Int(const UInt & rhs)2345*03ce13f7SAndroid Build Coastguard Worker Int::Int(const UInt &rhs)
2346*03ce13f7SAndroid Build Coastguard Worker {
2347*03ce13f7SAndroid Build Coastguard Worker storeValue(rhs.loadValue());
2348*03ce13f7SAndroid Build Coastguard Worker }
2349*03ce13f7SAndroid Build Coastguard Worker
Int(const Reference<UInt> & rhs)2350*03ce13f7SAndroid Build Coastguard Worker Int::Int(const Reference<UInt> &rhs)
2351*03ce13f7SAndroid Build Coastguard Worker {
2352*03ce13f7SAndroid Build Coastguard Worker storeValue(rhs.loadValue());
2353*03ce13f7SAndroid Build Coastguard Worker }
2354*03ce13f7SAndroid Build Coastguard Worker
operator =(int rhs)2355*03ce13f7SAndroid Build Coastguard Worker RValue<Int> Int::operator=(int rhs)
2356*03ce13f7SAndroid Build Coastguard Worker {
2357*03ce13f7SAndroid Build Coastguard Worker return RValue<Int>(storeValue(Nucleus::createConstantInt(rhs)));
2358*03ce13f7SAndroid Build Coastguard Worker }
2359*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<Int> rhs)2360*03ce13f7SAndroid Build Coastguard Worker RValue<Int> Int::operator=(RValue<Int> rhs)
2361*03ce13f7SAndroid Build Coastguard Worker {
2362*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
2363*03ce13f7SAndroid Build Coastguard Worker }
2364*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<UInt> rhs)2365*03ce13f7SAndroid Build Coastguard Worker RValue<Int> Int::operator=(RValue<UInt> rhs)
2366*03ce13f7SAndroid Build Coastguard Worker {
2367*03ce13f7SAndroid Build Coastguard Worker storeValue(rhs.value());
2368*03ce13f7SAndroid Build Coastguard Worker
2369*03ce13f7SAndroid Build Coastguard Worker return RValue<Int>(rhs);
2370*03ce13f7SAndroid Build Coastguard Worker }
2371*03ce13f7SAndroid Build Coastguard Worker
operator =(const Int & rhs)2372*03ce13f7SAndroid Build Coastguard Worker RValue<Int> Int::operator=(const Int &rhs)
2373*03ce13f7SAndroid Build Coastguard Worker {
2374*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
2375*03ce13f7SAndroid Build Coastguard Worker }
2376*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<Int> & rhs)2377*03ce13f7SAndroid Build Coastguard Worker RValue<Int> Int::operator=(const Reference<Int> &rhs)
2378*03ce13f7SAndroid Build Coastguard Worker {
2379*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
2380*03ce13f7SAndroid Build Coastguard Worker }
2381*03ce13f7SAndroid Build Coastguard Worker
operator =(const UInt & rhs)2382*03ce13f7SAndroid Build Coastguard Worker RValue<Int> Int::operator=(const UInt &rhs)
2383*03ce13f7SAndroid Build Coastguard Worker {
2384*03ce13f7SAndroid Build Coastguard Worker return RValue<Int>(storeValue(rhs.loadValue()));
2385*03ce13f7SAndroid Build Coastguard Worker }
2386*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<UInt> & rhs)2387*03ce13f7SAndroid Build Coastguard Worker RValue<Int> Int::operator=(const Reference<UInt> &rhs)
2388*03ce13f7SAndroid Build Coastguard Worker {
2389*03ce13f7SAndroid Build Coastguard Worker return RValue<Int>(storeValue(rhs.loadValue()));
2390*03ce13f7SAndroid Build Coastguard Worker }
2391*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<Int> lhs,RValue<Int> rhs)2392*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator+(RValue<Int> lhs, RValue<Int> rhs)
2393*03ce13f7SAndroid Build Coastguard Worker {
2394*03ce13f7SAndroid Build Coastguard Worker return RValue<Int>(Nucleus::createAdd(lhs.value(), rhs.value()));
2395*03ce13f7SAndroid Build Coastguard Worker }
2396*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<Int> lhs,RValue<Int> rhs)2397*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator-(RValue<Int> lhs, RValue<Int> rhs)
2398*03ce13f7SAndroid Build Coastguard Worker {
2399*03ce13f7SAndroid Build Coastguard Worker return RValue<Int>(Nucleus::createSub(lhs.value(), rhs.value()));
2400*03ce13f7SAndroid Build Coastguard Worker }
2401*03ce13f7SAndroid Build Coastguard Worker
operator *(RValue<Int> lhs,RValue<Int> rhs)2402*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator*(RValue<Int> lhs, RValue<Int> rhs)
2403*03ce13f7SAndroid Build Coastguard Worker {
2404*03ce13f7SAndroid Build Coastguard Worker return RValue<Int>(Nucleus::createMul(lhs.value(), rhs.value()));
2405*03ce13f7SAndroid Build Coastguard Worker }
2406*03ce13f7SAndroid Build Coastguard Worker
operator /(RValue<Int> lhs,RValue<Int> rhs)2407*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator/(RValue<Int> lhs, RValue<Int> rhs)
2408*03ce13f7SAndroid Build Coastguard Worker {
2409*03ce13f7SAndroid Build Coastguard Worker return RValue<Int>(Nucleus::createSDiv(lhs.value(), rhs.value()));
2410*03ce13f7SAndroid Build Coastguard Worker }
2411*03ce13f7SAndroid Build Coastguard Worker
operator %(RValue<Int> lhs,RValue<Int> rhs)2412*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator%(RValue<Int> lhs, RValue<Int> rhs)
2413*03ce13f7SAndroid Build Coastguard Worker {
2414*03ce13f7SAndroid Build Coastguard Worker return RValue<Int>(Nucleus::createSRem(lhs.value(), rhs.value()));
2415*03ce13f7SAndroid Build Coastguard Worker }
2416*03ce13f7SAndroid Build Coastguard Worker
operator &(RValue<Int> lhs,RValue<Int> rhs)2417*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator&(RValue<Int> lhs, RValue<Int> rhs)
2418*03ce13f7SAndroid Build Coastguard Worker {
2419*03ce13f7SAndroid Build Coastguard Worker return RValue<Int>(Nucleus::createAnd(lhs.value(), rhs.value()));
2420*03ce13f7SAndroid Build Coastguard Worker }
2421*03ce13f7SAndroid Build Coastguard Worker
operator |(RValue<Int> lhs,RValue<Int> rhs)2422*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator|(RValue<Int> lhs, RValue<Int> rhs)
2423*03ce13f7SAndroid Build Coastguard Worker {
2424*03ce13f7SAndroid Build Coastguard Worker return RValue<Int>(Nucleus::createOr(lhs.value(), rhs.value()));
2425*03ce13f7SAndroid Build Coastguard Worker }
2426*03ce13f7SAndroid Build Coastguard Worker
operator ^(RValue<Int> lhs,RValue<Int> rhs)2427*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator^(RValue<Int> lhs, RValue<Int> rhs)
2428*03ce13f7SAndroid Build Coastguard Worker {
2429*03ce13f7SAndroid Build Coastguard Worker return RValue<Int>(Nucleus::createXor(lhs.value(), rhs.value()));
2430*03ce13f7SAndroid Build Coastguard Worker }
2431*03ce13f7SAndroid Build Coastguard Worker
operator <<(RValue<Int> lhs,RValue<Int> rhs)2432*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator<<(RValue<Int> lhs, RValue<Int> rhs)
2433*03ce13f7SAndroid Build Coastguard Worker {
2434*03ce13f7SAndroid Build Coastguard Worker return RValue<Int>(Nucleus::createShl(lhs.value(), rhs.value()));
2435*03ce13f7SAndroid Build Coastguard Worker }
2436*03ce13f7SAndroid Build Coastguard Worker
operator >>(RValue<Int> lhs,RValue<Int> rhs)2437*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator>>(RValue<Int> lhs, RValue<Int> rhs)
2438*03ce13f7SAndroid Build Coastguard Worker {
2439*03ce13f7SAndroid Build Coastguard Worker return RValue<Int>(Nucleus::createAShr(lhs.value(), rhs.value()));
2440*03ce13f7SAndroid Build Coastguard Worker }
2441*03ce13f7SAndroid Build Coastguard Worker
operator +=(Int & lhs,RValue<Int> rhs)2442*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator+=(Int &lhs, RValue<Int> rhs)
2443*03ce13f7SAndroid Build Coastguard Worker {
2444*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs + rhs;
2445*03ce13f7SAndroid Build Coastguard Worker }
2446*03ce13f7SAndroid Build Coastguard Worker
operator -=(Int & lhs,RValue<Int> rhs)2447*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator-=(Int &lhs, RValue<Int> rhs)
2448*03ce13f7SAndroid Build Coastguard Worker {
2449*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs - rhs;
2450*03ce13f7SAndroid Build Coastguard Worker }
2451*03ce13f7SAndroid Build Coastguard Worker
operator *=(Int & lhs,RValue<Int> rhs)2452*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator*=(Int &lhs, RValue<Int> rhs)
2453*03ce13f7SAndroid Build Coastguard Worker {
2454*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs * rhs;
2455*03ce13f7SAndroid Build Coastguard Worker }
2456*03ce13f7SAndroid Build Coastguard Worker
operator /=(Int & lhs,RValue<Int> rhs)2457*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator/=(Int &lhs, RValue<Int> rhs)
2458*03ce13f7SAndroid Build Coastguard Worker {
2459*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs / rhs;
2460*03ce13f7SAndroid Build Coastguard Worker }
2461*03ce13f7SAndroid Build Coastguard Worker
operator %=(Int & lhs,RValue<Int> rhs)2462*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator%=(Int &lhs, RValue<Int> rhs)
2463*03ce13f7SAndroid Build Coastguard Worker {
2464*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs % rhs;
2465*03ce13f7SAndroid Build Coastguard Worker }
2466*03ce13f7SAndroid Build Coastguard Worker
operator &=(Int & lhs,RValue<Int> rhs)2467*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator&=(Int &lhs, RValue<Int> rhs)
2468*03ce13f7SAndroid Build Coastguard Worker {
2469*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs & rhs;
2470*03ce13f7SAndroid Build Coastguard Worker }
2471*03ce13f7SAndroid Build Coastguard Worker
operator |=(Int & lhs,RValue<Int> rhs)2472*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator|=(Int &lhs, RValue<Int> rhs)
2473*03ce13f7SAndroid Build Coastguard Worker {
2474*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs | rhs;
2475*03ce13f7SAndroid Build Coastguard Worker }
2476*03ce13f7SAndroid Build Coastguard Worker
operator ^=(Int & lhs,RValue<Int> rhs)2477*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator^=(Int &lhs, RValue<Int> rhs)
2478*03ce13f7SAndroid Build Coastguard Worker {
2479*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs ^ rhs;
2480*03ce13f7SAndroid Build Coastguard Worker }
2481*03ce13f7SAndroid Build Coastguard Worker
operator <<=(Int & lhs,RValue<Int> rhs)2482*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator<<=(Int &lhs, RValue<Int> rhs)
2483*03ce13f7SAndroid Build Coastguard Worker {
2484*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs << rhs;
2485*03ce13f7SAndroid Build Coastguard Worker }
2486*03ce13f7SAndroid Build Coastguard Worker
operator >>=(Int & lhs,RValue<Int> rhs)2487*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator>>=(Int &lhs, RValue<Int> rhs)
2488*03ce13f7SAndroid Build Coastguard Worker {
2489*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs >> rhs;
2490*03ce13f7SAndroid Build Coastguard Worker }
2491*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<Int> val)2492*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator+(RValue<Int> val)
2493*03ce13f7SAndroid Build Coastguard Worker {
2494*03ce13f7SAndroid Build Coastguard Worker return val;
2495*03ce13f7SAndroid Build Coastguard Worker }
2496*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<Int> val)2497*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator-(RValue<Int> val)
2498*03ce13f7SAndroid Build Coastguard Worker {
2499*03ce13f7SAndroid Build Coastguard Worker return RValue<Int>(Nucleus::createNeg(val.value()));
2500*03ce13f7SAndroid Build Coastguard Worker }
2501*03ce13f7SAndroid Build Coastguard Worker
operator ~(RValue<Int> val)2502*03ce13f7SAndroid Build Coastguard Worker RValue<Int> operator~(RValue<Int> val)
2503*03ce13f7SAndroid Build Coastguard Worker {
2504*03ce13f7SAndroid Build Coastguard Worker return RValue<Int>(Nucleus::createNot(val.value()));
2505*03ce13f7SAndroid Build Coastguard Worker }
2506*03ce13f7SAndroid Build Coastguard Worker
operator <(RValue<Int> lhs,RValue<Int> rhs)2507*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator<(RValue<Int> lhs, RValue<Int> rhs)
2508*03ce13f7SAndroid Build Coastguard Worker {
2509*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpSLT(lhs.value(), rhs.value()));
2510*03ce13f7SAndroid Build Coastguard Worker }
2511*03ce13f7SAndroid Build Coastguard Worker
operator <=(RValue<Int> lhs,RValue<Int> rhs)2512*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator<=(RValue<Int> lhs, RValue<Int> rhs)
2513*03ce13f7SAndroid Build Coastguard Worker {
2514*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpSLE(lhs.value(), rhs.value()));
2515*03ce13f7SAndroid Build Coastguard Worker }
2516*03ce13f7SAndroid Build Coastguard Worker
operator >(RValue<Int> lhs,RValue<Int> rhs)2517*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator>(RValue<Int> lhs, RValue<Int> rhs)
2518*03ce13f7SAndroid Build Coastguard Worker {
2519*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpSGT(lhs.value(), rhs.value()));
2520*03ce13f7SAndroid Build Coastguard Worker }
2521*03ce13f7SAndroid Build Coastguard Worker
operator >=(RValue<Int> lhs,RValue<Int> rhs)2522*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator>=(RValue<Int> lhs, RValue<Int> rhs)
2523*03ce13f7SAndroid Build Coastguard Worker {
2524*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpSGE(lhs.value(), rhs.value()));
2525*03ce13f7SAndroid Build Coastguard Worker }
2526*03ce13f7SAndroid Build Coastguard Worker
operator !=(RValue<Int> lhs,RValue<Int> rhs)2527*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator!=(RValue<Int> lhs, RValue<Int> rhs)
2528*03ce13f7SAndroid Build Coastguard Worker {
2529*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpNE(lhs.value(), rhs.value()));
2530*03ce13f7SAndroid Build Coastguard Worker }
2531*03ce13f7SAndroid Build Coastguard Worker
operator ==(RValue<Int> lhs,RValue<Int> rhs)2532*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator==(RValue<Int> lhs, RValue<Int> rhs)
2533*03ce13f7SAndroid Build Coastguard Worker {
2534*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpEQ(lhs.value(), rhs.value()));
2535*03ce13f7SAndroid Build Coastguard Worker }
2536*03ce13f7SAndroid Build Coastguard Worker
Max(RValue<Int> x,RValue<Int> y)2537*03ce13f7SAndroid Build Coastguard Worker RValue<Int> Max(RValue<Int> x, RValue<Int> y)
2538*03ce13f7SAndroid Build Coastguard Worker {
2539*03ce13f7SAndroid Build Coastguard Worker return IfThenElse(x > y, x, y);
2540*03ce13f7SAndroid Build Coastguard Worker }
2541*03ce13f7SAndroid Build Coastguard Worker
Min(RValue<Int> x,RValue<Int> y)2542*03ce13f7SAndroid Build Coastguard Worker RValue<Int> Min(RValue<Int> x, RValue<Int> y)
2543*03ce13f7SAndroid Build Coastguard Worker {
2544*03ce13f7SAndroid Build Coastguard Worker return IfThenElse(x < y, x, y);
2545*03ce13f7SAndroid Build Coastguard Worker }
2546*03ce13f7SAndroid Build Coastguard Worker
Clamp(RValue<Int> x,RValue<Int> min,RValue<Int> max)2547*03ce13f7SAndroid Build Coastguard Worker RValue<Int> Clamp(RValue<Int> x, RValue<Int> min, RValue<Int> max)
2548*03ce13f7SAndroid Build Coastguard Worker {
2549*03ce13f7SAndroid Build Coastguard Worker return Min(Max(x, min), max);
2550*03ce13f7SAndroid Build Coastguard Worker }
2551*03ce13f7SAndroid Build Coastguard Worker
Long(RValue<Int> cast)2552*03ce13f7SAndroid Build Coastguard Worker Long::Long(RValue<Int> cast)
2553*03ce13f7SAndroid Build Coastguard Worker {
2554*03ce13f7SAndroid Build Coastguard Worker Value *integer = Nucleus::createSExt(cast.value(), Long::type());
2555*03ce13f7SAndroid Build Coastguard Worker
2556*03ce13f7SAndroid Build Coastguard Worker storeValue(integer);
2557*03ce13f7SAndroid Build Coastguard Worker }
2558*03ce13f7SAndroid Build Coastguard Worker
Long(RValue<UInt> cast)2559*03ce13f7SAndroid Build Coastguard Worker Long::Long(RValue<UInt> cast)
2560*03ce13f7SAndroid Build Coastguard Worker {
2561*03ce13f7SAndroid Build Coastguard Worker Value *integer = Nucleus::createZExt(cast.value(), Long::type());
2562*03ce13f7SAndroid Build Coastguard Worker
2563*03ce13f7SAndroid Build Coastguard Worker storeValue(integer);
2564*03ce13f7SAndroid Build Coastguard Worker }
2565*03ce13f7SAndroid Build Coastguard Worker
Long(RValue<Long> rhs)2566*03ce13f7SAndroid Build Coastguard Worker Long::Long(RValue<Long> rhs)
2567*03ce13f7SAndroid Build Coastguard Worker {
2568*03ce13f7SAndroid Build Coastguard Worker store(rhs);
2569*03ce13f7SAndroid Build Coastguard Worker }
2570*03ce13f7SAndroid Build Coastguard Worker
operator =(int64_t rhs)2571*03ce13f7SAndroid Build Coastguard Worker RValue<Long> Long::operator=(int64_t rhs)
2572*03ce13f7SAndroid Build Coastguard Worker {
2573*03ce13f7SAndroid Build Coastguard Worker return RValue<Long>(storeValue(Nucleus::createConstantLong(rhs)));
2574*03ce13f7SAndroid Build Coastguard Worker }
2575*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<Long> rhs)2576*03ce13f7SAndroid Build Coastguard Worker RValue<Long> Long::operator=(RValue<Long> rhs)
2577*03ce13f7SAndroid Build Coastguard Worker {
2578*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
2579*03ce13f7SAndroid Build Coastguard Worker }
2580*03ce13f7SAndroid Build Coastguard Worker
operator =(const Long & rhs)2581*03ce13f7SAndroid Build Coastguard Worker RValue<Long> Long::operator=(const Long &rhs)
2582*03ce13f7SAndroid Build Coastguard Worker {
2583*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
2584*03ce13f7SAndroid Build Coastguard Worker }
2585*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<Long> & rhs)2586*03ce13f7SAndroid Build Coastguard Worker RValue<Long> Long::operator=(const Reference<Long> &rhs)
2587*03ce13f7SAndroid Build Coastguard Worker {
2588*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
2589*03ce13f7SAndroid Build Coastguard Worker }
2590*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<Long> lhs,RValue<Long> rhs)2591*03ce13f7SAndroid Build Coastguard Worker RValue<Long> operator+(RValue<Long> lhs, RValue<Long> rhs)
2592*03ce13f7SAndroid Build Coastguard Worker {
2593*03ce13f7SAndroid Build Coastguard Worker return RValue<Long>(Nucleus::createAdd(lhs.value(), rhs.value()));
2594*03ce13f7SAndroid Build Coastguard Worker }
2595*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<Long> lhs,RValue<Long> rhs)2596*03ce13f7SAndroid Build Coastguard Worker RValue<Long> operator-(RValue<Long> lhs, RValue<Long> rhs)
2597*03ce13f7SAndroid Build Coastguard Worker {
2598*03ce13f7SAndroid Build Coastguard Worker return RValue<Long>(Nucleus::createSub(lhs.value(), rhs.value()));
2599*03ce13f7SAndroid Build Coastguard Worker }
2600*03ce13f7SAndroid Build Coastguard Worker
operator *(RValue<Long> lhs,RValue<Long> rhs)2601*03ce13f7SAndroid Build Coastguard Worker RValue<Long> operator*(RValue<Long> lhs, RValue<Long> rhs)
2602*03ce13f7SAndroid Build Coastguard Worker {
2603*03ce13f7SAndroid Build Coastguard Worker return RValue<Long>(Nucleus::createMul(lhs.value(), rhs.value()));
2604*03ce13f7SAndroid Build Coastguard Worker }
2605*03ce13f7SAndroid Build Coastguard Worker
operator >>(RValue<Long> lhs,RValue<Long> rhs)2606*03ce13f7SAndroid Build Coastguard Worker RValue<Long> operator>>(RValue<Long> lhs, RValue<Long> rhs)
2607*03ce13f7SAndroid Build Coastguard Worker {
2608*03ce13f7SAndroid Build Coastguard Worker return RValue<Long>(Nucleus::createAShr(lhs.value(), rhs.value()));
2609*03ce13f7SAndroid Build Coastguard Worker }
2610*03ce13f7SAndroid Build Coastguard Worker
operator +=(Long & lhs,RValue<Long> rhs)2611*03ce13f7SAndroid Build Coastguard Worker RValue<Long> operator+=(Long &lhs, RValue<Long> rhs)
2612*03ce13f7SAndroid Build Coastguard Worker {
2613*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs + rhs;
2614*03ce13f7SAndroid Build Coastguard Worker }
2615*03ce13f7SAndroid Build Coastguard Worker
operator -=(Long & lhs,RValue<Long> rhs)2616*03ce13f7SAndroid Build Coastguard Worker RValue<Long> operator-=(Long &lhs, RValue<Long> rhs)
2617*03ce13f7SAndroid Build Coastguard Worker {
2618*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs - rhs;
2619*03ce13f7SAndroid Build Coastguard Worker }
2620*03ce13f7SAndroid Build Coastguard Worker
AddAtomic(RValue<Pointer<Long>> x,RValue<Long> y)2621*03ce13f7SAndroid Build Coastguard Worker RValue<Long> AddAtomic(RValue<Pointer<Long>> x, RValue<Long> y)
2622*03ce13f7SAndroid Build Coastguard Worker {
2623*03ce13f7SAndroid Build Coastguard Worker return RValue<Long>(Nucleus::createAtomicAdd(x.value(), y.value()));
2624*03ce13f7SAndroid Build Coastguard Worker }
2625*03ce13f7SAndroid Build Coastguard Worker
AddAtomic(RValue<Pointer<UInt>> x,RValue<UInt> y,std::memory_order memoryOrder)2626*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> AddAtomic(RValue<Pointer<UInt>> x, RValue<UInt> y, std::memory_order memoryOrder)
2627*03ce13f7SAndroid Build Coastguard Worker {
2628*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createAtomicAdd(x.value(), y.value(), memoryOrder));
2629*03ce13f7SAndroid Build Coastguard Worker }
2630*03ce13f7SAndroid Build Coastguard Worker
SubAtomic(RValue<Pointer<UInt>> x,RValue<UInt> y,std::memory_order memoryOrder)2631*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> SubAtomic(RValue<Pointer<UInt>> x, RValue<UInt> y, std::memory_order memoryOrder)
2632*03ce13f7SAndroid Build Coastguard Worker {
2633*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createAtomicSub(x.value(), y.value(), memoryOrder));
2634*03ce13f7SAndroid Build Coastguard Worker }
2635*03ce13f7SAndroid Build Coastguard Worker
AndAtomic(RValue<Pointer<UInt>> x,RValue<UInt> y,std::memory_order memoryOrder)2636*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> AndAtomic(RValue<Pointer<UInt>> x, RValue<UInt> y, std::memory_order memoryOrder)
2637*03ce13f7SAndroid Build Coastguard Worker {
2638*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createAtomicAnd(x.value(), y.value(), memoryOrder));
2639*03ce13f7SAndroid Build Coastguard Worker }
2640*03ce13f7SAndroid Build Coastguard Worker
OrAtomic(RValue<Pointer<UInt>> x,RValue<UInt> y,std::memory_order memoryOrder)2641*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> OrAtomic(RValue<Pointer<UInt>> x, RValue<UInt> y, std::memory_order memoryOrder)
2642*03ce13f7SAndroid Build Coastguard Worker {
2643*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createAtomicOr(x.value(), y.value(), memoryOrder));
2644*03ce13f7SAndroid Build Coastguard Worker }
2645*03ce13f7SAndroid Build Coastguard Worker
XorAtomic(RValue<Pointer<UInt>> x,RValue<UInt> y,std::memory_order memoryOrder)2646*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> XorAtomic(RValue<Pointer<UInt>> x, RValue<UInt> y, std::memory_order memoryOrder)
2647*03ce13f7SAndroid Build Coastguard Worker {
2648*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createAtomicXor(x.value(), y.value(), memoryOrder));
2649*03ce13f7SAndroid Build Coastguard Worker }
2650*03ce13f7SAndroid Build Coastguard Worker
ExchangeAtomic(RValue<Pointer<UInt>> x,RValue<UInt> y,std::memory_order memoryOrder)2651*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> ExchangeAtomic(RValue<Pointer<UInt>> x, RValue<UInt> y, std::memory_order memoryOrder)
2652*03ce13f7SAndroid Build Coastguard Worker {
2653*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createAtomicExchange(x.value(), y.value(), memoryOrder));
2654*03ce13f7SAndroid Build Coastguard Worker }
2655*03ce13f7SAndroid Build Coastguard Worker
CompareExchangeAtomic(RValue<Pointer<UInt>> x,RValue<UInt> y,RValue<UInt> compare,std::memory_order memoryOrderEqual,std::memory_order memoryOrderUnequal)2656*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> CompareExchangeAtomic(RValue<Pointer<UInt>> x, RValue<UInt> y, RValue<UInt> compare, std::memory_order memoryOrderEqual, std::memory_order memoryOrderUnequal)
2657*03ce13f7SAndroid Build Coastguard Worker {
2658*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createAtomicCompareExchange(x.value(), y.value(), compare.value(), memoryOrderEqual, memoryOrderUnequal));
2659*03ce13f7SAndroid Build Coastguard Worker }
2660*03ce13f7SAndroid Build Coastguard Worker
UInt(Argument<UInt> argument)2661*03ce13f7SAndroid Build Coastguard Worker UInt::UInt(Argument<UInt> argument)
2662*03ce13f7SAndroid Build Coastguard Worker {
2663*03ce13f7SAndroid Build Coastguard Worker store(argument.rvalue());
2664*03ce13f7SAndroid Build Coastguard Worker }
2665*03ce13f7SAndroid Build Coastguard Worker
UInt(RValue<UShort> cast)2666*03ce13f7SAndroid Build Coastguard Worker UInt::UInt(RValue<UShort> cast)
2667*03ce13f7SAndroid Build Coastguard Worker {
2668*03ce13f7SAndroid Build Coastguard Worker Value *integer = Nucleus::createZExt(cast.value(), UInt::type());
2669*03ce13f7SAndroid Build Coastguard Worker
2670*03ce13f7SAndroid Build Coastguard Worker storeValue(integer);
2671*03ce13f7SAndroid Build Coastguard Worker }
2672*03ce13f7SAndroid Build Coastguard Worker
UInt(RValue<Long> cast)2673*03ce13f7SAndroid Build Coastguard Worker UInt::UInt(RValue<Long> cast)
2674*03ce13f7SAndroid Build Coastguard Worker {
2675*03ce13f7SAndroid Build Coastguard Worker Value *integer = Nucleus::createTrunc(cast.value(), UInt::type());
2676*03ce13f7SAndroid Build Coastguard Worker
2677*03ce13f7SAndroid Build Coastguard Worker storeValue(integer);
2678*03ce13f7SAndroid Build Coastguard Worker }
2679*03ce13f7SAndroid Build Coastguard Worker
UInt(int x)2680*03ce13f7SAndroid Build Coastguard Worker UInt::UInt(int x)
2681*03ce13f7SAndroid Build Coastguard Worker {
2682*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantInt(x));
2683*03ce13f7SAndroid Build Coastguard Worker }
2684*03ce13f7SAndroid Build Coastguard Worker
UInt(unsigned int x)2685*03ce13f7SAndroid Build Coastguard Worker UInt::UInt(unsigned int x)
2686*03ce13f7SAndroid Build Coastguard Worker {
2687*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantInt(x));
2688*03ce13f7SAndroid Build Coastguard Worker }
2689*03ce13f7SAndroid Build Coastguard Worker
UInt(RValue<UInt> rhs)2690*03ce13f7SAndroid Build Coastguard Worker UInt::UInt(RValue<UInt> rhs)
2691*03ce13f7SAndroid Build Coastguard Worker {
2692*03ce13f7SAndroid Build Coastguard Worker store(rhs);
2693*03ce13f7SAndroid Build Coastguard Worker }
2694*03ce13f7SAndroid Build Coastguard Worker
UInt(RValue<Int> rhs)2695*03ce13f7SAndroid Build Coastguard Worker UInt::UInt(RValue<Int> rhs)
2696*03ce13f7SAndroid Build Coastguard Worker {
2697*03ce13f7SAndroid Build Coastguard Worker storeValue(rhs.value());
2698*03ce13f7SAndroid Build Coastguard Worker }
2699*03ce13f7SAndroid Build Coastguard Worker
UInt(const UInt & rhs)2700*03ce13f7SAndroid Build Coastguard Worker UInt::UInt(const UInt &rhs)
2701*03ce13f7SAndroid Build Coastguard Worker {
2702*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
2703*03ce13f7SAndroid Build Coastguard Worker }
2704*03ce13f7SAndroid Build Coastguard Worker
UInt(const Reference<UInt> & rhs)2705*03ce13f7SAndroid Build Coastguard Worker UInt::UInt(const Reference<UInt> &rhs)
2706*03ce13f7SAndroid Build Coastguard Worker {
2707*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
2708*03ce13f7SAndroid Build Coastguard Worker }
2709*03ce13f7SAndroid Build Coastguard Worker
UInt(const Int & rhs)2710*03ce13f7SAndroid Build Coastguard Worker UInt::UInt(const Int &rhs)
2711*03ce13f7SAndroid Build Coastguard Worker {
2712*03ce13f7SAndroid Build Coastguard Worker storeValue(rhs.loadValue());
2713*03ce13f7SAndroid Build Coastguard Worker }
2714*03ce13f7SAndroid Build Coastguard Worker
UInt(const Reference<Int> & rhs)2715*03ce13f7SAndroid Build Coastguard Worker UInt::UInt(const Reference<Int> &rhs)
2716*03ce13f7SAndroid Build Coastguard Worker {
2717*03ce13f7SAndroid Build Coastguard Worker storeValue(rhs.loadValue());
2718*03ce13f7SAndroid Build Coastguard Worker }
2719*03ce13f7SAndroid Build Coastguard Worker
operator =(unsigned int rhs)2720*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> UInt::operator=(unsigned int rhs)
2721*03ce13f7SAndroid Build Coastguard Worker {
2722*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(storeValue(Nucleus::createConstantInt(rhs)));
2723*03ce13f7SAndroid Build Coastguard Worker }
2724*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<UInt> rhs)2725*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> UInt::operator=(RValue<UInt> rhs)
2726*03ce13f7SAndroid Build Coastguard Worker {
2727*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
2728*03ce13f7SAndroid Build Coastguard Worker }
2729*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<Int> rhs)2730*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> UInt::operator=(RValue<Int> rhs)
2731*03ce13f7SAndroid Build Coastguard Worker {
2732*03ce13f7SAndroid Build Coastguard Worker storeValue(rhs.value());
2733*03ce13f7SAndroid Build Coastguard Worker
2734*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(rhs);
2735*03ce13f7SAndroid Build Coastguard Worker }
2736*03ce13f7SAndroid Build Coastguard Worker
operator =(const UInt & rhs)2737*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> UInt::operator=(const UInt &rhs)
2738*03ce13f7SAndroid Build Coastguard Worker {
2739*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
2740*03ce13f7SAndroid Build Coastguard Worker }
2741*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<UInt> & rhs)2742*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> UInt::operator=(const Reference<UInt> &rhs)
2743*03ce13f7SAndroid Build Coastguard Worker {
2744*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
2745*03ce13f7SAndroid Build Coastguard Worker }
2746*03ce13f7SAndroid Build Coastguard Worker
operator =(const Int & rhs)2747*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> UInt::operator=(const Int &rhs)
2748*03ce13f7SAndroid Build Coastguard Worker {
2749*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(storeValue(rhs.loadValue()));
2750*03ce13f7SAndroid Build Coastguard Worker }
2751*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<Int> & rhs)2752*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> UInt::operator=(const Reference<Int> &rhs)
2753*03ce13f7SAndroid Build Coastguard Worker {
2754*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(storeValue(rhs.loadValue()));
2755*03ce13f7SAndroid Build Coastguard Worker }
2756*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<UInt> lhs,RValue<UInt> rhs)2757*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator+(RValue<UInt> lhs, RValue<UInt> rhs)
2758*03ce13f7SAndroid Build Coastguard Worker {
2759*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createAdd(lhs.value(), rhs.value()));
2760*03ce13f7SAndroid Build Coastguard Worker }
2761*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<UInt> lhs,RValue<UInt> rhs)2762*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator-(RValue<UInt> lhs, RValue<UInt> rhs)
2763*03ce13f7SAndroid Build Coastguard Worker {
2764*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createSub(lhs.value(), rhs.value()));
2765*03ce13f7SAndroid Build Coastguard Worker }
2766*03ce13f7SAndroid Build Coastguard Worker
operator *(RValue<UInt> lhs,RValue<UInt> rhs)2767*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator*(RValue<UInt> lhs, RValue<UInt> rhs)
2768*03ce13f7SAndroid Build Coastguard Worker {
2769*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createMul(lhs.value(), rhs.value()));
2770*03ce13f7SAndroid Build Coastguard Worker }
2771*03ce13f7SAndroid Build Coastguard Worker
operator /(RValue<UInt> lhs,RValue<UInt> rhs)2772*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator/(RValue<UInt> lhs, RValue<UInt> rhs)
2773*03ce13f7SAndroid Build Coastguard Worker {
2774*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createUDiv(lhs.value(), rhs.value()));
2775*03ce13f7SAndroid Build Coastguard Worker }
2776*03ce13f7SAndroid Build Coastguard Worker
operator %(RValue<UInt> lhs,RValue<UInt> rhs)2777*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator%(RValue<UInt> lhs, RValue<UInt> rhs)
2778*03ce13f7SAndroid Build Coastguard Worker {
2779*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createURem(lhs.value(), rhs.value()));
2780*03ce13f7SAndroid Build Coastguard Worker }
2781*03ce13f7SAndroid Build Coastguard Worker
operator &(RValue<UInt> lhs,RValue<UInt> rhs)2782*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator&(RValue<UInt> lhs, RValue<UInt> rhs)
2783*03ce13f7SAndroid Build Coastguard Worker {
2784*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createAnd(lhs.value(), rhs.value()));
2785*03ce13f7SAndroid Build Coastguard Worker }
2786*03ce13f7SAndroid Build Coastguard Worker
operator |(RValue<UInt> lhs,RValue<UInt> rhs)2787*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator|(RValue<UInt> lhs, RValue<UInt> rhs)
2788*03ce13f7SAndroid Build Coastguard Worker {
2789*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createOr(lhs.value(), rhs.value()));
2790*03ce13f7SAndroid Build Coastguard Worker }
2791*03ce13f7SAndroid Build Coastguard Worker
operator ^(RValue<UInt> lhs,RValue<UInt> rhs)2792*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator^(RValue<UInt> lhs, RValue<UInt> rhs)
2793*03ce13f7SAndroid Build Coastguard Worker {
2794*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createXor(lhs.value(), rhs.value()));
2795*03ce13f7SAndroid Build Coastguard Worker }
2796*03ce13f7SAndroid Build Coastguard Worker
operator <<(RValue<UInt> lhs,RValue<UInt> rhs)2797*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator<<(RValue<UInt> lhs, RValue<UInt> rhs)
2798*03ce13f7SAndroid Build Coastguard Worker {
2799*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createShl(lhs.value(), rhs.value()));
2800*03ce13f7SAndroid Build Coastguard Worker }
2801*03ce13f7SAndroid Build Coastguard Worker
operator >>(RValue<UInt> lhs,RValue<UInt> rhs)2802*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator>>(RValue<UInt> lhs, RValue<UInt> rhs)
2803*03ce13f7SAndroid Build Coastguard Worker {
2804*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createLShr(lhs.value(), rhs.value()));
2805*03ce13f7SAndroid Build Coastguard Worker }
2806*03ce13f7SAndroid Build Coastguard Worker
operator +=(UInt & lhs,RValue<UInt> rhs)2807*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator+=(UInt &lhs, RValue<UInt> rhs)
2808*03ce13f7SAndroid Build Coastguard Worker {
2809*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs + rhs;
2810*03ce13f7SAndroid Build Coastguard Worker }
2811*03ce13f7SAndroid Build Coastguard Worker
operator -=(UInt & lhs,RValue<UInt> rhs)2812*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator-=(UInt &lhs, RValue<UInt> rhs)
2813*03ce13f7SAndroid Build Coastguard Worker {
2814*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs - rhs;
2815*03ce13f7SAndroid Build Coastguard Worker }
2816*03ce13f7SAndroid Build Coastguard Worker
operator *=(UInt & lhs,RValue<UInt> rhs)2817*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator*=(UInt &lhs, RValue<UInt> rhs)
2818*03ce13f7SAndroid Build Coastguard Worker {
2819*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs * rhs;
2820*03ce13f7SAndroid Build Coastguard Worker }
2821*03ce13f7SAndroid Build Coastguard Worker
operator /=(UInt & lhs,RValue<UInt> rhs)2822*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator/=(UInt &lhs, RValue<UInt> rhs)
2823*03ce13f7SAndroid Build Coastguard Worker {
2824*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs / rhs;
2825*03ce13f7SAndroid Build Coastguard Worker }
2826*03ce13f7SAndroid Build Coastguard Worker
operator %=(UInt & lhs,RValue<UInt> rhs)2827*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator%=(UInt &lhs, RValue<UInt> rhs)
2828*03ce13f7SAndroid Build Coastguard Worker {
2829*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs % rhs;
2830*03ce13f7SAndroid Build Coastguard Worker }
2831*03ce13f7SAndroid Build Coastguard Worker
operator &=(UInt & lhs,RValue<UInt> rhs)2832*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator&=(UInt &lhs, RValue<UInt> rhs)
2833*03ce13f7SAndroid Build Coastguard Worker {
2834*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs & rhs;
2835*03ce13f7SAndroid Build Coastguard Worker }
2836*03ce13f7SAndroid Build Coastguard Worker
operator |=(UInt & lhs,RValue<UInt> rhs)2837*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator|=(UInt &lhs, RValue<UInt> rhs)
2838*03ce13f7SAndroid Build Coastguard Worker {
2839*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs | rhs;
2840*03ce13f7SAndroid Build Coastguard Worker }
2841*03ce13f7SAndroid Build Coastguard Worker
operator ^=(UInt & lhs,RValue<UInt> rhs)2842*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator^=(UInt &lhs, RValue<UInt> rhs)
2843*03ce13f7SAndroid Build Coastguard Worker {
2844*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs ^ rhs;
2845*03ce13f7SAndroid Build Coastguard Worker }
2846*03ce13f7SAndroid Build Coastguard Worker
operator <<=(UInt & lhs,RValue<UInt> rhs)2847*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator<<=(UInt &lhs, RValue<UInt> rhs)
2848*03ce13f7SAndroid Build Coastguard Worker {
2849*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs << rhs;
2850*03ce13f7SAndroid Build Coastguard Worker }
2851*03ce13f7SAndroid Build Coastguard Worker
operator >>=(UInt & lhs,RValue<UInt> rhs)2852*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator>>=(UInt &lhs, RValue<UInt> rhs)
2853*03ce13f7SAndroid Build Coastguard Worker {
2854*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs >> rhs;
2855*03ce13f7SAndroid Build Coastguard Worker }
2856*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<UInt> val)2857*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator+(RValue<UInt> val)
2858*03ce13f7SAndroid Build Coastguard Worker {
2859*03ce13f7SAndroid Build Coastguard Worker return val;
2860*03ce13f7SAndroid Build Coastguard Worker }
2861*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<UInt> val)2862*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator-(RValue<UInt> val)
2863*03ce13f7SAndroid Build Coastguard Worker {
2864*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createNeg(val.value()));
2865*03ce13f7SAndroid Build Coastguard Worker }
2866*03ce13f7SAndroid Build Coastguard Worker
operator ~(RValue<UInt> val)2867*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> operator~(RValue<UInt> val)
2868*03ce13f7SAndroid Build Coastguard Worker {
2869*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createNot(val.value()));
2870*03ce13f7SAndroid Build Coastguard Worker }
2871*03ce13f7SAndroid Build Coastguard Worker
Max(RValue<UInt> x,RValue<UInt> y)2872*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> Max(RValue<UInt> x, RValue<UInt> y)
2873*03ce13f7SAndroid Build Coastguard Worker {
2874*03ce13f7SAndroid Build Coastguard Worker return IfThenElse(x > y, x, y);
2875*03ce13f7SAndroid Build Coastguard Worker }
2876*03ce13f7SAndroid Build Coastguard Worker
Min(RValue<UInt> x,RValue<UInt> y)2877*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> Min(RValue<UInt> x, RValue<UInt> y)
2878*03ce13f7SAndroid Build Coastguard Worker {
2879*03ce13f7SAndroid Build Coastguard Worker return IfThenElse(x < y, x, y);
2880*03ce13f7SAndroid Build Coastguard Worker }
2881*03ce13f7SAndroid Build Coastguard Worker
Clamp(RValue<UInt> x,RValue<UInt> min,RValue<UInt> max)2882*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> Clamp(RValue<UInt> x, RValue<UInt> min, RValue<UInt> max)
2883*03ce13f7SAndroid Build Coastguard Worker {
2884*03ce13f7SAndroid Build Coastguard Worker return Min(Max(x, min), max);
2885*03ce13f7SAndroid Build Coastguard Worker }
2886*03ce13f7SAndroid Build Coastguard Worker
operator <(RValue<UInt> lhs,RValue<UInt> rhs)2887*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator<(RValue<UInt> lhs, RValue<UInt> rhs)
2888*03ce13f7SAndroid Build Coastguard Worker {
2889*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpULT(lhs.value(), rhs.value()));
2890*03ce13f7SAndroid Build Coastguard Worker }
2891*03ce13f7SAndroid Build Coastguard Worker
operator <=(RValue<UInt> lhs,RValue<UInt> rhs)2892*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator<=(RValue<UInt> lhs, RValue<UInt> rhs)
2893*03ce13f7SAndroid Build Coastguard Worker {
2894*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpULE(lhs.value(), rhs.value()));
2895*03ce13f7SAndroid Build Coastguard Worker }
2896*03ce13f7SAndroid Build Coastguard Worker
operator >(RValue<UInt> lhs,RValue<UInt> rhs)2897*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator>(RValue<UInt> lhs, RValue<UInt> rhs)
2898*03ce13f7SAndroid Build Coastguard Worker {
2899*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpUGT(lhs.value(), rhs.value()));
2900*03ce13f7SAndroid Build Coastguard Worker }
2901*03ce13f7SAndroid Build Coastguard Worker
operator >=(RValue<UInt> lhs,RValue<UInt> rhs)2902*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator>=(RValue<UInt> lhs, RValue<UInt> rhs)
2903*03ce13f7SAndroid Build Coastguard Worker {
2904*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpUGE(lhs.value(), rhs.value()));
2905*03ce13f7SAndroid Build Coastguard Worker }
2906*03ce13f7SAndroid Build Coastguard Worker
operator !=(RValue<UInt> lhs,RValue<UInt> rhs)2907*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator!=(RValue<UInt> lhs, RValue<UInt> rhs)
2908*03ce13f7SAndroid Build Coastguard Worker {
2909*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpNE(lhs.value(), rhs.value()));
2910*03ce13f7SAndroid Build Coastguard Worker }
2911*03ce13f7SAndroid Build Coastguard Worker
operator ==(RValue<UInt> lhs,RValue<UInt> rhs)2912*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator==(RValue<UInt> lhs, RValue<UInt> rhs)
2913*03ce13f7SAndroid Build Coastguard Worker {
2914*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createICmpEQ(lhs.value(), rhs.value()));
2915*03ce13f7SAndroid Build Coastguard Worker }
2916*03ce13f7SAndroid Build Coastguard Worker
Int2(RValue<Int4> cast)2917*03ce13f7SAndroid Build Coastguard Worker Int2::Int2(RValue<Int4> cast)
2918*03ce13f7SAndroid Build Coastguard Worker {
2919*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createBitCast(cast.value(), type()));
2920*03ce13f7SAndroid Build Coastguard Worker }
2921*03ce13f7SAndroid Build Coastguard Worker
Int2(int x,int y)2922*03ce13f7SAndroid Build Coastguard Worker Int2::Int2(int x, int y)
2923*03ce13f7SAndroid Build Coastguard Worker {
2924*03ce13f7SAndroid Build Coastguard Worker std::vector<int64_t> constantVector = { x, y };
2925*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantVector(constantVector, type()));
2926*03ce13f7SAndroid Build Coastguard Worker }
2927*03ce13f7SAndroid Build Coastguard Worker
Int2(RValue<Int2> rhs)2928*03ce13f7SAndroid Build Coastguard Worker Int2::Int2(RValue<Int2> rhs)
2929*03ce13f7SAndroid Build Coastguard Worker {
2930*03ce13f7SAndroid Build Coastguard Worker store(rhs);
2931*03ce13f7SAndroid Build Coastguard Worker }
2932*03ce13f7SAndroid Build Coastguard Worker
Int2(const Int2 & rhs)2933*03ce13f7SAndroid Build Coastguard Worker Int2::Int2(const Int2 &rhs)
2934*03ce13f7SAndroid Build Coastguard Worker {
2935*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
2936*03ce13f7SAndroid Build Coastguard Worker }
2937*03ce13f7SAndroid Build Coastguard Worker
Int2(const Reference<Int2> & rhs)2938*03ce13f7SAndroid Build Coastguard Worker Int2::Int2(const Reference<Int2> &rhs)
2939*03ce13f7SAndroid Build Coastguard Worker {
2940*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
2941*03ce13f7SAndroid Build Coastguard Worker }
2942*03ce13f7SAndroid Build Coastguard Worker
Int2(RValue<Int> lo,RValue<Int> hi)2943*03ce13f7SAndroid Build Coastguard Worker Int2::Int2(RValue<Int> lo, RValue<Int> hi)
2944*03ce13f7SAndroid Build Coastguard Worker {
2945*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = { 0, 4, 1, 5 };
2946*03ce13f7SAndroid Build Coastguard Worker Value *packed = Nucleus::createShuffleVector(Int4(lo).loadValue(), Int4(hi).loadValue(), shuffle);
2947*03ce13f7SAndroid Build Coastguard Worker
2948*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createBitCast(packed, Int2::type()));
2949*03ce13f7SAndroid Build Coastguard Worker }
2950*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<Int2> rhs)2951*03ce13f7SAndroid Build Coastguard Worker RValue<Int2> Int2::operator=(RValue<Int2> rhs)
2952*03ce13f7SAndroid Build Coastguard Worker {
2953*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
2954*03ce13f7SAndroid Build Coastguard Worker }
2955*03ce13f7SAndroid Build Coastguard Worker
operator =(const Int2 & rhs)2956*03ce13f7SAndroid Build Coastguard Worker RValue<Int2> Int2::operator=(const Int2 &rhs)
2957*03ce13f7SAndroid Build Coastguard Worker {
2958*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
2959*03ce13f7SAndroid Build Coastguard Worker }
2960*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<Int2> & rhs)2961*03ce13f7SAndroid Build Coastguard Worker RValue<Int2> Int2::operator=(const Reference<Int2> &rhs)
2962*03ce13f7SAndroid Build Coastguard Worker {
2963*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
2964*03ce13f7SAndroid Build Coastguard Worker }
2965*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<Int2> lhs,RValue<Int2> rhs)2966*03ce13f7SAndroid Build Coastguard Worker RValue<Int2> operator+(RValue<Int2> lhs, RValue<Int2> rhs)
2967*03ce13f7SAndroid Build Coastguard Worker {
2968*03ce13f7SAndroid Build Coastguard Worker return RValue<Int2>(Nucleus::createAdd(lhs.value(), rhs.value()));
2969*03ce13f7SAndroid Build Coastguard Worker }
2970*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<Int2> lhs,RValue<Int2> rhs)2971*03ce13f7SAndroid Build Coastguard Worker RValue<Int2> operator-(RValue<Int2> lhs, RValue<Int2> rhs)
2972*03ce13f7SAndroid Build Coastguard Worker {
2973*03ce13f7SAndroid Build Coastguard Worker return RValue<Int2>(Nucleus::createSub(lhs.value(), rhs.value()));
2974*03ce13f7SAndroid Build Coastguard Worker }
2975*03ce13f7SAndroid Build Coastguard Worker
2976*03ce13f7SAndroid Build Coastguard Worker // RValue<Int2> operator*(RValue<Int2> lhs, RValue<Int2> rhs)
2977*03ce13f7SAndroid Build Coastguard Worker // {
2978*03ce13f7SAndroid Build Coastguard Worker // return RValue<Int2>(Nucleus::createMul(lhs.value(), rhs.value()));
2979*03ce13f7SAndroid Build Coastguard Worker // }
2980*03ce13f7SAndroid Build Coastguard Worker
2981*03ce13f7SAndroid Build Coastguard Worker // RValue<Int2> operator/(RValue<Int2> lhs, RValue<Int2> rhs)
2982*03ce13f7SAndroid Build Coastguard Worker // {
2983*03ce13f7SAndroid Build Coastguard Worker // return RValue<Int2>(Nucleus::createSDiv(lhs.value(), rhs.value()));
2984*03ce13f7SAndroid Build Coastguard Worker // }
2985*03ce13f7SAndroid Build Coastguard Worker
2986*03ce13f7SAndroid Build Coastguard Worker // RValue<Int2> operator%(RValue<Int2> lhs, RValue<Int2> rhs)
2987*03ce13f7SAndroid Build Coastguard Worker // {
2988*03ce13f7SAndroid Build Coastguard Worker // return RValue<Int2>(Nucleus::createSRem(lhs.value(), rhs.value()));
2989*03ce13f7SAndroid Build Coastguard Worker // }
2990*03ce13f7SAndroid Build Coastguard Worker
operator &(RValue<Int2> lhs,RValue<Int2> rhs)2991*03ce13f7SAndroid Build Coastguard Worker RValue<Int2> operator&(RValue<Int2> lhs, RValue<Int2> rhs)
2992*03ce13f7SAndroid Build Coastguard Worker {
2993*03ce13f7SAndroid Build Coastguard Worker return RValue<Int2>(Nucleus::createAnd(lhs.value(), rhs.value()));
2994*03ce13f7SAndroid Build Coastguard Worker }
2995*03ce13f7SAndroid Build Coastguard Worker
operator |(RValue<Int2> lhs,RValue<Int2> rhs)2996*03ce13f7SAndroid Build Coastguard Worker RValue<Int2> operator|(RValue<Int2> lhs, RValue<Int2> rhs)
2997*03ce13f7SAndroid Build Coastguard Worker {
2998*03ce13f7SAndroid Build Coastguard Worker return RValue<Int2>(Nucleus::createOr(lhs.value(), rhs.value()));
2999*03ce13f7SAndroid Build Coastguard Worker }
3000*03ce13f7SAndroid Build Coastguard Worker
operator ^(RValue<Int2> lhs,RValue<Int2> rhs)3001*03ce13f7SAndroid Build Coastguard Worker RValue<Int2> operator^(RValue<Int2> lhs, RValue<Int2> rhs)
3002*03ce13f7SAndroid Build Coastguard Worker {
3003*03ce13f7SAndroid Build Coastguard Worker return RValue<Int2>(Nucleus::createXor(lhs.value(), rhs.value()));
3004*03ce13f7SAndroid Build Coastguard Worker }
3005*03ce13f7SAndroid Build Coastguard Worker
operator +=(Int2 & lhs,RValue<Int2> rhs)3006*03ce13f7SAndroid Build Coastguard Worker RValue<Int2> operator+=(Int2 &lhs, RValue<Int2> rhs)
3007*03ce13f7SAndroid Build Coastguard Worker {
3008*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs + rhs;
3009*03ce13f7SAndroid Build Coastguard Worker }
3010*03ce13f7SAndroid Build Coastguard Worker
operator -=(Int2 & lhs,RValue<Int2> rhs)3011*03ce13f7SAndroid Build Coastguard Worker RValue<Int2> operator-=(Int2 &lhs, RValue<Int2> rhs)
3012*03ce13f7SAndroid Build Coastguard Worker {
3013*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs - rhs;
3014*03ce13f7SAndroid Build Coastguard Worker }
3015*03ce13f7SAndroid Build Coastguard Worker
3016*03ce13f7SAndroid Build Coastguard Worker // RValue<Int2> operator*=(Int2 &lhs, RValue<Int2> rhs)
3017*03ce13f7SAndroid Build Coastguard Worker // {
3018*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs * rhs;
3019*03ce13f7SAndroid Build Coastguard Worker // }
3020*03ce13f7SAndroid Build Coastguard Worker
3021*03ce13f7SAndroid Build Coastguard Worker // RValue<Int2> operator/=(Int2 &lhs, RValue<Int2> rhs)
3022*03ce13f7SAndroid Build Coastguard Worker // {
3023*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs / rhs;
3024*03ce13f7SAndroid Build Coastguard Worker // }
3025*03ce13f7SAndroid Build Coastguard Worker
3026*03ce13f7SAndroid Build Coastguard Worker // RValue<Int2> operator%=(Int2 &lhs, RValue<Int2> rhs)
3027*03ce13f7SAndroid Build Coastguard Worker // {
3028*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs % rhs;
3029*03ce13f7SAndroid Build Coastguard Worker // }
3030*03ce13f7SAndroid Build Coastguard Worker
operator &=(Int2 & lhs,RValue<Int2> rhs)3031*03ce13f7SAndroid Build Coastguard Worker RValue<Int2> operator&=(Int2 &lhs, RValue<Int2> rhs)
3032*03ce13f7SAndroid Build Coastguard Worker {
3033*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs & rhs;
3034*03ce13f7SAndroid Build Coastguard Worker }
3035*03ce13f7SAndroid Build Coastguard Worker
operator |=(Int2 & lhs,RValue<Int2> rhs)3036*03ce13f7SAndroid Build Coastguard Worker RValue<Int2> operator|=(Int2 &lhs, RValue<Int2> rhs)
3037*03ce13f7SAndroid Build Coastguard Worker {
3038*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs | rhs;
3039*03ce13f7SAndroid Build Coastguard Worker }
3040*03ce13f7SAndroid Build Coastguard Worker
operator ^=(Int2 & lhs,RValue<Int2> rhs)3041*03ce13f7SAndroid Build Coastguard Worker RValue<Int2> operator^=(Int2 &lhs, RValue<Int2> rhs)
3042*03ce13f7SAndroid Build Coastguard Worker {
3043*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs ^ rhs;
3044*03ce13f7SAndroid Build Coastguard Worker }
3045*03ce13f7SAndroid Build Coastguard Worker
operator <<=(Int2 & lhs,unsigned char rhs)3046*03ce13f7SAndroid Build Coastguard Worker RValue<Int2> operator<<=(Int2 &lhs, unsigned char rhs)
3047*03ce13f7SAndroid Build Coastguard Worker {
3048*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs << rhs;
3049*03ce13f7SAndroid Build Coastguard Worker }
3050*03ce13f7SAndroid Build Coastguard Worker
operator >>=(Int2 & lhs,unsigned char rhs)3051*03ce13f7SAndroid Build Coastguard Worker RValue<Int2> operator>>=(Int2 &lhs, unsigned char rhs)
3052*03ce13f7SAndroid Build Coastguard Worker {
3053*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs >> rhs;
3054*03ce13f7SAndroid Build Coastguard Worker }
3055*03ce13f7SAndroid Build Coastguard Worker
3056*03ce13f7SAndroid Build Coastguard Worker // RValue<Int2> operator+(RValue<Int2> val)
3057*03ce13f7SAndroid Build Coastguard Worker // {
3058*03ce13f7SAndroid Build Coastguard Worker // return val;
3059*03ce13f7SAndroid Build Coastguard Worker // }
3060*03ce13f7SAndroid Build Coastguard Worker
3061*03ce13f7SAndroid Build Coastguard Worker // RValue<Int2> operator-(RValue<Int2> val)
3062*03ce13f7SAndroid Build Coastguard Worker // {
3063*03ce13f7SAndroid Build Coastguard Worker // return RValue<Int2>(Nucleus::createNeg(val.value()));
3064*03ce13f7SAndroid Build Coastguard Worker // }
3065*03ce13f7SAndroid Build Coastguard Worker
operator ~(RValue<Int2> val)3066*03ce13f7SAndroid Build Coastguard Worker RValue<Int2> operator~(RValue<Int2> val)
3067*03ce13f7SAndroid Build Coastguard Worker {
3068*03ce13f7SAndroid Build Coastguard Worker return RValue<Int2>(Nucleus::createNot(val.value()));
3069*03ce13f7SAndroid Build Coastguard Worker }
3070*03ce13f7SAndroid Build Coastguard Worker
UnpackLow(RValue<Int2> x,RValue<Int2> y)3071*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> UnpackLow(RValue<Int2> x, RValue<Int2> y)
3072*03ce13f7SAndroid Build Coastguard Worker {
3073*03ce13f7SAndroid Build Coastguard Worker // TODO(b/148379603): Optimize narrowing swizzle.
3074*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = { 0, 4, 1, 5 }; // Real type is v4i32
3075*03ce13f7SAndroid Build Coastguard Worker return As<Short4>(Nucleus::createShuffleVector(x.value(), y.value(), shuffle));
3076*03ce13f7SAndroid Build Coastguard Worker }
3077*03ce13f7SAndroid Build Coastguard Worker
UnpackHigh(RValue<Int2> x,RValue<Int2> y)3078*03ce13f7SAndroid Build Coastguard Worker RValue<Short4> UnpackHigh(RValue<Int2> x, RValue<Int2> y)
3079*03ce13f7SAndroid Build Coastguard Worker {
3080*03ce13f7SAndroid Build Coastguard Worker // TODO(b/148379603): Optimize narrowing swizzle.
3081*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = { 0, 4, 1, 5 }; // Real type is v4i32
3082*03ce13f7SAndroid Build Coastguard Worker auto lowHigh = RValue<Int4>(Nucleus::createShuffleVector(x.value(), y.value(), shuffle));
3083*03ce13f7SAndroid Build Coastguard Worker return As<Short4>(Swizzle(lowHigh, 0x2323));
3084*03ce13f7SAndroid Build Coastguard Worker }
3085*03ce13f7SAndroid Build Coastguard Worker
Extract(RValue<Int2> val,int i)3086*03ce13f7SAndroid Build Coastguard Worker RValue<Int> Extract(RValue<Int2> val, int i)
3087*03ce13f7SAndroid Build Coastguard Worker {
3088*03ce13f7SAndroid Build Coastguard Worker return RValue<Int>(Nucleus::createExtractElement(val.value(), Int::type(), i));
3089*03ce13f7SAndroid Build Coastguard Worker }
3090*03ce13f7SAndroid Build Coastguard Worker
Insert(RValue<Int2> val,RValue<Int> element,int i)3091*03ce13f7SAndroid Build Coastguard Worker RValue<Int2> Insert(RValue<Int2> val, RValue<Int> element, int i)
3092*03ce13f7SAndroid Build Coastguard Worker {
3093*03ce13f7SAndroid Build Coastguard Worker return RValue<Int2>(Nucleus::createInsertElement(val.value(), element.value(), i));
3094*03ce13f7SAndroid Build Coastguard Worker }
3095*03ce13f7SAndroid Build Coastguard Worker
UInt2(unsigned int x,unsigned int y)3096*03ce13f7SAndroid Build Coastguard Worker UInt2::UInt2(unsigned int x, unsigned int y)
3097*03ce13f7SAndroid Build Coastguard Worker {
3098*03ce13f7SAndroid Build Coastguard Worker std::vector<int64_t> constantVector = { x, y };
3099*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantVector(constantVector, type()));
3100*03ce13f7SAndroid Build Coastguard Worker }
3101*03ce13f7SAndroid Build Coastguard Worker
UInt2(RValue<UInt2> rhs)3102*03ce13f7SAndroid Build Coastguard Worker UInt2::UInt2(RValue<UInt2> rhs)
3103*03ce13f7SAndroid Build Coastguard Worker {
3104*03ce13f7SAndroid Build Coastguard Worker store(rhs);
3105*03ce13f7SAndroid Build Coastguard Worker }
3106*03ce13f7SAndroid Build Coastguard Worker
UInt2(const UInt2 & rhs)3107*03ce13f7SAndroid Build Coastguard Worker UInt2::UInt2(const UInt2 &rhs)
3108*03ce13f7SAndroid Build Coastguard Worker {
3109*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
3110*03ce13f7SAndroid Build Coastguard Worker }
3111*03ce13f7SAndroid Build Coastguard Worker
UInt2(const Reference<UInt2> & rhs)3112*03ce13f7SAndroid Build Coastguard Worker UInt2::UInt2(const Reference<UInt2> &rhs)
3113*03ce13f7SAndroid Build Coastguard Worker {
3114*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
3115*03ce13f7SAndroid Build Coastguard Worker }
3116*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<UInt2> rhs)3117*03ce13f7SAndroid Build Coastguard Worker RValue<UInt2> UInt2::operator=(RValue<UInt2> rhs)
3118*03ce13f7SAndroid Build Coastguard Worker {
3119*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
3120*03ce13f7SAndroid Build Coastguard Worker }
3121*03ce13f7SAndroid Build Coastguard Worker
operator =(const UInt2 & rhs)3122*03ce13f7SAndroid Build Coastguard Worker RValue<UInt2> UInt2::operator=(const UInt2 &rhs)
3123*03ce13f7SAndroid Build Coastguard Worker {
3124*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
3125*03ce13f7SAndroid Build Coastguard Worker }
3126*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<UInt2> & rhs)3127*03ce13f7SAndroid Build Coastguard Worker RValue<UInt2> UInt2::operator=(const Reference<UInt2> &rhs)
3128*03ce13f7SAndroid Build Coastguard Worker {
3129*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
3130*03ce13f7SAndroid Build Coastguard Worker }
3131*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<UInt2> lhs,RValue<UInt2> rhs)3132*03ce13f7SAndroid Build Coastguard Worker RValue<UInt2> operator+(RValue<UInt2> lhs, RValue<UInt2> rhs)
3133*03ce13f7SAndroid Build Coastguard Worker {
3134*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt2>(Nucleus::createAdd(lhs.value(), rhs.value()));
3135*03ce13f7SAndroid Build Coastguard Worker }
3136*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<UInt2> lhs,RValue<UInt2> rhs)3137*03ce13f7SAndroid Build Coastguard Worker RValue<UInt2> operator-(RValue<UInt2> lhs, RValue<UInt2> rhs)
3138*03ce13f7SAndroid Build Coastguard Worker {
3139*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt2>(Nucleus::createSub(lhs.value(), rhs.value()));
3140*03ce13f7SAndroid Build Coastguard Worker }
3141*03ce13f7SAndroid Build Coastguard Worker
3142*03ce13f7SAndroid Build Coastguard Worker // RValue<UInt2> operator*(RValue<UInt2> lhs, RValue<UInt2> rhs)
3143*03ce13f7SAndroid Build Coastguard Worker // {
3144*03ce13f7SAndroid Build Coastguard Worker // return RValue<UInt2>(Nucleus::createMul(lhs.value(), rhs.value()));
3145*03ce13f7SAndroid Build Coastguard Worker // }
3146*03ce13f7SAndroid Build Coastguard Worker
3147*03ce13f7SAndroid Build Coastguard Worker // RValue<UInt2> operator/(RValue<UInt2> lhs, RValue<UInt2> rhs)
3148*03ce13f7SAndroid Build Coastguard Worker // {
3149*03ce13f7SAndroid Build Coastguard Worker // return RValue<UInt2>(Nucleus::createUDiv(lhs.value(), rhs.value()));
3150*03ce13f7SAndroid Build Coastguard Worker // }
3151*03ce13f7SAndroid Build Coastguard Worker
3152*03ce13f7SAndroid Build Coastguard Worker // RValue<UInt2> operator%(RValue<UInt2> lhs, RValue<UInt2> rhs)
3153*03ce13f7SAndroid Build Coastguard Worker // {
3154*03ce13f7SAndroid Build Coastguard Worker // return RValue<UInt2>(Nucleus::createURem(lhs.value(), rhs.value()));
3155*03ce13f7SAndroid Build Coastguard Worker // }
3156*03ce13f7SAndroid Build Coastguard Worker
operator &(RValue<UInt2> lhs,RValue<UInt2> rhs)3157*03ce13f7SAndroid Build Coastguard Worker RValue<UInt2> operator&(RValue<UInt2> lhs, RValue<UInt2> rhs)
3158*03ce13f7SAndroid Build Coastguard Worker {
3159*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt2>(Nucleus::createAnd(lhs.value(), rhs.value()));
3160*03ce13f7SAndroid Build Coastguard Worker }
3161*03ce13f7SAndroid Build Coastguard Worker
operator |(RValue<UInt2> lhs,RValue<UInt2> rhs)3162*03ce13f7SAndroid Build Coastguard Worker RValue<UInt2> operator|(RValue<UInt2> lhs, RValue<UInt2> rhs)
3163*03ce13f7SAndroid Build Coastguard Worker {
3164*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt2>(Nucleus::createOr(lhs.value(), rhs.value()));
3165*03ce13f7SAndroid Build Coastguard Worker }
3166*03ce13f7SAndroid Build Coastguard Worker
operator ^(RValue<UInt2> lhs,RValue<UInt2> rhs)3167*03ce13f7SAndroid Build Coastguard Worker RValue<UInt2> operator^(RValue<UInt2> lhs, RValue<UInt2> rhs)
3168*03ce13f7SAndroid Build Coastguard Worker {
3169*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt2>(Nucleus::createXor(lhs.value(), rhs.value()));
3170*03ce13f7SAndroid Build Coastguard Worker }
3171*03ce13f7SAndroid Build Coastguard Worker
operator +=(UInt2 & lhs,RValue<UInt2> rhs)3172*03ce13f7SAndroid Build Coastguard Worker RValue<UInt2> operator+=(UInt2 &lhs, RValue<UInt2> rhs)
3173*03ce13f7SAndroid Build Coastguard Worker {
3174*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs + rhs;
3175*03ce13f7SAndroid Build Coastguard Worker }
3176*03ce13f7SAndroid Build Coastguard Worker
operator -=(UInt2 & lhs,RValue<UInt2> rhs)3177*03ce13f7SAndroid Build Coastguard Worker RValue<UInt2> operator-=(UInt2 &lhs, RValue<UInt2> rhs)
3178*03ce13f7SAndroid Build Coastguard Worker {
3179*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs - rhs;
3180*03ce13f7SAndroid Build Coastguard Worker }
3181*03ce13f7SAndroid Build Coastguard Worker
3182*03ce13f7SAndroid Build Coastguard Worker // RValue<UInt2> operator*=(UInt2 &lhs, RValue<UInt2> rhs)
3183*03ce13f7SAndroid Build Coastguard Worker // {
3184*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs * rhs;
3185*03ce13f7SAndroid Build Coastguard Worker // }
3186*03ce13f7SAndroid Build Coastguard Worker
3187*03ce13f7SAndroid Build Coastguard Worker // RValue<UInt2> operator/=(UInt2 &lhs, RValue<UInt2> rhs)
3188*03ce13f7SAndroid Build Coastguard Worker // {
3189*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs / rhs;
3190*03ce13f7SAndroid Build Coastguard Worker // }
3191*03ce13f7SAndroid Build Coastguard Worker
3192*03ce13f7SAndroid Build Coastguard Worker // RValue<UInt2> operator%=(UInt2 &lhs, RValue<UInt2> rhs)
3193*03ce13f7SAndroid Build Coastguard Worker // {
3194*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs % rhs;
3195*03ce13f7SAndroid Build Coastguard Worker // }
3196*03ce13f7SAndroid Build Coastguard Worker
operator &=(UInt2 & lhs,RValue<UInt2> rhs)3197*03ce13f7SAndroid Build Coastguard Worker RValue<UInt2> operator&=(UInt2 &lhs, RValue<UInt2> rhs)
3198*03ce13f7SAndroid Build Coastguard Worker {
3199*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs & rhs;
3200*03ce13f7SAndroid Build Coastguard Worker }
3201*03ce13f7SAndroid Build Coastguard Worker
operator |=(UInt2 & lhs,RValue<UInt2> rhs)3202*03ce13f7SAndroid Build Coastguard Worker RValue<UInt2> operator|=(UInt2 &lhs, RValue<UInt2> rhs)
3203*03ce13f7SAndroid Build Coastguard Worker {
3204*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs | rhs;
3205*03ce13f7SAndroid Build Coastguard Worker }
3206*03ce13f7SAndroid Build Coastguard Worker
operator ^=(UInt2 & lhs,RValue<UInt2> rhs)3207*03ce13f7SAndroid Build Coastguard Worker RValue<UInt2> operator^=(UInt2 &lhs, RValue<UInt2> rhs)
3208*03ce13f7SAndroid Build Coastguard Worker {
3209*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs ^ rhs;
3210*03ce13f7SAndroid Build Coastguard Worker }
3211*03ce13f7SAndroid Build Coastguard Worker
operator <<=(UInt2 & lhs,unsigned char rhs)3212*03ce13f7SAndroid Build Coastguard Worker RValue<UInt2> operator<<=(UInt2 &lhs, unsigned char rhs)
3213*03ce13f7SAndroid Build Coastguard Worker {
3214*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs << rhs;
3215*03ce13f7SAndroid Build Coastguard Worker }
3216*03ce13f7SAndroid Build Coastguard Worker
operator >>=(UInt2 & lhs,unsigned char rhs)3217*03ce13f7SAndroid Build Coastguard Worker RValue<UInt2> operator>>=(UInt2 &lhs, unsigned char rhs)
3218*03ce13f7SAndroid Build Coastguard Worker {
3219*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs >> rhs;
3220*03ce13f7SAndroid Build Coastguard Worker }
3221*03ce13f7SAndroid Build Coastguard Worker
3222*03ce13f7SAndroid Build Coastguard Worker // RValue<UInt2> operator+(RValue<UInt2> val)
3223*03ce13f7SAndroid Build Coastguard Worker // {
3224*03ce13f7SAndroid Build Coastguard Worker // return val;
3225*03ce13f7SAndroid Build Coastguard Worker // }
3226*03ce13f7SAndroid Build Coastguard Worker
3227*03ce13f7SAndroid Build Coastguard Worker // RValue<UInt2> operator-(RValue<UInt2> val)
3228*03ce13f7SAndroid Build Coastguard Worker // {
3229*03ce13f7SAndroid Build Coastguard Worker // return RValue<UInt2>(Nucleus::createNeg(val.value()));
3230*03ce13f7SAndroid Build Coastguard Worker // }
3231*03ce13f7SAndroid Build Coastguard Worker
operator ~(RValue<UInt2> val)3232*03ce13f7SAndroid Build Coastguard Worker RValue<UInt2> operator~(RValue<UInt2> val)
3233*03ce13f7SAndroid Build Coastguard Worker {
3234*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt2>(Nucleus::createNot(val.value()));
3235*03ce13f7SAndroid Build Coastguard Worker }
3236*03ce13f7SAndroid Build Coastguard Worker
Extract(RValue<UInt2> val,int i)3237*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> Extract(RValue<UInt2> val, int i)
3238*03ce13f7SAndroid Build Coastguard Worker {
3239*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createExtractElement(val.value(), UInt::type(), i));
3240*03ce13f7SAndroid Build Coastguard Worker }
3241*03ce13f7SAndroid Build Coastguard Worker
Insert(RValue<UInt2> val,RValue<UInt> element,int i)3242*03ce13f7SAndroid Build Coastguard Worker RValue<UInt2> Insert(RValue<UInt2> val, RValue<UInt> element, int i)
3243*03ce13f7SAndroid Build Coastguard Worker {
3244*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt2>(Nucleus::createInsertElement(val.value(), element.value(), i));
3245*03ce13f7SAndroid Build Coastguard Worker }
3246*03ce13f7SAndroid Build Coastguard Worker
Int4()3247*03ce13f7SAndroid Build Coastguard Worker Int4::Int4()
3248*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3249*03ce13f7SAndroid Build Coastguard Worker {
3250*03ce13f7SAndroid Build Coastguard Worker }
3251*03ce13f7SAndroid Build Coastguard Worker
Int4(RValue<Float4> cast)3252*03ce13f7SAndroid Build Coastguard Worker Int4::Int4(RValue<Float4> cast)
3253*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3254*03ce13f7SAndroid Build Coastguard Worker {
3255*03ce13f7SAndroid Build Coastguard Worker Value *xyzw = Nucleus::createFPToSI(cast.value(), Int4::type());
3256*03ce13f7SAndroid Build Coastguard Worker
3257*03ce13f7SAndroid Build Coastguard Worker storeValue(xyzw);
3258*03ce13f7SAndroid Build Coastguard Worker }
3259*03ce13f7SAndroid Build Coastguard Worker
Int4(int xyzw)3260*03ce13f7SAndroid Build Coastguard Worker Int4::Int4(int xyzw)
3261*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3262*03ce13f7SAndroid Build Coastguard Worker {
3263*03ce13f7SAndroid Build Coastguard Worker constant(xyzw, xyzw, xyzw, xyzw);
3264*03ce13f7SAndroid Build Coastguard Worker }
3265*03ce13f7SAndroid Build Coastguard Worker
Int4(int x,int yzw)3266*03ce13f7SAndroid Build Coastguard Worker Int4::Int4(int x, int yzw)
3267*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3268*03ce13f7SAndroid Build Coastguard Worker {
3269*03ce13f7SAndroid Build Coastguard Worker constant(x, yzw, yzw, yzw);
3270*03ce13f7SAndroid Build Coastguard Worker }
3271*03ce13f7SAndroid Build Coastguard Worker
Int4(int x,int y,int zw)3272*03ce13f7SAndroid Build Coastguard Worker Int4::Int4(int x, int y, int zw)
3273*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3274*03ce13f7SAndroid Build Coastguard Worker {
3275*03ce13f7SAndroid Build Coastguard Worker constant(x, y, zw, zw);
3276*03ce13f7SAndroid Build Coastguard Worker }
3277*03ce13f7SAndroid Build Coastguard Worker
Int4(int x,int y,int z,int w)3278*03ce13f7SAndroid Build Coastguard Worker Int4::Int4(int x, int y, int z, int w)
3279*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3280*03ce13f7SAndroid Build Coastguard Worker {
3281*03ce13f7SAndroid Build Coastguard Worker constant(x, y, z, w);
3282*03ce13f7SAndroid Build Coastguard Worker }
3283*03ce13f7SAndroid Build Coastguard Worker
constant(int x,int y,int z,int w)3284*03ce13f7SAndroid Build Coastguard Worker void Int4::constant(int x, int y, int z, int w)
3285*03ce13f7SAndroid Build Coastguard Worker {
3286*03ce13f7SAndroid Build Coastguard Worker std::vector<int64_t> constantVector = { x, y, z, w };
3287*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantVector(constantVector, type()));
3288*03ce13f7SAndroid Build Coastguard Worker }
3289*03ce13f7SAndroid Build Coastguard Worker
Int4(RValue<Int4> rhs)3290*03ce13f7SAndroid Build Coastguard Worker Int4::Int4(RValue<Int4> rhs)
3291*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3292*03ce13f7SAndroid Build Coastguard Worker {
3293*03ce13f7SAndroid Build Coastguard Worker store(rhs);
3294*03ce13f7SAndroid Build Coastguard Worker }
3295*03ce13f7SAndroid Build Coastguard Worker
Int4(const Int4 & rhs)3296*03ce13f7SAndroid Build Coastguard Worker Int4::Int4(const Int4 &rhs)
3297*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3298*03ce13f7SAndroid Build Coastguard Worker {
3299*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
3300*03ce13f7SAndroid Build Coastguard Worker }
3301*03ce13f7SAndroid Build Coastguard Worker
Int4(const Reference<Int4> & rhs)3302*03ce13f7SAndroid Build Coastguard Worker Int4::Int4(const Reference<Int4> &rhs)
3303*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3304*03ce13f7SAndroid Build Coastguard Worker {
3305*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
3306*03ce13f7SAndroid Build Coastguard Worker }
3307*03ce13f7SAndroid Build Coastguard Worker
Int4(RValue<UInt4> rhs)3308*03ce13f7SAndroid Build Coastguard Worker Int4::Int4(RValue<UInt4> rhs)
3309*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3310*03ce13f7SAndroid Build Coastguard Worker {
3311*03ce13f7SAndroid Build Coastguard Worker storeValue(rhs.value());
3312*03ce13f7SAndroid Build Coastguard Worker }
3313*03ce13f7SAndroid Build Coastguard Worker
Int4(const UInt4 & rhs)3314*03ce13f7SAndroid Build Coastguard Worker Int4::Int4(const UInt4 &rhs)
3315*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3316*03ce13f7SAndroid Build Coastguard Worker {
3317*03ce13f7SAndroid Build Coastguard Worker storeValue(rhs.loadValue());
3318*03ce13f7SAndroid Build Coastguard Worker }
3319*03ce13f7SAndroid Build Coastguard Worker
Int4(const Reference<UInt4> & rhs)3320*03ce13f7SAndroid Build Coastguard Worker Int4::Int4(const Reference<UInt4> &rhs)
3321*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3322*03ce13f7SAndroid Build Coastguard Worker {
3323*03ce13f7SAndroid Build Coastguard Worker storeValue(rhs.loadValue());
3324*03ce13f7SAndroid Build Coastguard Worker }
3325*03ce13f7SAndroid Build Coastguard Worker
Int4(RValue<Int2> lo,RValue<Int2> hi)3326*03ce13f7SAndroid Build Coastguard Worker Int4::Int4(RValue<Int2> lo, RValue<Int2> hi)
3327*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3328*03ce13f7SAndroid Build Coastguard Worker {
3329*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = { 0, 1, 4, 5 }; // Real type is v4i32
3330*03ce13f7SAndroid Build Coastguard Worker Value *packed = Nucleus::createShuffleVector(lo.value(), hi.value(), shuffle);
3331*03ce13f7SAndroid Build Coastguard Worker
3332*03ce13f7SAndroid Build Coastguard Worker storeValue(packed);
3333*03ce13f7SAndroid Build Coastguard Worker }
3334*03ce13f7SAndroid Build Coastguard Worker
Int4(const Int & rhs)3335*03ce13f7SAndroid Build Coastguard Worker Int4::Int4(const Int &rhs)
3336*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3337*03ce13f7SAndroid Build Coastguard Worker {
3338*03ce13f7SAndroid Build Coastguard Worker *this = RValue<Int>(rhs.loadValue());
3339*03ce13f7SAndroid Build Coastguard Worker }
3340*03ce13f7SAndroid Build Coastguard Worker
Int4(const Reference<Int> & rhs)3341*03ce13f7SAndroid Build Coastguard Worker Int4::Int4(const Reference<Int> &rhs)
3342*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3343*03ce13f7SAndroid Build Coastguard Worker {
3344*03ce13f7SAndroid Build Coastguard Worker *this = RValue<Int>(rhs.loadValue());
3345*03ce13f7SAndroid Build Coastguard Worker }
3346*03ce13f7SAndroid Build Coastguard Worker
operator =(int x)3347*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> Int4::operator=(int x)
3348*03ce13f7SAndroid Build Coastguard Worker {
3349*03ce13f7SAndroid Build Coastguard Worker return *this = Int4(x, x, x, x);
3350*03ce13f7SAndroid Build Coastguard Worker }
3351*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<Int4> rhs)3352*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> Int4::operator=(RValue<Int4> rhs)
3353*03ce13f7SAndroid Build Coastguard Worker {
3354*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
3355*03ce13f7SAndroid Build Coastguard Worker }
3356*03ce13f7SAndroid Build Coastguard Worker
operator =(const Int4 & rhs)3357*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> Int4::operator=(const Int4 &rhs)
3358*03ce13f7SAndroid Build Coastguard Worker {
3359*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
3360*03ce13f7SAndroid Build Coastguard Worker }
3361*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<Int4> & rhs)3362*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> Int4::operator=(const Reference<Int4> &rhs)
3363*03ce13f7SAndroid Build Coastguard Worker {
3364*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
3365*03ce13f7SAndroid Build Coastguard Worker }
3366*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<Int4> lhs,RValue<Int4> rhs)3367*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator+(RValue<Int4> lhs, RValue<Int4> rhs)
3368*03ce13f7SAndroid Build Coastguard Worker {
3369*03ce13f7SAndroid Build Coastguard Worker return RValue<Int4>(Nucleus::createAdd(lhs.value(), rhs.value()));
3370*03ce13f7SAndroid Build Coastguard Worker }
3371*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<Int4> lhs,RValue<Int4> rhs)3372*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator-(RValue<Int4> lhs, RValue<Int4> rhs)
3373*03ce13f7SAndroid Build Coastguard Worker {
3374*03ce13f7SAndroid Build Coastguard Worker return RValue<Int4>(Nucleus::createSub(lhs.value(), rhs.value()));
3375*03ce13f7SAndroid Build Coastguard Worker }
3376*03ce13f7SAndroid Build Coastguard Worker
operator *(RValue<Int4> lhs,RValue<Int4> rhs)3377*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator*(RValue<Int4> lhs, RValue<Int4> rhs)
3378*03ce13f7SAndroid Build Coastguard Worker {
3379*03ce13f7SAndroid Build Coastguard Worker return RValue<Int4>(Nucleus::createMul(lhs.value(), rhs.value()));
3380*03ce13f7SAndroid Build Coastguard Worker }
3381*03ce13f7SAndroid Build Coastguard Worker
operator /(RValue<Int4> lhs,RValue<Int4> rhs)3382*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator/(RValue<Int4> lhs, RValue<Int4> rhs)
3383*03ce13f7SAndroid Build Coastguard Worker {
3384*03ce13f7SAndroid Build Coastguard Worker return RValue<Int4>(Nucleus::createSDiv(lhs.value(), rhs.value()));
3385*03ce13f7SAndroid Build Coastguard Worker }
3386*03ce13f7SAndroid Build Coastguard Worker
operator %(RValue<Int4> lhs,RValue<Int4> rhs)3387*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator%(RValue<Int4> lhs, RValue<Int4> rhs)
3388*03ce13f7SAndroid Build Coastguard Worker {
3389*03ce13f7SAndroid Build Coastguard Worker return RValue<Int4>(Nucleus::createSRem(lhs.value(), rhs.value()));
3390*03ce13f7SAndroid Build Coastguard Worker }
3391*03ce13f7SAndroid Build Coastguard Worker
operator &(RValue<Int4> lhs,RValue<Int4> rhs)3392*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator&(RValue<Int4> lhs, RValue<Int4> rhs)
3393*03ce13f7SAndroid Build Coastguard Worker {
3394*03ce13f7SAndroid Build Coastguard Worker return RValue<Int4>(Nucleus::createAnd(lhs.value(), rhs.value()));
3395*03ce13f7SAndroid Build Coastguard Worker }
3396*03ce13f7SAndroid Build Coastguard Worker
operator |(RValue<Int4> lhs,RValue<Int4> rhs)3397*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator|(RValue<Int4> lhs, RValue<Int4> rhs)
3398*03ce13f7SAndroid Build Coastguard Worker {
3399*03ce13f7SAndroid Build Coastguard Worker return RValue<Int4>(Nucleus::createOr(lhs.value(), rhs.value()));
3400*03ce13f7SAndroid Build Coastguard Worker }
3401*03ce13f7SAndroid Build Coastguard Worker
operator ^(RValue<Int4> lhs,RValue<Int4> rhs)3402*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator^(RValue<Int4> lhs, RValue<Int4> rhs)
3403*03ce13f7SAndroid Build Coastguard Worker {
3404*03ce13f7SAndroid Build Coastguard Worker return RValue<Int4>(Nucleus::createXor(lhs.value(), rhs.value()));
3405*03ce13f7SAndroid Build Coastguard Worker }
3406*03ce13f7SAndroid Build Coastguard Worker
operator <<(RValue<Int4> lhs,RValue<Int4> rhs)3407*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator<<(RValue<Int4> lhs, RValue<Int4> rhs)
3408*03ce13f7SAndroid Build Coastguard Worker {
3409*03ce13f7SAndroid Build Coastguard Worker return RValue<Int4>(Nucleus::createShl(lhs.value(), rhs.value()));
3410*03ce13f7SAndroid Build Coastguard Worker }
3411*03ce13f7SAndroid Build Coastguard Worker
operator >>(RValue<Int4> lhs,RValue<Int4> rhs)3412*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator>>(RValue<Int4> lhs, RValue<Int4> rhs)
3413*03ce13f7SAndroid Build Coastguard Worker {
3414*03ce13f7SAndroid Build Coastguard Worker return RValue<Int4>(Nucleus::createAShr(lhs.value(), rhs.value()));
3415*03ce13f7SAndroid Build Coastguard Worker }
3416*03ce13f7SAndroid Build Coastguard Worker
operator +=(Int4 & lhs,RValue<Int4> rhs)3417*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator+=(Int4 &lhs, RValue<Int4> rhs)
3418*03ce13f7SAndroid Build Coastguard Worker {
3419*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs + rhs;
3420*03ce13f7SAndroid Build Coastguard Worker }
3421*03ce13f7SAndroid Build Coastguard Worker
operator -=(Int4 & lhs,RValue<Int4> rhs)3422*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator-=(Int4 &lhs, RValue<Int4> rhs)
3423*03ce13f7SAndroid Build Coastguard Worker {
3424*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs - rhs;
3425*03ce13f7SAndroid Build Coastguard Worker }
3426*03ce13f7SAndroid Build Coastguard Worker
operator *=(Int4 & lhs,RValue<Int4> rhs)3427*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator*=(Int4 &lhs, RValue<Int4> rhs)
3428*03ce13f7SAndroid Build Coastguard Worker {
3429*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs * rhs;
3430*03ce13f7SAndroid Build Coastguard Worker }
3431*03ce13f7SAndroid Build Coastguard Worker
3432*03ce13f7SAndroid Build Coastguard Worker // RValue<Int4> operator/=(Int4 &lhs, RValue<Int4> rhs)
3433*03ce13f7SAndroid Build Coastguard Worker // {
3434*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs / rhs;
3435*03ce13f7SAndroid Build Coastguard Worker // }
3436*03ce13f7SAndroid Build Coastguard Worker
3437*03ce13f7SAndroid Build Coastguard Worker // RValue<Int4> operator%=(Int4 &lhs, RValue<Int4> rhs)
3438*03ce13f7SAndroid Build Coastguard Worker // {
3439*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs % rhs;
3440*03ce13f7SAndroid Build Coastguard Worker // }
3441*03ce13f7SAndroid Build Coastguard Worker
operator &=(Int4 & lhs,RValue<Int4> rhs)3442*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator&=(Int4 &lhs, RValue<Int4> rhs)
3443*03ce13f7SAndroid Build Coastguard Worker {
3444*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs & rhs;
3445*03ce13f7SAndroid Build Coastguard Worker }
3446*03ce13f7SAndroid Build Coastguard Worker
operator |=(Int4 & lhs,RValue<Int4> rhs)3447*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator|=(Int4 &lhs, RValue<Int4> rhs)
3448*03ce13f7SAndroid Build Coastguard Worker {
3449*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs | rhs;
3450*03ce13f7SAndroid Build Coastguard Worker }
3451*03ce13f7SAndroid Build Coastguard Worker
operator ^=(Int4 & lhs,RValue<Int4> rhs)3452*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator^=(Int4 &lhs, RValue<Int4> rhs)
3453*03ce13f7SAndroid Build Coastguard Worker {
3454*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs ^ rhs;
3455*03ce13f7SAndroid Build Coastguard Worker }
3456*03ce13f7SAndroid Build Coastguard Worker
operator <<=(Int4 & lhs,unsigned char rhs)3457*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator<<=(Int4 &lhs, unsigned char rhs)
3458*03ce13f7SAndroid Build Coastguard Worker {
3459*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs << rhs;
3460*03ce13f7SAndroid Build Coastguard Worker }
3461*03ce13f7SAndroid Build Coastguard Worker
operator >>=(Int4 & lhs,unsigned char rhs)3462*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator>>=(Int4 &lhs, unsigned char rhs)
3463*03ce13f7SAndroid Build Coastguard Worker {
3464*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs >> rhs;
3465*03ce13f7SAndroid Build Coastguard Worker }
3466*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<Int4> val)3467*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator+(RValue<Int4> val)
3468*03ce13f7SAndroid Build Coastguard Worker {
3469*03ce13f7SAndroid Build Coastguard Worker return val;
3470*03ce13f7SAndroid Build Coastguard Worker }
3471*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<Int4> val)3472*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator-(RValue<Int4> val)
3473*03ce13f7SAndroid Build Coastguard Worker {
3474*03ce13f7SAndroid Build Coastguard Worker return RValue<Int4>(Nucleus::createNeg(val.value()));
3475*03ce13f7SAndroid Build Coastguard Worker }
3476*03ce13f7SAndroid Build Coastguard Worker
operator ~(RValue<Int4> val)3477*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> operator~(RValue<Int4> val)
3478*03ce13f7SAndroid Build Coastguard Worker {
3479*03ce13f7SAndroid Build Coastguard Worker return RValue<Int4>(Nucleus::createNot(val.value()));
3480*03ce13f7SAndroid Build Coastguard Worker }
3481*03ce13f7SAndroid Build Coastguard Worker
Extract(RValue<Int4> x,int i)3482*03ce13f7SAndroid Build Coastguard Worker RValue<Int> Extract(RValue<Int4> x, int i)
3483*03ce13f7SAndroid Build Coastguard Worker {
3484*03ce13f7SAndroid Build Coastguard Worker return RValue<Int>(Nucleus::createExtractElement(x.value(), Int::type(), i));
3485*03ce13f7SAndroid Build Coastguard Worker }
3486*03ce13f7SAndroid Build Coastguard Worker
Insert(RValue<Int4> x,RValue<Int> element,int i)3487*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> Insert(RValue<Int4> x, RValue<Int> element, int i)
3488*03ce13f7SAndroid Build Coastguard Worker {
3489*03ce13f7SAndroid Build Coastguard Worker return RValue<Int4>(Nucleus::createInsertElement(x.value(), element.value(), i));
3490*03ce13f7SAndroid Build Coastguard Worker }
3491*03ce13f7SAndroid Build Coastguard Worker
Swizzle(RValue<Int4> x,uint16_t select)3492*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> Swizzle(RValue<Int4> x, uint16_t select)
3493*03ce13f7SAndroid Build Coastguard Worker {
3494*03ce13f7SAndroid Build Coastguard Worker return RValue<Int4>(createSwizzle4(x.value(), select));
3495*03ce13f7SAndroid Build Coastguard Worker }
3496*03ce13f7SAndroid Build Coastguard Worker
Shuffle(RValue<Int4> x,RValue<Int4> y,unsigned short select)3497*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> Shuffle(RValue<Int4> x, RValue<Int4> y, unsigned short select)
3498*03ce13f7SAndroid Build Coastguard Worker {
3499*03ce13f7SAndroid Build Coastguard Worker return RValue<Int4>(createShuffle4(x.value(), y.value(), select));
3500*03ce13f7SAndroid Build Coastguard Worker }
3501*03ce13f7SAndroid Build Coastguard Worker
UInt4()3502*03ce13f7SAndroid Build Coastguard Worker UInt4::UInt4()
3503*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3504*03ce13f7SAndroid Build Coastguard Worker {
3505*03ce13f7SAndroid Build Coastguard Worker }
3506*03ce13f7SAndroid Build Coastguard Worker
UInt4(int xyzw)3507*03ce13f7SAndroid Build Coastguard Worker UInt4::UInt4(int xyzw)
3508*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3509*03ce13f7SAndroid Build Coastguard Worker {
3510*03ce13f7SAndroid Build Coastguard Worker constant(xyzw, xyzw, xyzw, xyzw);
3511*03ce13f7SAndroid Build Coastguard Worker }
3512*03ce13f7SAndroid Build Coastguard Worker
UInt4(int x,int yzw)3513*03ce13f7SAndroid Build Coastguard Worker UInt4::UInt4(int x, int yzw)
3514*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3515*03ce13f7SAndroid Build Coastguard Worker {
3516*03ce13f7SAndroid Build Coastguard Worker constant(x, yzw, yzw, yzw);
3517*03ce13f7SAndroid Build Coastguard Worker }
3518*03ce13f7SAndroid Build Coastguard Worker
UInt4(int x,int y,int zw)3519*03ce13f7SAndroid Build Coastguard Worker UInt4::UInt4(int x, int y, int zw)
3520*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3521*03ce13f7SAndroid Build Coastguard Worker {
3522*03ce13f7SAndroid Build Coastguard Worker constant(x, y, zw, zw);
3523*03ce13f7SAndroid Build Coastguard Worker }
3524*03ce13f7SAndroid Build Coastguard Worker
UInt4(int x,int y,int z,int w)3525*03ce13f7SAndroid Build Coastguard Worker UInt4::UInt4(int x, int y, int z, int w)
3526*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3527*03ce13f7SAndroid Build Coastguard Worker {
3528*03ce13f7SAndroid Build Coastguard Worker constant(x, y, z, w);
3529*03ce13f7SAndroid Build Coastguard Worker }
3530*03ce13f7SAndroid Build Coastguard Worker
constant(int x,int y,int z,int w)3531*03ce13f7SAndroid Build Coastguard Worker void UInt4::constant(int x, int y, int z, int w)
3532*03ce13f7SAndroid Build Coastguard Worker {
3533*03ce13f7SAndroid Build Coastguard Worker std::vector<int64_t> constantVector = { x, y, z, w };
3534*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantVector(constantVector, type()));
3535*03ce13f7SAndroid Build Coastguard Worker }
3536*03ce13f7SAndroid Build Coastguard Worker
UInt4(RValue<UInt4> rhs)3537*03ce13f7SAndroid Build Coastguard Worker UInt4::UInt4(RValue<UInt4> rhs)
3538*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3539*03ce13f7SAndroid Build Coastguard Worker {
3540*03ce13f7SAndroid Build Coastguard Worker store(rhs);
3541*03ce13f7SAndroid Build Coastguard Worker }
3542*03ce13f7SAndroid Build Coastguard Worker
UInt4(const UInt4 & rhs)3543*03ce13f7SAndroid Build Coastguard Worker UInt4::UInt4(const UInt4 &rhs)
3544*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3545*03ce13f7SAndroid Build Coastguard Worker {
3546*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
3547*03ce13f7SAndroid Build Coastguard Worker }
3548*03ce13f7SAndroid Build Coastguard Worker
UInt4(const Reference<UInt4> & rhs)3549*03ce13f7SAndroid Build Coastguard Worker UInt4::UInt4(const Reference<UInt4> &rhs)
3550*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3551*03ce13f7SAndroid Build Coastguard Worker {
3552*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
3553*03ce13f7SAndroid Build Coastguard Worker }
3554*03ce13f7SAndroid Build Coastguard Worker
UInt4(RValue<Int4> rhs)3555*03ce13f7SAndroid Build Coastguard Worker UInt4::UInt4(RValue<Int4> rhs)
3556*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3557*03ce13f7SAndroid Build Coastguard Worker {
3558*03ce13f7SAndroid Build Coastguard Worker storeValue(rhs.value());
3559*03ce13f7SAndroid Build Coastguard Worker }
3560*03ce13f7SAndroid Build Coastguard Worker
UInt4(const Int4 & rhs)3561*03ce13f7SAndroid Build Coastguard Worker UInt4::UInt4(const Int4 &rhs)
3562*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3563*03ce13f7SAndroid Build Coastguard Worker {
3564*03ce13f7SAndroid Build Coastguard Worker storeValue(rhs.loadValue());
3565*03ce13f7SAndroid Build Coastguard Worker }
3566*03ce13f7SAndroid Build Coastguard Worker
UInt4(const Reference<Int4> & rhs)3567*03ce13f7SAndroid Build Coastguard Worker UInt4::UInt4(const Reference<Int4> &rhs)
3568*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3569*03ce13f7SAndroid Build Coastguard Worker {
3570*03ce13f7SAndroid Build Coastguard Worker storeValue(rhs.loadValue());
3571*03ce13f7SAndroid Build Coastguard Worker }
3572*03ce13f7SAndroid Build Coastguard Worker
UInt4(RValue<UInt2> lo,RValue<UInt2> hi)3573*03ce13f7SAndroid Build Coastguard Worker UInt4::UInt4(RValue<UInt2> lo, RValue<UInt2> hi)
3574*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3575*03ce13f7SAndroid Build Coastguard Worker {
3576*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = { 0, 1, 4, 5 }; // Real type is v4i32
3577*03ce13f7SAndroid Build Coastguard Worker Value *packed = Nucleus::createShuffleVector(lo.value(), hi.value(), shuffle);
3578*03ce13f7SAndroid Build Coastguard Worker
3579*03ce13f7SAndroid Build Coastguard Worker storeValue(packed);
3580*03ce13f7SAndroid Build Coastguard Worker }
3581*03ce13f7SAndroid Build Coastguard Worker
UInt4(const UInt & rhs)3582*03ce13f7SAndroid Build Coastguard Worker UInt4::UInt4(const UInt &rhs)
3583*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3584*03ce13f7SAndroid Build Coastguard Worker {
3585*03ce13f7SAndroid Build Coastguard Worker *this = RValue<UInt>(rhs.loadValue());
3586*03ce13f7SAndroid Build Coastguard Worker }
3587*03ce13f7SAndroid Build Coastguard Worker
UInt4(const Reference<UInt> & rhs)3588*03ce13f7SAndroid Build Coastguard Worker UInt4::UInt4(const Reference<UInt> &rhs)
3589*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3590*03ce13f7SAndroid Build Coastguard Worker {
3591*03ce13f7SAndroid Build Coastguard Worker *this = RValue<UInt>(rhs.loadValue());
3592*03ce13f7SAndroid Build Coastguard Worker }
3593*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<UInt4> rhs)3594*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> UInt4::operator=(RValue<UInt4> rhs)
3595*03ce13f7SAndroid Build Coastguard Worker {
3596*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
3597*03ce13f7SAndroid Build Coastguard Worker }
3598*03ce13f7SAndroid Build Coastguard Worker
operator =(const UInt4 & rhs)3599*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> UInt4::operator=(const UInt4 &rhs)
3600*03ce13f7SAndroid Build Coastguard Worker {
3601*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
3602*03ce13f7SAndroid Build Coastguard Worker }
3603*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<UInt4> & rhs)3604*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> UInt4::operator=(const Reference<UInt4> &rhs)
3605*03ce13f7SAndroid Build Coastguard Worker {
3606*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
3607*03ce13f7SAndroid Build Coastguard Worker }
3608*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<UInt4> lhs,RValue<UInt4> rhs)3609*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator+(RValue<UInt4> lhs, RValue<UInt4> rhs)
3610*03ce13f7SAndroid Build Coastguard Worker {
3611*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt4>(Nucleus::createAdd(lhs.value(), rhs.value()));
3612*03ce13f7SAndroid Build Coastguard Worker }
3613*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<UInt4> lhs,RValue<UInt4> rhs)3614*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator-(RValue<UInt4> lhs, RValue<UInt4> rhs)
3615*03ce13f7SAndroid Build Coastguard Worker {
3616*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt4>(Nucleus::createSub(lhs.value(), rhs.value()));
3617*03ce13f7SAndroid Build Coastguard Worker }
3618*03ce13f7SAndroid Build Coastguard Worker
operator *(RValue<UInt4> lhs,RValue<UInt4> rhs)3619*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator*(RValue<UInt4> lhs, RValue<UInt4> rhs)
3620*03ce13f7SAndroid Build Coastguard Worker {
3621*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt4>(Nucleus::createMul(lhs.value(), rhs.value()));
3622*03ce13f7SAndroid Build Coastguard Worker }
3623*03ce13f7SAndroid Build Coastguard Worker
operator /(RValue<UInt4> lhs,RValue<UInt4> rhs)3624*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator/(RValue<UInt4> lhs, RValue<UInt4> rhs)
3625*03ce13f7SAndroid Build Coastguard Worker {
3626*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt4>(Nucleus::createUDiv(lhs.value(), rhs.value()));
3627*03ce13f7SAndroid Build Coastguard Worker }
3628*03ce13f7SAndroid Build Coastguard Worker
operator %(RValue<UInt4> lhs,RValue<UInt4> rhs)3629*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator%(RValue<UInt4> lhs, RValue<UInt4> rhs)
3630*03ce13f7SAndroid Build Coastguard Worker {
3631*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt4>(Nucleus::createURem(lhs.value(), rhs.value()));
3632*03ce13f7SAndroid Build Coastguard Worker }
3633*03ce13f7SAndroid Build Coastguard Worker
operator &(RValue<UInt4> lhs,RValue<UInt4> rhs)3634*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator&(RValue<UInt4> lhs, RValue<UInt4> rhs)
3635*03ce13f7SAndroid Build Coastguard Worker {
3636*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt4>(Nucleus::createAnd(lhs.value(), rhs.value()));
3637*03ce13f7SAndroid Build Coastguard Worker }
3638*03ce13f7SAndroid Build Coastguard Worker
operator |(RValue<UInt4> lhs,RValue<UInt4> rhs)3639*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator|(RValue<UInt4> lhs, RValue<UInt4> rhs)
3640*03ce13f7SAndroid Build Coastguard Worker {
3641*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt4>(Nucleus::createOr(lhs.value(), rhs.value()));
3642*03ce13f7SAndroid Build Coastguard Worker }
3643*03ce13f7SAndroid Build Coastguard Worker
operator ^(RValue<UInt4> lhs,RValue<UInt4> rhs)3644*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator^(RValue<UInt4> lhs, RValue<UInt4> rhs)
3645*03ce13f7SAndroid Build Coastguard Worker {
3646*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt4>(Nucleus::createXor(lhs.value(), rhs.value()));
3647*03ce13f7SAndroid Build Coastguard Worker }
3648*03ce13f7SAndroid Build Coastguard Worker
operator <<(RValue<UInt4> lhs,RValue<UInt4> rhs)3649*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator<<(RValue<UInt4> lhs, RValue<UInt4> rhs)
3650*03ce13f7SAndroid Build Coastguard Worker {
3651*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt4>(Nucleus::createShl(lhs.value(), rhs.value()));
3652*03ce13f7SAndroid Build Coastguard Worker }
3653*03ce13f7SAndroid Build Coastguard Worker
operator >>(RValue<UInt4> lhs,RValue<UInt4> rhs)3654*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator>>(RValue<UInt4> lhs, RValue<UInt4> rhs)
3655*03ce13f7SAndroid Build Coastguard Worker {
3656*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt4>(Nucleus::createLShr(lhs.value(), rhs.value()));
3657*03ce13f7SAndroid Build Coastguard Worker }
3658*03ce13f7SAndroid Build Coastguard Worker
operator +=(UInt4 & lhs,RValue<UInt4> rhs)3659*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator+=(UInt4 &lhs, RValue<UInt4> rhs)
3660*03ce13f7SAndroid Build Coastguard Worker {
3661*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs + rhs;
3662*03ce13f7SAndroid Build Coastguard Worker }
3663*03ce13f7SAndroid Build Coastguard Worker
operator -=(UInt4 & lhs,RValue<UInt4> rhs)3664*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator-=(UInt4 &lhs, RValue<UInt4> rhs)
3665*03ce13f7SAndroid Build Coastguard Worker {
3666*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs - rhs;
3667*03ce13f7SAndroid Build Coastguard Worker }
3668*03ce13f7SAndroid Build Coastguard Worker
operator *=(UInt4 & lhs,RValue<UInt4> rhs)3669*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator*=(UInt4 &lhs, RValue<UInt4> rhs)
3670*03ce13f7SAndroid Build Coastguard Worker {
3671*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs * rhs;
3672*03ce13f7SAndroid Build Coastguard Worker }
3673*03ce13f7SAndroid Build Coastguard Worker
3674*03ce13f7SAndroid Build Coastguard Worker // RValue<UInt4> operator/=(UInt4 &lhs, RValue<UInt4> rhs)
3675*03ce13f7SAndroid Build Coastguard Worker // {
3676*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs / rhs;
3677*03ce13f7SAndroid Build Coastguard Worker // }
3678*03ce13f7SAndroid Build Coastguard Worker
3679*03ce13f7SAndroid Build Coastguard Worker // RValue<UInt4> operator%=(UInt4 &lhs, RValue<UInt4> rhs)
3680*03ce13f7SAndroid Build Coastguard Worker // {
3681*03ce13f7SAndroid Build Coastguard Worker // return lhs = lhs % rhs;
3682*03ce13f7SAndroid Build Coastguard Worker // }
3683*03ce13f7SAndroid Build Coastguard Worker
operator &=(UInt4 & lhs,RValue<UInt4> rhs)3684*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator&=(UInt4 &lhs, RValue<UInt4> rhs)
3685*03ce13f7SAndroid Build Coastguard Worker {
3686*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs & rhs;
3687*03ce13f7SAndroid Build Coastguard Worker }
3688*03ce13f7SAndroid Build Coastguard Worker
operator |=(UInt4 & lhs,RValue<UInt4> rhs)3689*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator|=(UInt4 &lhs, RValue<UInt4> rhs)
3690*03ce13f7SAndroid Build Coastguard Worker {
3691*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs | rhs;
3692*03ce13f7SAndroid Build Coastguard Worker }
3693*03ce13f7SAndroid Build Coastguard Worker
operator ^=(UInt4 & lhs,RValue<UInt4> rhs)3694*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator^=(UInt4 &lhs, RValue<UInt4> rhs)
3695*03ce13f7SAndroid Build Coastguard Worker {
3696*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs ^ rhs;
3697*03ce13f7SAndroid Build Coastguard Worker }
3698*03ce13f7SAndroid Build Coastguard Worker
operator <<=(UInt4 & lhs,unsigned char rhs)3699*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator<<=(UInt4 &lhs, unsigned char rhs)
3700*03ce13f7SAndroid Build Coastguard Worker {
3701*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs << rhs;
3702*03ce13f7SAndroid Build Coastguard Worker }
3703*03ce13f7SAndroid Build Coastguard Worker
operator >>=(UInt4 & lhs,unsigned char rhs)3704*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator>>=(UInt4 &lhs, unsigned char rhs)
3705*03ce13f7SAndroid Build Coastguard Worker {
3706*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs >> rhs;
3707*03ce13f7SAndroid Build Coastguard Worker }
3708*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<UInt4> val)3709*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator+(RValue<UInt4> val)
3710*03ce13f7SAndroid Build Coastguard Worker {
3711*03ce13f7SAndroid Build Coastguard Worker return val;
3712*03ce13f7SAndroid Build Coastguard Worker }
3713*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<UInt4> val)3714*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator-(RValue<UInt4> val)
3715*03ce13f7SAndroid Build Coastguard Worker {
3716*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt4>(Nucleus::createNeg(val.value()));
3717*03ce13f7SAndroid Build Coastguard Worker }
3718*03ce13f7SAndroid Build Coastguard Worker
operator ~(RValue<UInt4> val)3719*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> operator~(RValue<UInt4> val)
3720*03ce13f7SAndroid Build Coastguard Worker {
3721*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt4>(Nucleus::createNot(val.value()));
3722*03ce13f7SAndroid Build Coastguard Worker }
3723*03ce13f7SAndroid Build Coastguard Worker
Extract(RValue<UInt4> x,int i)3724*03ce13f7SAndroid Build Coastguard Worker RValue<UInt> Extract(RValue<UInt4> x, int i)
3725*03ce13f7SAndroid Build Coastguard Worker {
3726*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt>(Nucleus::createExtractElement(x.value(), Int::type(), i));
3727*03ce13f7SAndroid Build Coastguard Worker }
3728*03ce13f7SAndroid Build Coastguard Worker
Insert(RValue<UInt4> x,RValue<UInt> element,int i)3729*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> Insert(RValue<UInt4> x, RValue<UInt> element, int i)
3730*03ce13f7SAndroid Build Coastguard Worker {
3731*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt4>(Nucleus::createInsertElement(x.value(), element.value(), i));
3732*03ce13f7SAndroid Build Coastguard Worker }
3733*03ce13f7SAndroid Build Coastguard Worker
Swizzle(RValue<UInt4> x,uint16_t select)3734*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> Swizzle(RValue<UInt4> x, uint16_t select)
3735*03ce13f7SAndroid Build Coastguard Worker {
3736*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt4>(createSwizzle4(x.value(), select));
3737*03ce13f7SAndroid Build Coastguard Worker }
3738*03ce13f7SAndroid Build Coastguard Worker
Shuffle(RValue<UInt4> x,RValue<UInt4> y,unsigned short select)3739*03ce13f7SAndroid Build Coastguard Worker RValue<UInt4> Shuffle(RValue<UInt4> x, RValue<UInt4> y, unsigned short select)
3740*03ce13f7SAndroid Build Coastguard Worker {
3741*03ce13f7SAndroid Build Coastguard Worker return RValue<UInt4>(createShuffle4(x.value(), y.value(), select));
3742*03ce13f7SAndroid Build Coastguard Worker }
3743*03ce13f7SAndroid Build Coastguard Worker
Half(RValue<Float> cast)3744*03ce13f7SAndroid Build Coastguard Worker Half::Half(RValue<Float> cast)
3745*03ce13f7SAndroid Build Coastguard Worker {
3746*03ce13f7SAndroid Build Coastguard Worker UInt fp32i = As<UInt>(cast);
3747*03ce13f7SAndroid Build Coastguard Worker UInt abs = fp32i & 0x7FFFFFFF;
3748*03ce13f7SAndroid Build Coastguard Worker UShort fp16i((fp32i & 0x80000000) >> 16); // sign
3749*03ce13f7SAndroid Build Coastguard Worker
3750*03ce13f7SAndroid Build Coastguard Worker If(abs > 0x47FFEFFF) // Infinity
3751*03ce13f7SAndroid Build Coastguard Worker {
3752*03ce13f7SAndroid Build Coastguard Worker fp16i |= UShort(0x7FFF);
3753*03ce13f7SAndroid Build Coastguard Worker }
3754*03ce13f7SAndroid Build Coastguard Worker Else
3755*03ce13f7SAndroid Build Coastguard Worker {
3756*03ce13f7SAndroid Build Coastguard Worker If(abs < 0x38800000) // Denormal
3757*03ce13f7SAndroid Build Coastguard Worker {
3758*03ce13f7SAndroid Build Coastguard Worker Int mantissa = (abs & 0x007FFFFF) | 0x00800000;
3759*03ce13f7SAndroid Build Coastguard Worker Int e = 113 - (abs >> 23);
3760*03ce13f7SAndroid Build Coastguard Worker abs = IfThenElse(e < 24, (mantissa >> e), Int(0));
3761*03ce13f7SAndroid Build Coastguard Worker fp16i |= UShort((abs + 0x00000FFF + ((abs >> 13) & 1)) >> 13);
3762*03ce13f7SAndroid Build Coastguard Worker }
3763*03ce13f7SAndroid Build Coastguard Worker Else
3764*03ce13f7SAndroid Build Coastguard Worker {
3765*03ce13f7SAndroid Build Coastguard Worker fp16i |= UShort((abs + 0xC8000000 + 0x00000FFF + ((abs >> 13) & 1)) >> 13);
3766*03ce13f7SAndroid Build Coastguard Worker }
3767*03ce13f7SAndroid Build Coastguard Worker }
3768*03ce13f7SAndroid Build Coastguard Worker
3769*03ce13f7SAndroid Build Coastguard Worker storeValue(fp16i.loadValue());
3770*03ce13f7SAndroid Build Coastguard Worker }
3771*03ce13f7SAndroid Build Coastguard Worker
Float(RValue<Int> cast)3772*03ce13f7SAndroid Build Coastguard Worker Float::Float(RValue<Int> cast)
3773*03ce13f7SAndroid Build Coastguard Worker {
3774*03ce13f7SAndroid Build Coastguard Worker Value *integer = Nucleus::createSIToFP(cast.value(), Float::type());
3775*03ce13f7SAndroid Build Coastguard Worker
3776*03ce13f7SAndroid Build Coastguard Worker storeValue(integer);
3777*03ce13f7SAndroid Build Coastguard Worker }
3778*03ce13f7SAndroid Build Coastguard Worker
Float(RValue<UInt> cast)3779*03ce13f7SAndroid Build Coastguard Worker Float::Float(RValue<UInt> cast)
3780*03ce13f7SAndroid Build Coastguard Worker {
3781*03ce13f7SAndroid Build Coastguard Worker RValue<Float> result = Float(Int(cast & UInt(0x7FFFFFFF))) +
3782*03ce13f7SAndroid Build Coastguard Worker As<Float>((As<Int>(cast) >> 31) & As<Int>(Float(0x80000000u)));
3783*03ce13f7SAndroid Build Coastguard Worker
3784*03ce13f7SAndroid Build Coastguard Worker storeValue(result.value());
3785*03ce13f7SAndroid Build Coastguard Worker }
3786*03ce13f7SAndroid Build Coastguard Worker
Float(RValue<Half> cast)3787*03ce13f7SAndroid Build Coastguard Worker Float::Float(RValue<Half> cast)
3788*03ce13f7SAndroid Build Coastguard Worker {
3789*03ce13f7SAndroid Build Coastguard Worker Int fp16i(As<UShort>(cast));
3790*03ce13f7SAndroid Build Coastguard Worker
3791*03ce13f7SAndroid Build Coastguard Worker Int s = (fp16i >> 15) & 0x00000001;
3792*03ce13f7SAndroid Build Coastguard Worker Int e = (fp16i >> 10) & 0x0000001F;
3793*03ce13f7SAndroid Build Coastguard Worker Int m = fp16i & 0x000003FF;
3794*03ce13f7SAndroid Build Coastguard Worker
3795*03ce13f7SAndroid Build Coastguard Worker UInt fp32i(s << 31);
3796*03ce13f7SAndroid Build Coastguard Worker If(e == 0)
3797*03ce13f7SAndroid Build Coastguard Worker {
3798*03ce13f7SAndroid Build Coastguard Worker If(m != 0)
3799*03ce13f7SAndroid Build Coastguard Worker {
3800*03ce13f7SAndroid Build Coastguard Worker While((m & 0x00000400) == 0)
3801*03ce13f7SAndroid Build Coastguard Worker {
3802*03ce13f7SAndroid Build Coastguard Worker m <<= 1;
3803*03ce13f7SAndroid Build Coastguard Worker e -= 1;
3804*03ce13f7SAndroid Build Coastguard Worker }
3805*03ce13f7SAndroid Build Coastguard Worker
3806*03ce13f7SAndroid Build Coastguard Worker fp32i |= As<UInt>(((e + (127 - 15) + 1) << 23) | ((m & ~0x00000400) << 13));
3807*03ce13f7SAndroid Build Coastguard Worker }
3808*03ce13f7SAndroid Build Coastguard Worker }
3809*03ce13f7SAndroid Build Coastguard Worker Else
3810*03ce13f7SAndroid Build Coastguard Worker {
3811*03ce13f7SAndroid Build Coastguard Worker fp32i |= As<UInt>(((e + (127 - 15)) << 23) | (m << 13));
3812*03ce13f7SAndroid Build Coastguard Worker }
3813*03ce13f7SAndroid Build Coastguard Worker
3814*03ce13f7SAndroid Build Coastguard Worker storeValue(As<Float>(fp32i).value());
3815*03ce13f7SAndroid Build Coastguard Worker }
3816*03ce13f7SAndroid Build Coastguard Worker
Float(float x)3817*03ce13f7SAndroid Build Coastguard Worker Float::Float(float x)
3818*03ce13f7SAndroid Build Coastguard Worker {
3819*03ce13f7SAndroid Build Coastguard Worker // C++ does not have a way to write an infinite or NaN literal,
3820*03ce13f7SAndroid Build Coastguard Worker // nor does it allow division by zero as a constant expression.
3821*03ce13f7SAndroid Build Coastguard Worker // Thus we should not accept inf or NaN as a Reactor Float constant,
3822*03ce13f7SAndroid Build Coastguard Worker // as this would typically idicate a bug, and avoids undefined
3823*03ce13f7SAndroid Build Coastguard Worker // behavior.
3824*03ce13f7SAndroid Build Coastguard Worker //
3825*03ce13f7SAndroid Build Coastguard Worker // This also prevents the issue of the LLVM JIT only taking double
3826*03ce13f7SAndroid Build Coastguard Worker // values for constructing floating-point constants. During the
3827*03ce13f7SAndroid Build Coastguard Worker // conversion from single-precision to double, a signaling NaN can
3828*03ce13f7SAndroid Build Coastguard Worker // become a quiet NaN, thus altering its bit pattern. Hence this
3829*03ce13f7SAndroid Build Coastguard Worker // assert is also helpful for detecting cases where integers are
3830*03ce13f7SAndroid Build Coastguard Worker // being reinterpreted as float and then bitcast to integer again,
3831*03ce13f7SAndroid Build Coastguard Worker // which does not guarantee preserving the integer value.
3832*03ce13f7SAndroid Build Coastguard Worker //
3833*03ce13f7SAndroid Build Coastguard Worker // The inifinity() method can be used to obtain positive infinity.
3834*03ce13f7SAndroid Build Coastguard Worker // Should NaN constants be required, methods like quiet_NaN() and
3835*03ce13f7SAndroid Build Coastguard Worker // signaling_NaN() should be added (matching std::numeric_limits).
3836*03ce13f7SAndroid Build Coastguard Worker ASSERT(std::isfinite(x));
3837*03ce13f7SAndroid Build Coastguard Worker
3838*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantFloat(x));
3839*03ce13f7SAndroid Build Coastguard Worker }
3840*03ce13f7SAndroid Build Coastguard Worker
3841*03ce13f7SAndroid Build Coastguard Worker // TODO(b/140302841): Negative infinity can be obtained by using '-infinity()'.
3842*03ce13f7SAndroid Build Coastguard Worker // This comes at a minor run-time JIT cost, and the backend may or may not
3843*03ce13f7SAndroid Build Coastguard Worker // perform constant folding. This can be optimized by having Reactor perform
3844*03ce13f7SAndroid Build Coastguard Worker // the folding, which would still be cheaper than having a capable backend do it.
infinity()3845*03ce13f7SAndroid Build Coastguard Worker Float Float::infinity()
3846*03ce13f7SAndroid Build Coastguard Worker {
3847*03ce13f7SAndroid Build Coastguard Worker Float result;
3848*03ce13f7SAndroid Build Coastguard Worker
3849*03ce13f7SAndroid Build Coastguard Worker constexpr double inf = std::numeric_limits<double>::infinity();
3850*03ce13f7SAndroid Build Coastguard Worker result.storeValue(Nucleus::createConstantFloat(inf));
3851*03ce13f7SAndroid Build Coastguard Worker
3852*03ce13f7SAndroid Build Coastguard Worker return result;
3853*03ce13f7SAndroid Build Coastguard Worker }
3854*03ce13f7SAndroid Build Coastguard Worker
Float(RValue<Float> rhs)3855*03ce13f7SAndroid Build Coastguard Worker Float::Float(RValue<Float> rhs)
3856*03ce13f7SAndroid Build Coastguard Worker {
3857*03ce13f7SAndroid Build Coastguard Worker store(rhs);
3858*03ce13f7SAndroid Build Coastguard Worker }
3859*03ce13f7SAndroid Build Coastguard Worker
Float(const Float & rhs)3860*03ce13f7SAndroid Build Coastguard Worker Float::Float(const Float &rhs)
3861*03ce13f7SAndroid Build Coastguard Worker {
3862*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
3863*03ce13f7SAndroid Build Coastguard Worker }
3864*03ce13f7SAndroid Build Coastguard Worker
Float(const Reference<Float> & rhs)3865*03ce13f7SAndroid Build Coastguard Worker Float::Float(const Reference<Float> &rhs)
3866*03ce13f7SAndroid Build Coastguard Worker {
3867*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
3868*03ce13f7SAndroid Build Coastguard Worker }
3869*03ce13f7SAndroid Build Coastguard Worker
Float(Argument<Float> argument)3870*03ce13f7SAndroid Build Coastguard Worker Float::Float(Argument<Float> argument)
3871*03ce13f7SAndroid Build Coastguard Worker {
3872*03ce13f7SAndroid Build Coastguard Worker store(argument.rvalue());
3873*03ce13f7SAndroid Build Coastguard Worker }
3874*03ce13f7SAndroid Build Coastguard Worker
operator =(float rhs)3875*03ce13f7SAndroid Build Coastguard Worker RValue<Float> Float::operator=(float rhs)
3876*03ce13f7SAndroid Build Coastguard Worker {
3877*03ce13f7SAndroid Build Coastguard Worker return RValue<Float>(storeValue(Nucleus::createConstantFloat(rhs)));
3878*03ce13f7SAndroid Build Coastguard Worker }
3879*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<Float> rhs)3880*03ce13f7SAndroid Build Coastguard Worker RValue<Float> Float::operator=(RValue<Float> rhs)
3881*03ce13f7SAndroid Build Coastguard Worker {
3882*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
3883*03ce13f7SAndroid Build Coastguard Worker }
3884*03ce13f7SAndroid Build Coastguard Worker
operator =(const Float & rhs)3885*03ce13f7SAndroid Build Coastguard Worker RValue<Float> Float::operator=(const Float &rhs)
3886*03ce13f7SAndroid Build Coastguard Worker {
3887*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
3888*03ce13f7SAndroid Build Coastguard Worker }
3889*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<Float> & rhs)3890*03ce13f7SAndroid Build Coastguard Worker RValue<Float> Float::operator=(const Reference<Float> &rhs)
3891*03ce13f7SAndroid Build Coastguard Worker {
3892*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
3893*03ce13f7SAndroid Build Coastguard Worker }
3894*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<Float> lhs,RValue<Float> rhs)3895*03ce13f7SAndroid Build Coastguard Worker RValue<Float> operator+(RValue<Float> lhs, RValue<Float> rhs)
3896*03ce13f7SAndroid Build Coastguard Worker {
3897*03ce13f7SAndroid Build Coastguard Worker return RValue<Float>(Nucleus::createFAdd(lhs.value(), rhs.value()));
3898*03ce13f7SAndroid Build Coastguard Worker }
3899*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<Float> lhs,RValue<Float> rhs)3900*03ce13f7SAndroid Build Coastguard Worker RValue<Float> operator-(RValue<Float> lhs, RValue<Float> rhs)
3901*03ce13f7SAndroid Build Coastguard Worker {
3902*03ce13f7SAndroid Build Coastguard Worker return RValue<Float>(Nucleus::createFSub(lhs.value(), rhs.value()));
3903*03ce13f7SAndroid Build Coastguard Worker }
3904*03ce13f7SAndroid Build Coastguard Worker
operator *(RValue<Float> lhs,RValue<Float> rhs)3905*03ce13f7SAndroid Build Coastguard Worker RValue<Float> operator*(RValue<Float> lhs, RValue<Float> rhs)
3906*03ce13f7SAndroid Build Coastguard Worker {
3907*03ce13f7SAndroid Build Coastguard Worker return RValue<Float>(Nucleus::createFMul(lhs.value(), rhs.value()));
3908*03ce13f7SAndroid Build Coastguard Worker }
3909*03ce13f7SAndroid Build Coastguard Worker
operator /(RValue<Float> lhs,RValue<Float> rhs)3910*03ce13f7SAndroid Build Coastguard Worker RValue<Float> operator/(RValue<Float> lhs, RValue<Float> rhs)
3911*03ce13f7SAndroid Build Coastguard Worker {
3912*03ce13f7SAndroid Build Coastguard Worker return RValue<Float>(Nucleus::createFDiv(lhs.value(), rhs.value()));
3913*03ce13f7SAndroid Build Coastguard Worker }
3914*03ce13f7SAndroid Build Coastguard Worker
operator +=(Float & lhs,RValue<Float> rhs)3915*03ce13f7SAndroid Build Coastguard Worker RValue<Float> operator+=(Float &lhs, RValue<Float> rhs)
3916*03ce13f7SAndroid Build Coastguard Worker {
3917*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs + rhs;
3918*03ce13f7SAndroid Build Coastguard Worker }
3919*03ce13f7SAndroid Build Coastguard Worker
operator -=(Float & lhs,RValue<Float> rhs)3920*03ce13f7SAndroid Build Coastguard Worker RValue<Float> operator-=(Float &lhs, RValue<Float> rhs)
3921*03ce13f7SAndroid Build Coastguard Worker {
3922*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs - rhs;
3923*03ce13f7SAndroid Build Coastguard Worker }
3924*03ce13f7SAndroid Build Coastguard Worker
operator *=(Float & lhs,RValue<Float> rhs)3925*03ce13f7SAndroid Build Coastguard Worker RValue<Float> operator*=(Float &lhs, RValue<Float> rhs)
3926*03ce13f7SAndroid Build Coastguard Worker {
3927*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs * rhs;
3928*03ce13f7SAndroid Build Coastguard Worker }
3929*03ce13f7SAndroid Build Coastguard Worker
operator /=(Float & lhs,RValue<Float> rhs)3930*03ce13f7SAndroid Build Coastguard Worker RValue<Float> operator/=(Float &lhs, RValue<Float> rhs)
3931*03ce13f7SAndroid Build Coastguard Worker {
3932*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs / rhs;
3933*03ce13f7SAndroid Build Coastguard Worker }
3934*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<Float> val)3935*03ce13f7SAndroid Build Coastguard Worker RValue<Float> operator+(RValue<Float> val)
3936*03ce13f7SAndroid Build Coastguard Worker {
3937*03ce13f7SAndroid Build Coastguard Worker return val;
3938*03ce13f7SAndroid Build Coastguard Worker }
3939*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<Float> val)3940*03ce13f7SAndroid Build Coastguard Worker RValue<Float> operator-(RValue<Float> val)
3941*03ce13f7SAndroid Build Coastguard Worker {
3942*03ce13f7SAndroid Build Coastguard Worker return RValue<Float>(Nucleus::createFNeg(val.value()));
3943*03ce13f7SAndroid Build Coastguard Worker }
3944*03ce13f7SAndroid Build Coastguard Worker
operator <(RValue<Float> lhs,RValue<Float> rhs)3945*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator<(RValue<Float> lhs, RValue<Float> rhs)
3946*03ce13f7SAndroid Build Coastguard Worker {
3947*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createFCmpOLT(lhs.value(), rhs.value()));
3948*03ce13f7SAndroid Build Coastguard Worker }
3949*03ce13f7SAndroid Build Coastguard Worker
operator <=(RValue<Float> lhs,RValue<Float> rhs)3950*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator<=(RValue<Float> lhs, RValue<Float> rhs)
3951*03ce13f7SAndroid Build Coastguard Worker {
3952*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createFCmpOLE(lhs.value(), rhs.value()));
3953*03ce13f7SAndroid Build Coastguard Worker }
3954*03ce13f7SAndroid Build Coastguard Worker
operator >(RValue<Float> lhs,RValue<Float> rhs)3955*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator>(RValue<Float> lhs, RValue<Float> rhs)
3956*03ce13f7SAndroid Build Coastguard Worker {
3957*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createFCmpOGT(lhs.value(), rhs.value()));
3958*03ce13f7SAndroid Build Coastguard Worker }
3959*03ce13f7SAndroid Build Coastguard Worker
operator >=(RValue<Float> lhs,RValue<Float> rhs)3960*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator>=(RValue<Float> lhs, RValue<Float> rhs)
3961*03ce13f7SAndroid Build Coastguard Worker {
3962*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createFCmpOGE(lhs.value(), rhs.value()));
3963*03ce13f7SAndroid Build Coastguard Worker }
3964*03ce13f7SAndroid Build Coastguard Worker
operator !=(RValue<Float> lhs,RValue<Float> rhs)3965*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator!=(RValue<Float> lhs, RValue<Float> rhs)
3966*03ce13f7SAndroid Build Coastguard Worker {
3967*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createFCmpONE(lhs.value(), rhs.value()));
3968*03ce13f7SAndroid Build Coastguard Worker }
3969*03ce13f7SAndroid Build Coastguard Worker
operator ==(RValue<Float> lhs,RValue<Float> rhs)3970*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> operator==(RValue<Float> lhs, RValue<Float> rhs)
3971*03ce13f7SAndroid Build Coastguard Worker {
3972*03ce13f7SAndroid Build Coastguard Worker return RValue<Bool>(Nucleus::createFCmpOEQ(lhs.value(), rhs.value()));
3973*03ce13f7SAndroid Build Coastguard Worker }
3974*03ce13f7SAndroid Build Coastguard Worker
Abs(RValue<Float> x)3975*03ce13f7SAndroid Build Coastguard Worker RValue<Float> Abs(RValue<Float> x)
3976*03ce13f7SAndroid Build Coastguard Worker {
3977*03ce13f7SAndroid Build Coastguard Worker return IfThenElse(x > 0.0f, x, -x);
3978*03ce13f7SAndroid Build Coastguard Worker }
3979*03ce13f7SAndroid Build Coastguard Worker
Max(RValue<Float> x,RValue<Float> y)3980*03ce13f7SAndroid Build Coastguard Worker RValue<Float> Max(RValue<Float> x, RValue<Float> y)
3981*03ce13f7SAndroid Build Coastguard Worker {
3982*03ce13f7SAndroid Build Coastguard Worker return IfThenElse(x > y, x, y);
3983*03ce13f7SAndroid Build Coastguard Worker }
3984*03ce13f7SAndroid Build Coastguard Worker
Min(RValue<Float> x,RValue<Float> y)3985*03ce13f7SAndroid Build Coastguard Worker RValue<Float> Min(RValue<Float> x, RValue<Float> y)
3986*03ce13f7SAndroid Build Coastguard Worker {
3987*03ce13f7SAndroid Build Coastguard Worker return IfThenElse(x < y, x, y);
3988*03ce13f7SAndroid Build Coastguard Worker }
3989*03ce13f7SAndroid Build Coastguard Worker
Float2(RValue<Float4> cast)3990*03ce13f7SAndroid Build Coastguard Worker Float2::Float2(RValue<Float4> cast)
3991*03ce13f7SAndroid Build Coastguard Worker {
3992*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createBitCast(cast.value(), type()));
3993*03ce13f7SAndroid Build Coastguard Worker }
3994*03ce13f7SAndroid Build Coastguard Worker
Float4(RValue<Byte4> cast)3995*03ce13f7SAndroid Build Coastguard Worker Float4::Float4(RValue<Byte4> cast)
3996*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
3997*03ce13f7SAndroid Build Coastguard Worker {
3998*03ce13f7SAndroid Build Coastguard Worker Value *a = Int4(cast).loadValue();
3999*03ce13f7SAndroid Build Coastguard Worker Value *xyzw = Nucleus::createSIToFP(a, Float4::type());
4000*03ce13f7SAndroid Build Coastguard Worker
4001*03ce13f7SAndroid Build Coastguard Worker storeValue(xyzw);
4002*03ce13f7SAndroid Build Coastguard Worker }
4003*03ce13f7SAndroid Build Coastguard Worker
Float4(RValue<SByte4> cast)4004*03ce13f7SAndroid Build Coastguard Worker Float4::Float4(RValue<SByte4> cast)
4005*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
4006*03ce13f7SAndroid Build Coastguard Worker {
4007*03ce13f7SAndroid Build Coastguard Worker Value *a = Int4(cast).loadValue();
4008*03ce13f7SAndroid Build Coastguard Worker Value *xyzw = Nucleus::createSIToFP(a, Float4::type());
4009*03ce13f7SAndroid Build Coastguard Worker
4010*03ce13f7SAndroid Build Coastguard Worker storeValue(xyzw);
4011*03ce13f7SAndroid Build Coastguard Worker }
4012*03ce13f7SAndroid Build Coastguard Worker
Float4(RValue<Short4> cast)4013*03ce13f7SAndroid Build Coastguard Worker Float4::Float4(RValue<Short4> cast)
4014*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
4015*03ce13f7SAndroid Build Coastguard Worker {
4016*03ce13f7SAndroid Build Coastguard Worker Int4 c(cast);
4017*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createSIToFP(RValue<Int4>(c).value(), Float4::type()));
4018*03ce13f7SAndroid Build Coastguard Worker }
4019*03ce13f7SAndroid Build Coastguard Worker
Float4(RValue<UShort4> cast)4020*03ce13f7SAndroid Build Coastguard Worker Float4::Float4(RValue<UShort4> cast)
4021*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
4022*03ce13f7SAndroid Build Coastguard Worker {
4023*03ce13f7SAndroid Build Coastguard Worker Int4 c(cast);
4024*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createSIToFP(RValue<Int4>(c).value(), Float4::type()));
4025*03ce13f7SAndroid Build Coastguard Worker }
4026*03ce13f7SAndroid Build Coastguard Worker
Float4(RValue<Int4> cast)4027*03ce13f7SAndroid Build Coastguard Worker Float4::Float4(RValue<Int4> cast)
4028*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
4029*03ce13f7SAndroid Build Coastguard Worker {
4030*03ce13f7SAndroid Build Coastguard Worker Value *xyzw = Nucleus::createSIToFP(cast.value(), Float4::type());
4031*03ce13f7SAndroid Build Coastguard Worker
4032*03ce13f7SAndroid Build Coastguard Worker storeValue(xyzw);
4033*03ce13f7SAndroid Build Coastguard Worker }
4034*03ce13f7SAndroid Build Coastguard Worker
Float4(RValue<UInt4> cast)4035*03ce13f7SAndroid Build Coastguard Worker Float4::Float4(RValue<UInt4> cast)
4036*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
4037*03ce13f7SAndroid Build Coastguard Worker {
4038*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> result = Float4(Int4(cast & UInt4(0x7FFFFFFF))) +
4039*03ce13f7SAndroid Build Coastguard Worker As<Float4>((As<Int4>(cast) >> 31) & As<Int4>(Float4(0x80000000u)));
4040*03ce13f7SAndroid Build Coastguard Worker
4041*03ce13f7SAndroid Build Coastguard Worker storeValue(result.value());
4042*03ce13f7SAndroid Build Coastguard Worker }
4043*03ce13f7SAndroid Build Coastguard Worker
Float4()4044*03ce13f7SAndroid Build Coastguard Worker Float4::Float4()
4045*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
4046*03ce13f7SAndroid Build Coastguard Worker {
4047*03ce13f7SAndroid Build Coastguard Worker }
4048*03ce13f7SAndroid Build Coastguard Worker
Float4(float xyzw)4049*03ce13f7SAndroid Build Coastguard Worker Float4::Float4(float xyzw)
4050*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
4051*03ce13f7SAndroid Build Coastguard Worker {
4052*03ce13f7SAndroid Build Coastguard Worker constant(xyzw, xyzw, xyzw, xyzw);
4053*03ce13f7SAndroid Build Coastguard Worker }
4054*03ce13f7SAndroid Build Coastguard Worker
Float4(float x,float yzw)4055*03ce13f7SAndroid Build Coastguard Worker Float4::Float4(float x, float yzw)
4056*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
4057*03ce13f7SAndroid Build Coastguard Worker {
4058*03ce13f7SAndroid Build Coastguard Worker constant(x, yzw, yzw, yzw);
4059*03ce13f7SAndroid Build Coastguard Worker }
4060*03ce13f7SAndroid Build Coastguard Worker
Float4(float x,float y,float zw)4061*03ce13f7SAndroid Build Coastguard Worker Float4::Float4(float x, float y, float zw)
4062*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
4063*03ce13f7SAndroid Build Coastguard Worker {
4064*03ce13f7SAndroid Build Coastguard Worker constant(x, y, zw, zw);
4065*03ce13f7SAndroid Build Coastguard Worker }
4066*03ce13f7SAndroid Build Coastguard Worker
Float4(float x,float y,float z,float w)4067*03ce13f7SAndroid Build Coastguard Worker Float4::Float4(float x, float y, float z, float w)
4068*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
4069*03ce13f7SAndroid Build Coastguard Worker {
4070*03ce13f7SAndroid Build Coastguard Worker constant(x, y, z, w);
4071*03ce13f7SAndroid Build Coastguard Worker }
4072*03ce13f7SAndroid Build Coastguard Worker
infinity()4073*03ce13f7SAndroid Build Coastguard Worker Float4 Float4::infinity()
4074*03ce13f7SAndroid Build Coastguard Worker {
4075*03ce13f7SAndroid Build Coastguard Worker Float4 result;
4076*03ce13f7SAndroid Build Coastguard Worker
4077*03ce13f7SAndroid Build Coastguard Worker constexpr double inf = std::numeric_limits<double>::infinity();
4078*03ce13f7SAndroid Build Coastguard Worker std::vector<double> constantVector = { inf };
4079*03ce13f7SAndroid Build Coastguard Worker result.storeValue(Nucleus::createConstantVector(constantVector, type()));
4080*03ce13f7SAndroid Build Coastguard Worker
4081*03ce13f7SAndroid Build Coastguard Worker return result;
4082*03ce13f7SAndroid Build Coastguard Worker }
4083*03ce13f7SAndroid Build Coastguard Worker
constant(float x,float y,float z,float w)4084*03ce13f7SAndroid Build Coastguard Worker void Float4::constant(float x, float y, float z, float w)
4085*03ce13f7SAndroid Build Coastguard Worker {
4086*03ce13f7SAndroid Build Coastguard Worker // See Float(float) constructor for the rationale behind this assert.
4087*03ce13f7SAndroid Build Coastguard Worker ASSERT(std::isfinite(x) && std::isfinite(y) && std::isfinite(z) && std::isfinite(w));
4088*03ce13f7SAndroid Build Coastguard Worker
4089*03ce13f7SAndroid Build Coastguard Worker std::vector<double> constantVector = { x, y, z, w };
4090*03ce13f7SAndroid Build Coastguard Worker storeValue(Nucleus::createConstantVector(constantVector, type()));
4091*03ce13f7SAndroid Build Coastguard Worker }
4092*03ce13f7SAndroid Build Coastguard Worker
Float4(RValue<Float4> rhs)4093*03ce13f7SAndroid Build Coastguard Worker Float4::Float4(RValue<Float4> rhs)
4094*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
4095*03ce13f7SAndroid Build Coastguard Worker {
4096*03ce13f7SAndroid Build Coastguard Worker store(rhs);
4097*03ce13f7SAndroid Build Coastguard Worker }
4098*03ce13f7SAndroid Build Coastguard Worker
Float4(const Float4 & rhs)4099*03ce13f7SAndroid Build Coastguard Worker Float4::Float4(const Float4 &rhs)
4100*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
4101*03ce13f7SAndroid Build Coastguard Worker {
4102*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
4103*03ce13f7SAndroid Build Coastguard Worker }
4104*03ce13f7SAndroid Build Coastguard Worker
Float4(const Reference<Float4> & rhs)4105*03ce13f7SAndroid Build Coastguard Worker Float4::Float4(const Reference<Float4> &rhs)
4106*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
4107*03ce13f7SAndroid Build Coastguard Worker {
4108*03ce13f7SAndroid Build Coastguard Worker store(rhs.load());
4109*03ce13f7SAndroid Build Coastguard Worker }
4110*03ce13f7SAndroid Build Coastguard Worker
Float4(const Float & rhs)4111*03ce13f7SAndroid Build Coastguard Worker Float4::Float4(const Float &rhs)
4112*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
4113*03ce13f7SAndroid Build Coastguard Worker {
4114*03ce13f7SAndroid Build Coastguard Worker *this = RValue<Float>(rhs.loadValue());
4115*03ce13f7SAndroid Build Coastguard Worker }
4116*03ce13f7SAndroid Build Coastguard Worker
Float4(const Reference<Float> & rhs)4117*03ce13f7SAndroid Build Coastguard Worker Float4::Float4(const Reference<Float> &rhs)
4118*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
4119*03ce13f7SAndroid Build Coastguard Worker {
4120*03ce13f7SAndroid Build Coastguard Worker *this = RValue<Float>(rhs.loadValue());
4121*03ce13f7SAndroid Build Coastguard Worker }
4122*03ce13f7SAndroid Build Coastguard Worker
Float4(RValue<Float2> lo,RValue<Float2> hi)4123*03ce13f7SAndroid Build Coastguard Worker Float4::Float4(RValue<Float2> lo, RValue<Float2> hi)
4124*03ce13f7SAndroid Build Coastguard Worker : XYZW(this)
4125*03ce13f7SAndroid Build Coastguard Worker {
4126*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = { 0, 1, 4, 5 }; // Real type is v4i32
4127*03ce13f7SAndroid Build Coastguard Worker Value *packed = Nucleus::createShuffleVector(lo.value(), hi.value(), shuffle);
4128*03ce13f7SAndroid Build Coastguard Worker
4129*03ce13f7SAndroid Build Coastguard Worker storeValue(packed);
4130*03ce13f7SAndroid Build Coastguard Worker }
4131*03ce13f7SAndroid Build Coastguard Worker
operator =(float x)4132*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Float4::operator=(float x)
4133*03ce13f7SAndroid Build Coastguard Worker {
4134*03ce13f7SAndroid Build Coastguard Worker return *this = Float4(x, x, x, x);
4135*03ce13f7SAndroid Build Coastguard Worker }
4136*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<Float4> rhs)4137*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Float4::operator=(RValue<Float4> rhs)
4138*03ce13f7SAndroid Build Coastguard Worker {
4139*03ce13f7SAndroid Build Coastguard Worker return store(rhs);
4140*03ce13f7SAndroid Build Coastguard Worker }
4141*03ce13f7SAndroid Build Coastguard Worker
operator =(const Float4 & rhs)4142*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Float4::operator=(const Float4 &rhs)
4143*03ce13f7SAndroid Build Coastguard Worker {
4144*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
4145*03ce13f7SAndroid Build Coastguard Worker }
4146*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<Float4> & rhs)4147*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Float4::operator=(const Reference<Float4> &rhs)
4148*03ce13f7SAndroid Build Coastguard Worker {
4149*03ce13f7SAndroid Build Coastguard Worker return store(rhs.load());
4150*03ce13f7SAndroid Build Coastguard Worker }
4151*03ce13f7SAndroid Build Coastguard Worker
operator =(RValue<Float> rhs)4152*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Float4::operator=(RValue<Float> rhs)
4153*03ce13f7SAndroid Build Coastguard Worker {
4154*03ce13f7SAndroid Build Coastguard Worker return *this = Float4(rhs);
4155*03ce13f7SAndroid Build Coastguard Worker }
4156*03ce13f7SAndroid Build Coastguard Worker
operator =(const Float & rhs)4157*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Float4::operator=(const Float &rhs)
4158*03ce13f7SAndroid Build Coastguard Worker {
4159*03ce13f7SAndroid Build Coastguard Worker return *this = Float4(rhs);
4160*03ce13f7SAndroid Build Coastguard Worker }
4161*03ce13f7SAndroid Build Coastguard Worker
operator =(const Reference<Float> & rhs)4162*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Float4::operator=(const Reference<Float> &rhs)
4163*03ce13f7SAndroid Build Coastguard Worker {
4164*03ce13f7SAndroid Build Coastguard Worker return *this = Float4(rhs);
4165*03ce13f7SAndroid Build Coastguard Worker }
4166*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<Float4> lhs,RValue<Float4> rhs)4167*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> operator+(RValue<Float4> lhs, RValue<Float4> rhs)
4168*03ce13f7SAndroid Build Coastguard Worker {
4169*03ce13f7SAndroid Build Coastguard Worker return RValue<Float4>(Nucleus::createFAdd(lhs.value(), rhs.value()));
4170*03ce13f7SAndroid Build Coastguard Worker }
4171*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<Float4> lhs,RValue<Float4> rhs)4172*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> operator-(RValue<Float4> lhs, RValue<Float4> rhs)
4173*03ce13f7SAndroid Build Coastguard Worker {
4174*03ce13f7SAndroid Build Coastguard Worker return RValue<Float4>(Nucleus::createFSub(lhs.value(), rhs.value()));
4175*03ce13f7SAndroid Build Coastguard Worker }
4176*03ce13f7SAndroid Build Coastguard Worker
operator *(RValue<Float4> lhs,RValue<Float4> rhs)4177*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> operator*(RValue<Float4> lhs, RValue<Float4> rhs)
4178*03ce13f7SAndroid Build Coastguard Worker {
4179*03ce13f7SAndroid Build Coastguard Worker return RValue<Float4>(Nucleus::createFMul(lhs.value(), rhs.value()));
4180*03ce13f7SAndroid Build Coastguard Worker }
4181*03ce13f7SAndroid Build Coastguard Worker
operator /(RValue<Float4> lhs,RValue<Float4> rhs)4182*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> operator/(RValue<Float4> lhs, RValue<Float4> rhs)
4183*03ce13f7SAndroid Build Coastguard Worker {
4184*03ce13f7SAndroid Build Coastguard Worker return RValue<Float4>(Nucleus::createFDiv(lhs.value(), rhs.value()));
4185*03ce13f7SAndroid Build Coastguard Worker }
4186*03ce13f7SAndroid Build Coastguard Worker
operator +=(Float4 & lhs,RValue<Float4> rhs)4187*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> operator+=(Float4 &lhs, RValue<Float4> rhs)
4188*03ce13f7SAndroid Build Coastguard Worker {
4189*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs + rhs;
4190*03ce13f7SAndroid Build Coastguard Worker }
4191*03ce13f7SAndroid Build Coastguard Worker
operator -=(Float4 & lhs,RValue<Float4> rhs)4192*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> operator-=(Float4 &lhs, RValue<Float4> rhs)
4193*03ce13f7SAndroid Build Coastguard Worker {
4194*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs - rhs;
4195*03ce13f7SAndroid Build Coastguard Worker }
4196*03ce13f7SAndroid Build Coastguard Worker
operator *=(Float4 & lhs,RValue<Float4> rhs)4197*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> operator*=(Float4 &lhs, RValue<Float4> rhs)
4198*03ce13f7SAndroid Build Coastguard Worker {
4199*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs * rhs;
4200*03ce13f7SAndroid Build Coastguard Worker }
4201*03ce13f7SAndroid Build Coastguard Worker
operator /=(Float4 & lhs,RValue<Float4> rhs)4202*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> operator/=(Float4 &lhs, RValue<Float4> rhs)
4203*03ce13f7SAndroid Build Coastguard Worker {
4204*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs / rhs;
4205*03ce13f7SAndroid Build Coastguard Worker }
4206*03ce13f7SAndroid Build Coastguard Worker
operator %=(Float4 & lhs,RValue<Float4> rhs)4207*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> operator%=(Float4 &lhs, RValue<Float4> rhs)
4208*03ce13f7SAndroid Build Coastguard Worker {
4209*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs % rhs;
4210*03ce13f7SAndroid Build Coastguard Worker }
4211*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<Float4> val)4212*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> operator+(RValue<Float4> val)
4213*03ce13f7SAndroid Build Coastguard Worker {
4214*03ce13f7SAndroid Build Coastguard Worker return val;
4215*03ce13f7SAndroid Build Coastguard Worker }
4216*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<Float4> val)4217*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> operator-(RValue<Float4> val)
4218*03ce13f7SAndroid Build Coastguard Worker {
4219*03ce13f7SAndroid Build Coastguard Worker return RValue<Float4>(Nucleus::createFNeg(val.value()));
4220*03ce13f7SAndroid Build Coastguard Worker }
4221*03ce13f7SAndroid Build Coastguard Worker
Insert(RValue<Float4> x,RValue<Float> element,int i)4222*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Insert(RValue<Float4> x, RValue<Float> element, int i)
4223*03ce13f7SAndroid Build Coastguard Worker {
4224*03ce13f7SAndroid Build Coastguard Worker return RValue<Float4>(Nucleus::createInsertElement(x.value(), element.value(), i));
4225*03ce13f7SAndroid Build Coastguard Worker }
4226*03ce13f7SAndroid Build Coastguard Worker
Extract(RValue<Float4> x,int i)4227*03ce13f7SAndroid Build Coastguard Worker RValue<Float> Extract(RValue<Float4> x, int i)
4228*03ce13f7SAndroid Build Coastguard Worker {
4229*03ce13f7SAndroid Build Coastguard Worker return RValue<Float>(Nucleus::createExtractElement(x.value(), Float::type(), i));
4230*03ce13f7SAndroid Build Coastguard Worker }
4231*03ce13f7SAndroid Build Coastguard Worker
Swizzle(RValue<Float4> x,uint16_t select)4232*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Swizzle(RValue<Float4> x, uint16_t select)
4233*03ce13f7SAndroid Build Coastguard Worker {
4234*03ce13f7SAndroid Build Coastguard Worker return RValue<Float4>(createSwizzle4(x.value(), select));
4235*03ce13f7SAndroid Build Coastguard Worker }
4236*03ce13f7SAndroid Build Coastguard Worker
Shuffle(RValue<Float4> x,RValue<Float4> y,uint16_t select)4237*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Shuffle(RValue<Float4> x, RValue<Float4> y, uint16_t select)
4238*03ce13f7SAndroid Build Coastguard Worker {
4239*03ce13f7SAndroid Build Coastguard Worker return RValue<Float4>(createShuffle4(x.value(), y.value(), select));
4240*03ce13f7SAndroid Build Coastguard Worker }
4241*03ce13f7SAndroid Build Coastguard Worker
ShuffleLowHigh(RValue<Float4> x,RValue<Float4> y,uint16_t imm)4242*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> ShuffleLowHigh(RValue<Float4> x, RValue<Float4> y, uint16_t imm)
4243*03ce13f7SAndroid Build Coastguard Worker {
4244*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = {
4245*03ce13f7SAndroid Build Coastguard Worker ((imm >> 12) & 0x03) + 0,
4246*03ce13f7SAndroid Build Coastguard Worker ((imm >> 8) & 0x03) + 0,
4247*03ce13f7SAndroid Build Coastguard Worker ((imm >> 4) & 0x03) + 4,
4248*03ce13f7SAndroid Build Coastguard Worker ((imm >> 0) & 0x03) + 4,
4249*03ce13f7SAndroid Build Coastguard Worker };
4250*03ce13f7SAndroid Build Coastguard Worker
4251*03ce13f7SAndroid Build Coastguard Worker return RValue<Float4>(Nucleus::createShuffleVector(x.value(), y.value(), shuffle));
4252*03ce13f7SAndroid Build Coastguard Worker }
4253*03ce13f7SAndroid Build Coastguard Worker
UnpackLow(RValue<Float4> x,RValue<Float4> y)4254*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> UnpackLow(RValue<Float4> x, RValue<Float4> y)
4255*03ce13f7SAndroid Build Coastguard Worker {
4256*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = { 0, 4, 1, 5 };
4257*03ce13f7SAndroid Build Coastguard Worker return RValue<Float4>(Nucleus::createShuffleVector(x.value(), y.value(), shuffle));
4258*03ce13f7SAndroid Build Coastguard Worker }
4259*03ce13f7SAndroid Build Coastguard Worker
UnpackHigh(RValue<Float4> x,RValue<Float4> y)4260*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> UnpackHigh(RValue<Float4> x, RValue<Float4> y)
4261*03ce13f7SAndroid Build Coastguard Worker {
4262*03ce13f7SAndroid Build Coastguard Worker std::vector<int> shuffle = { 2, 6, 3, 7 };
4263*03ce13f7SAndroid Build Coastguard Worker return RValue<Float4>(Nucleus::createShuffleVector(x.value(), y.value(), shuffle));
4264*03ce13f7SAndroid Build Coastguard Worker }
4265*03ce13f7SAndroid Build Coastguard Worker
Mask(Float4 & lhs,RValue<Float4> rhs,uint16_t select)4266*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Mask(Float4 &lhs, RValue<Float4> rhs, uint16_t select)
4267*03ce13f7SAndroid Build Coastguard Worker {
4268*03ce13f7SAndroid Build Coastguard Worker Value *vector = lhs.loadValue();
4269*03ce13f7SAndroid Build Coastguard Worker Value *result = createMask4(vector, rhs.value(), select);
4270*03ce13f7SAndroid Build Coastguard Worker lhs.storeValue(result);
4271*03ce13f7SAndroid Build Coastguard Worker
4272*03ce13f7SAndroid Build Coastguard Worker return RValue<Float4>(result);
4273*03ce13f7SAndroid Build Coastguard Worker }
4274*03ce13f7SAndroid Build Coastguard Worker
IsInf(RValue<Float4> x)4275*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> IsInf(RValue<Float4> x)
4276*03ce13f7SAndroid Build Coastguard Worker {
4277*03ce13f7SAndroid Build Coastguard Worker return CmpEQ(As<Int4>(x) & Int4(0x7FFFFFFF), Int4(0x7F800000));
4278*03ce13f7SAndroid Build Coastguard Worker }
4279*03ce13f7SAndroid Build Coastguard Worker
IsNan(RValue<Float4> x)4280*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> IsNan(RValue<Float4> x)
4281*03ce13f7SAndroid Build Coastguard Worker {
4282*03ce13f7SAndroid Build Coastguard Worker return ~CmpEQ(x, x);
4283*03ce13f7SAndroid Build Coastguard Worker }
4284*03ce13f7SAndroid Build Coastguard Worker
Exp2(RValue<Float> x)4285*03ce13f7SAndroid Build Coastguard Worker RValue<Float> Exp2(RValue<Float> x)
4286*03ce13f7SAndroid Build Coastguard Worker {
4287*03ce13f7SAndroid Build Coastguard Worker return Call(exp2f, x);
4288*03ce13f7SAndroid Build Coastguard Worker }
4289*03ce13f7SAndroid Build Coastguard Worker
Log2(RValue<Float> x)4290*03ce13f7SAndroid Build Coastguard Worker RValue<Float> Log2(RValue<Float> x)
4291*03ce13f7SAndroid Build Coastguard Worker {
4292*03ce13f7SAndroid Build Coastguard Worker return Call(log2f, x);
4293*03ce13f7SAndroid Build Coastguard Worker }
4294*03ce13f7SAndroid Build Coastguard Worker
Sin(RValue<Float4> x)4295*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Sin(RValue<Float4> x)
4296*03ce13f7SAndroid Build Coastguard Worker {
4297*03ce13f7SAndroid Build Coastguard Worker return ScalarizeCall(sinf, x);
4298*03ce13f7SAndroid Build Coastguard Worker }
4299*03ce13f7SAndroid Build Coastguard Worker
Cos(RValue<Float4> x)4300*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Cos(RValue<Float4> x)
4301*03ce13f7SAndroid Build Coastguard Worker {
4302*03ce13f7SAndroid Build Coastguard Worker return ScalarizeCall(cosf, x);
4303*03ce13f7SAndroid Build Coastguard Worker }
4304*03ce13f7SAndroid Build Coastguard Worker
Tan(RValue<Float4> x)4305*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Tan(RValue<Float4> x)
4306*03ce13f7SAndroid Build Coastguard Worker {
4307*03ce13f7SAndroid Build Coastguard Worker return ScalarizeCall(tanf, x);
4308*03ce13f7SAndroid Build Coastguard Worker }
4309*03ce13f7SAndroid Build Coastguard Worker
Asin(RValue<Float4> x)4310*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Asin(RValue<Float4> x)
4311*03ce13f7SAndroid Build Coastguard Worker {
4312*03ce13f7SAndroid Build Coastguard Worker return ScalarizeCall(asinf, x);
4313*03ce13f7SAndroid Build Coastguard Worker }
4314*03ce13f7SAndroid Build Coastguard Worker
Acos(RValue<Float4> x)4315*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Acos(RValue<Float4> x)
4316*03ce13f7SAndroid Build Coastguard Worker {
4317*03ce13f7SAndroid Build Coastguard Worker return ScalarizeCall(acosf, x);
4318*03ce13f7SAndroid Build Coastguard Worker }
4319*03ce13f7SAndroid Build Coastguard Worker
Atan(RValue<Float4> x)4320*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Atan(RValue<Float4> x)
4321*03ce13f7SAndroid Build Coastguard Worker {
4322*03ce13f7SAndroid Build Coastguard Worker return ScalarizeCall(atanf, x);
4323*03ce13f7SAndroid Build Coastguard Worker }
4324*03ce13f7SAndroid Build Coastguard Worker
Sinh(RValue<Float4> x)4325*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Sinh(RValue<Float4> x)
4326*03ce13f7SAndroid Build Coastguard Worker {
4327*03ce13f7SAndroid Build Coastguard Worker return ScalarizeCall(sinhf, x);
4328*03ce13f7SAndroid Build Coastguard Worker }
4329*03ce13f7SAndroid Build Coastguard Worker
Cosh(RValue<Float4> x)4330*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Cosh(RValue<Float4> x)
4331*03ce13f7SAndroid Build Coastguard Worker {
4332*03ce13f7SAndroid Build Coastguard Worker return ScalarizeCall(coshf, x);
4333*03ce13f7SAndroid Build Coastguard Worker }
4334*03ce13f7SAndroid Build Coastguard Worker
Tanh(RValue<Float4> x)4335*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Tanh(RValue<Float4> x)
4336*03ce13f7SAndroid Build Coastguard Worker {
4337*03ce13f7SAndroid Build Coastguard Worker return ScalarizeCall(tanhf, x);
4338*03ce13f7SAndroid Build Coastguard Worker }
4339*03ce13f7SAndroid Build Coastguard Worker
Asinh(RValue<Float4> x)4340*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Asinh(RValue<Float4> x)
4341*03ce13f7SAndroid Build Coastguard Worker {
4342*03ce13f7SAndroid Build Coastguard Worker return ScalarizeCall(asinhf, x);
4343*03ce13f7SAndroid Build Coastguard Worker }
4344*03ce13f7SAndroid Build Coastguard Worker
Acosh(RValue<Float4> x)4345*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Acosh(RValue<Float4> x)
4346*03ce13f7SAndroid Build Coastguard Worker {
4347*03ce13f7SAndroid Build Coastguard Worker return ScalarizeCall(acoshf, x);
4348*03ce13f7SAndroid Build Coastguard Worker }
4349*03ce13f7SAndroid Build Coastguard Worker
Atanh(RValue<Float4> x)4350*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Atanh(RValue<Float4> x)
4351*03ce13f7SAndroid Build Coastguard Worker {
4352*03ce13f7SAndroid Build Coastguard Worker return ScalarizeCall(atanhf, x);
4353*03ce13f7SAndroid Build Coastguard Worker }
4354*03ce13f7SAndroid Build Coastguard Worker
Atan2(RValue<Float4> x,RValue<Float4> y)4355*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Atan2(RValue<Float4> x, RValue<Float4> y)
4356*03ce13f7SAndroid Build Coastguard Worker {
4357*03ce13f7SAndroid Build Coastguard Worker return ScalarizeCall(atan2f, x, y);
4358*03ce13f7SAndroid Build Coastguard Worker }
4359*03ce13f7SAndroid Build Coastguard Worker
Pow(RValue<Float4> x,RValue<Float4> y)4360*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Pow(RValue<Float4> x, RValue<Float4> y)
4361*03ce13f7SAndroid Build Coastguard Worker {
4362*03ce13f7SAndroid Build Coastguard Worker return ScalarizeCall(powf, x, y);
4363*03ce13f7SAndroid Build Coastguard Worker }
4364*03ce13f7SAndroid Build Coastguard Worker
Exp(RValue<Float4> x)4365*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Exp(RValue<Float4> x)
4366*03ce13f7SAndroid Build Coastguard Worker {
4367*03ce13f7SAndroid Build Coastguard Worker return ScalarizeCall(expf, x);
4368*03ce13f7SAndroid Build Coastguard Worker }
4369*03ce13f7SAndroid Build Coastguard Worker
Log(RValue<Float4> x)4370*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Log(RValue<Float4> x)
4371*03ce13f7SAndroid Build Coastguard Worker {
4372*03ce13f7SAndroid Build Coastguard Worker return ScalarizeCall(logf, x);
4373*03ce13f7SAndroid Build Coastguard Worker }
4374*03ce13f7SAndroid Build Coastguard Worker
Exp2(RValue<Float4> x)4375*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Exp2(RValue<Float4> x)
4376*03ce13f7SAndroid Build Coastguard Worker {
4377*03ce13f7SAndroid Build Coastguard Worker return ScalarizeCall(exp2f, x);
4378*03ce13f7SAndroid Build Coastguard Worker }
4379*03ce13f7SAndroid Build Coastguard Worker
Log2(RValue<Float4> x)4380*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Log2(RValue<Float4> x)
4381*03ce13f7SAndroid Build Coastguard Worker {
4382*03ce13f7SAndroid Build Coastguard Worker return ScalarizeCall(log2f, x);
4383*03ce13f7SAndroid Build Coastguard Worker }
4384*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<Pointer<Byte>> lhs,int offset)4385*03ce13f7SAndroid Build Coastguard Worker RValue<Pointer<Byte>> operator+(RValue<Pointer<Byte>> lhs, int offset)
4386*03ce13f7SAndroid Build Coastguard Worker {
4387*03ce13f7SAndroid Build Coastguard Worker return lhs + RValue<Int>(Nucleus::createConstantInt(offset));
4388*03ce13f7SAndroid Build Coastguard Worker }
4389*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<Pointer<Byte>> lhs,RValue<Int> offset)4390*03ce13f7SAndroid Build Coastguard Worker RValue<Pointer<Byte>> operator+(RValue<Pointer<Byte>> lhs, RValue<Int> offset)
4391*03ce13f7SAndroid Build Coastguard Worker {
4392*03ce13f7SAndroid Build Coastguard Worker return RValue<Pointer<Byte>>(Nucleus::createGEP(lhs.value(), Byte::type(), offset.value(), false));
4393*03ce13f7SAndroid Build Coastguard Worker }
4394*03ce13f7SAndroid Build Coastguard Worker
operator +(RValue<Pointer<Byte>> lhs,RValue<UInt> offset)4395*03ce13f7SAndroid Build Coastguard Worker RValue<Pointer<Byte>> operator+(RValue<Pointer<Byte>> lhs, RValue<UInt> offset)
4396*03ce13f7SAndroid Build Coastguard Worker {
4397*03ce13f7SAndroid Build Coastguard Worker return RValue<Pointer<Byte>>(Nucleus::createGEP(lhs.value(), Byte::type(), offset.value(), true));
4398*03ce13f7SAndroid Build Coastguard Worker }
4399*03ce13f7SAndroid Build Coastguard Worker
operator +=(Pointer<Byte> & lhs,int offset)4400*03ce13f7SAndroid Build Coastguard Worker RValue<Pointer<Byte>> operator+=(Pointer<Byte> &lhs, int offset)
4401*03ce13f7SAndroid Build Coastguard Worker {
4402*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs + offset;
4403*03ce13f7SAndroid Build Coastguard Worker }
4404*03ce13f7SAndroid Build Coastguard Worker
operator +=(Pointer<Byte> & lhs,RValue<Int> offset)4405*03ce13f7SAndroid Build Coastguard Worker RValue<Pointer<Byte>> operator+=(Pointer<Byte> &lhs, RValue<Int> offset)
4406*03ce13f7SAndroid Build Coastguard Worker {
4407*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs + offset;
4408*03ce13f7SAndroid Build Coastguard Worker }
4409*03ce13f7SAndroid Build Coastguard Worker
operator +=(Pointer<Byte> & lhs,RValue<UInt> offset)4410*03ce13f7SAndroid Build Coastguard Worker RValue<Pointer<Byte>> operator+=(Pointer<Byte> &lhs, RValue<UInt> offset)
4411*03ce13f7SAndroid Build Coastguard Worker {
4412*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs + offset;
4413*03ce13f7SAndroid Build Coastguard Worker }
4414*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<Pointer<Byte>> lhs,int offset)4415*03ce13f7SAndroid Build Coastguard Worker RValue<Pointer<Byte>> operator-(RValue<Pointer<Byte>> lhs, int offset)
4416*03ce13f7SAndroid Build Coastguard Worker {
4417*03ce13f7SAndroid Build Coastguard Worker return lhs + -offset;
4418*03ce13f7SAndroid Build Coastguard Worker }
4419*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<Pointer<Byte>> lhs,RValue<Int> offset)4420*03ce13f7SAndroid Build Coastguard Worker RValue<Pointer<Byte>> operator-(RValue<Pointer<Byte>> lhs, RValue<Int> offset)
4421*03ce13f7SAndroid Build Coastguard Worker {
4422*03ce13f7SAndroid Build Coastguard Worker return lhs + -offset;
4423*03ce13f7SAndroid Build Coastguard Worker }
4424*03ce13f7SAndroid Build Coastguard Worker
operator -(RValue<Pointer<Byte>> lhs,RValue<UInt> offset)4425*03ce13f7SAndroid Build Coastguard Worker RValue<Pointer<Byte>> operator-(RValue<Pointer<Byte>> lhs, RValue<UInt> offset)
4426*03ce13f7SAndroid Build Coastguard Worker {
4427*03ce13f7SAndroid Build Coastguard Worker return lhs + -offset;
4428*03ce13f7SAndroid Build Coastguard Worker }
4429*03ce13f7SAndroid Build Coastguard Worker
operator -=(Pointer<Byte> & lhs,int offset)4430*03ce13f7SAndroid Build Coastguard Worker RValue<Pointer<Byte>> operator-=(Pointer<Byte> &lhs, int offset)
4431*03ce13f7SAndroid Build Coastguard Worker {
4432*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs - offset;
4433*03ce13f7SAndroid Build Coastguard Worker }
4434*03ce13f7SAndroid Build Coastguard Worker
operator -=(Pointer<Byte> & lhs,RValue<Int> offset)4435*03ce13f7SAndroid Build Coastguard Worker RValue<Pointer<Byte>> operator-=(Pointer<Byte> &lhs, RValue<Int> offset)
4436*03ce13f7SAndroid Build Coastguard Worker {
4437*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs - offset;
4438*03ce13f7SAndroid Build Coastguard Worker }
4439*03ce13f7SAndroid Build Coastguard Worker
operator -=(Pointer<Byte> & lhs,RValue<UInt> offset)4440*03ce13f7SAndroid Build Coastguard Worker RValue<Pointer<Byte>> operator-=(Pointer<Byte> &lhs, RValue<UInt> offset)
4441*03ce13f7SAndroid Build Coastguard Worker {
4442*03ce13f7SAndroid Build Coastguard Worker return lhs = lhs - offset;
4443*03ce13f7SAndroid Build Coastguard Worker }
4444*03ce13f7SAndroid Build Coastguard Worker
AnyTrue(const RValue<Int4> & bools)4445*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> AnyTrue(const RValue<Int4> &bools)
4446*03ce13f7SAndroid Build Coastguard Worker {
4447*03ce13f7SAndroid Build Coastguard Worker return SignMask(bools) != 0;
4448*03ce13f7SAndroid Build Coastguard Worker }
4449*03ce13f7SAndroid Build Coastguard Worker
AnyFalse(const RValue<Int4> & bools)4450*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> AnyFalse(const RValue<Int4> &bools)
4451*03ce13f7SAndroid Build Coastguard Worker {
4452*03ce13f7SAndroid Build Coastguard Worker return SignMask(~bools) != 0; // TODO(b/214588983): Compare against mask of 4 1's to avoid bitwise NOT.
4453*03ce13f7SAndroid Build Coastguard Worker }
4454*03ce13f7SAndroid Build Coastguard Worker
AllTrue(const RValue<Int4> & bools)4455*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> AllTrue(const RValue<Int4> &bools)
4456*03ce13f7SAndroid Build Coastguard Worker {
4457*03ce13f7SAndroid Build Coastguard Worker return SignMask(~bools) == 0; // TODO(b/214588983): Compare against mask of 4 1's to avoid bitwise NOT.
4458*03ce13f7SAndroid Build Coastguard Worker }
4459*03ce13f7SAndroid Build Coastguard Worker
AllFalse(const RValue<Int4> & bools)4460*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> AllFalse(const RValue<Int4> &bools)
4461*03ce13f7SAndroid Build Coastguard Worker {
4462*03ce13f7SAndroid Build Coastguard Worker return SignMask(bools) == 0;
4463*03ce13f7SAndroid Build Coastguard Worker }
4464*03ce13f7SAndroid Build Coastguard Worker
Divergent(const RValue<Int4> & ints)4465*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> Divergent(const RValue<Int4> &ints)
4466*03ce13f7SAndroid Build Coastguard Worker {
4467*03ce13f7SAndroid Build Coastguard Worker auto broadcastFirst = Int4(Extract(ints, 0));
4468*03ce13f7SAndroid Build Coastguard Worker return AnyTrue(CmpNEQ(broadcastFirst, ints));
4469*03ce13f7SAndroid Build Coastguard Worker }
4470*03ce13f7SAndroid Build Coastguard Worker
Divergent(const RValue<Float4> & floats)4471*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> Divergent(const RValue<Float4> &floats)
4472*03ce13f7SAndroid Build Coastguard Worker {
4473*03ce13f7SAndroid Build Coastguard Worker auto broadcastFirst = Float4(Extract(floats, 0));
4474*03ce13f7SAndroid Build Coastguard Worker return AnyTrue(CmpNEQ(broadcastFirst, floats));
4475*03ce13f7SAndroid Build Coastguard Worker }
4476*03ce13f7SAndroid Build Coastguard Worker
Uniform(const RValue<Int4> & ints)4477*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> Uniform(const RValue<Int4> &ints)
4478*03ce13f7SAndroid Build Coastguard Worker {
4479*03ce13f7SAndroid Build Coastguard Worker auto broadcastFirst = Int4(Extract(ints, 0));
4480*03ce13f7SAndroid Build Coastguard Worker return AllFalse(CmpNEQ(broadcastFirst, ints));
4481*03ce13f7SAndroid Build Coastguard Worker }
4482*03ce13f7SAndroid Build Coastguard Worker
Uniform(const RValue<Float4> & floats)4483*03ce13f7SAndroid Build Coastguard Worker RValue<Bool> Uniform(const RValue<Float4> &floats)
4484*03ce13f7SAndroid Build Coastguard Worker {
4485*03ce13f7SAndroid Build Coastguard Worker auto broadcastFirst = Float4(Extract(floats, 0));
4486*03ce13f7SAndroid Build Coastguard Worker return AllFalse(CmpNEQ(broadcastFirst, floats));
4487*03ce13f7SAndroid Build Coastguard Worker }
4488*03ce13f7SAndroid Build Coastguard Worker
Return()4489*03ce13f7SAndroid Build Coastguard Worker void Return()
4490*03ce13f7SAndroid Build Coastguard Worker {
4491*03ce13f7SAndroid Build Coastguard Worker Nucleus::createRetVoid();
4492*03ce13f7SAndroid Build Coastguard Worker // Place any unreachable instructions in an unreferenced block.
4493*03ce13f7SAndroid Build Coastguard Worker Nucleus::setInsertBlock(Nucleus::createBasicBlock());
4494*03ce13f7SAndroid Build Coastguard Worker }
4495*03ce13f7SAndroid Build Coastguard Worker
branch(RValue<Bool> cmp,BasicBlock * bodyBB,BasicBlock * endBB)4496*03ce13f7SAndroid Build Coastguard Worker void branch(RValue<Bool> cmp, BasicBlock *bodyBB, BasicBlock *endBB)
4497*03ce13f7SAndroid Build Coastguard Worker {
4498*03ce13f7SAndroid Build Coastguard Worker Nucleus::createCondBr(cmp.value(), bodyBB, endBB);
4499*03ce13f7SAndroid Build Coastguard Worker Nucleus::setInsertBlock(bodyBB);
4500*03ce13f7SAndroid Build Coastguard Worker }
4501*03ce13f7SAndroid Build Coastguard Worker
MaskedLoad(RValue<Pointer<Float4>> base,RValue<Int4> mask,unsigned int alignment,bool zeroMaskedLanes)4502*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> MaskedLoad(RValue<Pointer<Float4>> base, RValue<Int4> mask, unsigned int alignment, bool zeroMaskedLanes /* = false */)
4503*03ce13f7SAndroid Build Coastguard Worker {
4504*03ce13f7SAndroid Build Coastguard Worker return RValue<Float4>(Nucleus::createMaskedLoad(base.value(), Float::type(), mask.value(), alignment, zeroMaskedLanes));
4505*03ce13f7SAndroid Build Coastguard Worker }
4506*03ce13f7SAndroid Build Coastguard Worker
MaskedLoad(RValue<Pointer<Int4>> base,RValue<Int4> mask,unsigned int alignment,bool zeroMaskedLanes)4507*03ce13f7SAndroid Build Coastguard Worker RValue<Int4> MaskedLoad(RValue<Pointer<Int4>> base, RValue<Int4> mask, unsigned int alignment, bool zeroMaskedLanes /* = false */)
4508*03ce13f7SAndroid Build Coastguard Worker {
4509*03ce13f7SAndroid Build Coastguard Worker return RValue<Int4>(Nucleus::createMaskedLoad(base.value(), Int::type(), mask.value(), alignment, zeroMaskedLanes));
4510*03ce13f7SAndroid Build Coastguard Worker }
4511*03ce13f7SAndroid Build Coastguard Worker
MaskedStore(RValue<Pointer<Float4>> base,RValue<Float4> val,RValue<Int4> mask,unsigned int alignment)4512*03ce13f7SAndroid Build Coastguard Worker void MaskedStore(RValue<Pointer<Float4>> base, RValue<Float4> val, RValue<Int4> mask, unsigned int alignment)
4513*03ce13f7SAndroid Build Coastguard Worker {
4514*03ce13f7SAndroid Build Coastguard Worker Nucleus::createMaskedStore(base.value(), val.value(), mask.value(), alignment);
4515*03ce13f7SAndroid Build Coastguard Worker }
4516*03ce13f7SAndroid Build Coastguard Worker
MaskedStore(RValue<Pointer<Int4>> base,RValue<Int4> val,RValue<Int4> mask,unsigned int alignment)4517*03ce13f7SAndroid Build Coastguard Worker void MaskedStore(RValue<Pointer<Int4>> base, RValue<Int4> val, RValue<Int4> mask, unsigned int alignment)
4518*03ce13f7SAndroid Build Coastguard Worker {
4519*03ce13f7SAndroid Build Coastguard Worker Nucleus::createMaskedStore(base.value(), val.value(), mask.value(), alignment);
4520*03ce13f7SAndroid Build Coastguard Worker }
4521*03ce13f7SAndroid Build Coastguard Worker
Fence(std::memory_order memoryOrder)4522*03ce13f7SAndroid Build Coastguard Worker void Fence(std::memory_order memoryOrder)
4523*03ce13f7SAndroid Build Coastguard Worker {
4524*03ce13f7SAndroid Build Coastguard Worker ASSERT_MSG(memoryOrder == std::memory_order_acquire ||
4525*03ce13f7SAndroid Build Coastguard Worker memoryOrder == std::memory_order_release ||
4526*03ce13f7SAndroid Build Coastguard Worker memoryOrder == std::memory_order_acq_rel ||
4527*03ce13f7SAndroid Build Coastguard Worker memoryOrder == std::memory_order_seq_cst,
4528*03ce13f7SAndroid Build Coastguard Worker "Unsupported memoryOrder: %d", int(memoryOrder));
4529*03ce13f7SAndroid Build Coastguard Worker Nucleus::createFence(memoryOrder);
4530*03ce13f7SAndroid Build Coastguard Worker }
4531*03ce13f7SAndroid Build Coastguard Worker
cast(bool v)4532*03ce13f7SAndroid Build Coastguard Worker Bool CToReactor<bool>::cast(bool v)
4533*03ce13f7SAndroid Build Coastguard Worker {
4534*03ce13f7SAndroid Build Coastguard Worker return type(v);
4535*03ce13f7SAndroid Build Coastguard Worker }
cast(uint8_t v)4536*03ce13f7SAndroid Build Coastguard Worker Byte CToReactor<uint8_t>::cast(uint8_t v)
4537*03ce13f7SAndroid Build Coastguard Worker {
4538*03ce13f7SAndroid Build Coastguard Worker return type(v);
4539*03ce13f7SAndroid Build Coastguard Worker }
cast(int8_t v)4540*03ce13f7SAndroid Build Coastguard Worker SByte CToReactor<int8_t>::cast(int8_t v)
4541*03ce13f7SAndroid Build Coastguard Worker {
4542*03ce13f7SAndroid Build Coastguard Worker return type(v);
4543*03ce13f7SAndroid Build Coastguard Worker }
cast(int16_t v)4544*03ce13f7SAndroid Build Coastguard Worker Short CToReactor<int16_t>::cast(int16_t v)
4545*03ce13f7SAndroid Build Coastguard Worker {
4546*03ce13f7SAndroid Build Coastguard Worker return type(v);
4547*03ce13f7SAndroid Build Coastguard Worker }
cast(uint16_t v)4548*03ce13f7SAndroid Build Coastguard Worker UShort CToReactor<uint16_t>::cast(uint16_t v)
4549*03ce13f7SAndroid Build Coastguard Worker {
4550*03ce13f7SAndroid Build Coastguard Worker return type(v);
4551*03ce13f7SAndroid Build Coastguard Worker }
cast(int32_t v)4552*03ce13f7SAndroid Build Coastguard Worker Int CToReactor<int32_t>::cast(int32_t v)
4553*03ce13f7SAndroid Build Coastguard Worker {
4554*03ce13f7SAndroid Build Coastguard Worker return type(v);
4555*03ce13f7SAndroid Build Coastguard Worker }
cast(uint32_t v)4556*03ce13f7SAndroid Build Coastguard Worker UInt CToReactor<uint32_t>::cast(uint32_t v)
4557*03ce13f7SAndroid Build Coastguard Worker {
4558*03ce13f7SAndroid Build Coastguard Worker return type(v);
4559*03ce13f7SAndroid Build Coastguard Worker }
cast(float v)4560*03ce13f7SAndroid Build Coastguard Worker Float CToReactor<float>::cast(float v)
4561*03ce13f7SAndroid Build Coastguard Worker {
4562*03ce13f7SAndroid Build Coastguard Worker return type(v);
4563*03ce13f7SAndroid Build Coastguard Worker }
cast(float v[4])4564*03ce13f7SAndroid Build Coastguard Worker Float4 CToReactor<float[4]>::cast(float v[4])
4565*03ce13f7SAndroid Build Coastguard Worker {
4566*03ce13f7SAndroid Build Coastguard Worker return type(v[0], v[1], v[2], v[3]);
4567*03ce13f7SAndroid Build Coastguard Worker }
4568*03ce13f7SAndroid Build Coastguard Worker
4569*03ce13f7SAndroid Build Coastguard Worker // TODO: Long has no constructor that takes a uint64_t
4570*03ce13f7SAndroid Build Coastguard Worker // Long CToReactor<uint64_t>::cast(uint64_t v) { return type(v); }
4571*03ce13f7SAndroid Build Coastguard Worker
4572*03ce13f7SAndroid Build Coastguard Worker #ifdef ENABLE_RR_PRINT
replaceAll(std::string str,const std::string & substr,const std::string & replacement)4573*03ce13f7SAndroid Build Coastguard Worker static std::string replaceAll(std::string str, const std::string &substr, const std::string &replacement)
4574*03ce13f7SAndroid Build Coastguard Worker {
4575*03ce13f7SAndroid Build Coastguard Worker size_t pos = 0;
4576*03ce13f7SAndroid Build Coastguard Worker while((pos = str.find(substr, pos)) != std::string::npos)
4577*03ce13f7SAndroid Build Coastguard Worker {
4578*03ce13f7SAndroid Build Coastguard Worker str.replace(pos, substr.length(), replacement);
4579*03ce13f7SAndroid Build Coastguard Worker pos += replacement.length();
4580*03ce13f7SAndroid Build Coastguard Worker }
4581*03ce13f7SAndroid Build Coastguard Worker return str;
4582*03ce13f7SAndroid Build Coastguard Worker }
4583*03ce13f7SAndroid Build Coastguard Worker
4584*03ce13f7SAndroid Build Coastguard Worker // extractAll returns a vector containing the extracted n scalar values of the vector vec.
extractAll(Value * vec,int n)4585*03ce13f7SAndroid Build Coastguard Worker static std::vector<Value *> extractAll(Value *vec, int n)
4586*03ce13f7SAndroid Build Coastguard Worker {
4587*03ce13f7SAndroid Build Coastguard Worker Type *elemTy = Nucleus::getContainedType(Nucleus::getType(vec));
4588*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> elements;
4589*03ce13f7SAndroid Build Coastguard Worker elements.reserve(n);
4590*03ce13f7SAndroid Build Coastguard Worker for(int i = 0; i < n; i++)
4591*03ce13f7SAndroid Build Coastguard Worker {
4592*03ce13f7SAndroid Build Coastguard Worker auto el = Nucleus::createExtractElement(vec, elemTy, i);
4593*03ce13f7SAndroid Build Coastguard Worker elements.push_back(el);
4594*03ce13f7SAndroid Build Coastguard Worker }
4595*03ce13f7SAndroid Build Coastguard Worker return elements;
4596*03ce13f7SAndroid Build Coastguard Worker }
4597*03ce13f7SAndroid Build Coastguard Worker
4598*03ce13f7SAndroid Build Coastguard Worker // toInt returns all the integer values in vals extended to a printf-required storage value
toInt(const std::vector<Value * > & vals,bool isSigned)4599*03ce13f7SAndroid Build Coastguard Worker static std::vector<Value *> toInt(const std::vector<Value *> &vals, bool isSigned)
4600*03ce13f7SAndroid Build Coastguard Worker {
4601*03ce13f7SAndroid Build Coastguard Worker auto storageTy = Nucleus::getPrintfStorageType(Int::type());
4602*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> elements;
4603*03ce13f7SAndroid Build Coastguard Worker elements.reserve(vals.size());
4604*03ce13f7SAndroid Build Coastguard Worker for(auto v : vals)
4605*03ce13f7SAndroid Build Coastguard Worker {
4606*03ce13f7SAndroid Build Coastguard Worker if(isSigned)
4607*03ce13f7SAndroid Build Coastguard Worker {
4608*03ce13f7SAndroid Build Coastguard Worker elements.push_back(Nucleus::createSExt(v, storageTy));
4609*03ce13f7SAndroid Build Coastguard Worker }
4610*03ce13f7SAndroid Build Coastguard Worker else
4611*03ce13f7SAndroid Build Coastguard Worker {
4612*03ce13f7SAndroid Build Coastguard Worker elements.push_back(Nucleus::createZExt(v, storageTy));
4613*03ce13f7SAndroid Build Coastguard Worker }
4614*03ce13f7SAndroid Build Coastguard Worker }
4615*03ce13f7SAndroid Build Coastguard Worker return elements;
4616*03ce13f7SAndroid Build Coastguard Worker }
4617*03ce13f7SAndroid Build Coastguard Worker
4618*03ce13f7SAndroid Build Coastguard Worker // toFloat returns all the float values in vals extended to extended to a printf-required storage value
toFloat(const std::vector<Value * > & vals)4619*03ce13f7SAndroid Build Coastguard Worker static std::vector<Value *> toFloat(const std::vector<Value *> &vals)
4620*03ce13f7SAndroid Build Coastguard Worker {
4621*03ce13f7SAndroid Build Coastguard Worker auto storageTy = Nucleus::getPrintfStorageType(Float::type());
4622*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> elements;
4623*03ce13f7SAndroid Build Coastguard Worker elements.reserve(vals.size());
4624*03ce13f7SAndroid Build Coastguard Worker for(auto v : vals)
4625*03ce13f7SAndroid Build Coastguard Worker {
4626*03ce13f7SAndroid Build Coastguard Worker elements.push_back(Nucleus::createFPExt(v, storageTy));
4627*03ce13f7SAndroid Build Coastguard Worker }
4628*03ce13f7SAndroid Build Coastguard Worker return elements;
4629*03ce13f7SAndroid Build Coastguard Worker }
4630*03ce13f7SAndroid Build Coastguard Worker
val(const RValue<Bool> & v)4631*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> PrintValue::Ty<Bool>::val(const RValue<Bool> &v)
4632*03ce13f7SAndroid Build Coastguard Worker {
4633*03ce13f7SAndroid Build Coastguard Worker auto t = Nucleus::createConstantString("true");
4634*03ce13f7SAndroid Build Coastguard Worker auto f = Nucleus::createConstantString("false");
4635*03ce13f7SAndroid Build Coastguard Worker return { Nucleus::createSelect(v.value(), t, f) };
4636*03ce13f7SAndroid Build Coastguard Worker }
4637*03ce13f7SAndroid Build Coastguard Worker
val(const RValue<Byte> & v)4638*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> PrintValue::Ty<Byte>::val(const RValue<Byte> &v)
4639*03ce13f7SAndroid Build Coastguard Worker {
4640*03ce13f7SAndroid Build Coastguard Worker return toInt({ v.value() }, false);
4641*03ce13f7SAndroid Build Coastguard Worker }
4642*03ce13f7SAndroid Build Coastguard Worker
val(const RValue<Byte4> & v)4643*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> PrintValue::Ty<Byte4>::val(const RValue<Byte4> &v)
4644*03ce13f7SAndroid Build Coastguard Worker {
4645*03ce13f7SAndroid Build Coastguard Worker return toInt(extractAll(v.value(), 4), false);
4646*03ce13f7SAndroid Build Coastguard Worker }
4647*03ce13f7SAndroid Build Coastguard Worker
val(const RValue<Int> & v)4648*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> PrintValue::Ty<Int>::val(const RValue<Int> &v)
4649*03ce13f7SAndroid Build Coastguard Worker {
4650*03ce13f7SAndroid Build Coastguard Worker return toInt({ v.value() }, true);
4651*03ce13f7SAndroid Build Coastguard Worker }
4652*03ce13f7SAndroid Build Coastguard Worker
val(const RValue<Int2> & v)4653*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> PrintValue::Ty<Int2>::val(const RValue<Int2> &v)
4654*03ce13f7SAndroid Build Coastguard Worker {
4655*03ce13f7SAndroid Build Coastguard Worker return toInt(extractAll(v.value(), 2), true);
4656*03ce13f7SAndroid Build Coastguard Worker }
4657*03ce13f7SAndroid Build Coastguard Worker
val(const RValue<Int4> & v)4658*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> PrintValue::Ty<Int4>::val(const RValue<Int4> &v)
4659*03ce13f7SAndroid Build Coastguard Worker {
4660*03ce13f7SAndroid Build Coastguard Worker return toInt(extractAll(v.value(), 4), true);
4661*03ce13f7SAndroid Build Coastguard Worker }
4662*03ce13f7SAndroid Build Coastguard Worker
val(const RValue<UInt> & v)4663*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> PrintValue::Ty<UInt>::val(const RValue<UInt> &v)
4664*03ce13f7SAndroid Build Coastguard Worker {
4665*03ce13f7SAndroid Build Coastguard Worker return toInt({ v.value() }, false);
4666*03ce13f7SAndroid Build Coastguard Worker }
4667*03ce13f7SAndroid Build Coastguard Worker
val(const RValue<UInt2> & v)4668*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> PrintValue::Ty<UInt2>::val(const RValue<UInt2> &v)
4669*03ce13f7SAndroid Build Coastguard Worker {
4670*03ce13f7SAndroid Build Coastguard Worker return toInt(extractAll(v.value(), 2), false);
4671*03ce13f7SAndroid Build Coastguard Worker }
4672*03ce13f7SAndroid Build Coastguard Worker
val(const RValue<UInt4> & v)4673*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> PrintValue::Ty<UInt4>::val(const RValue<UInt4> &v)
4674*03ce13f7SAndroid Build Coastguard Worker {
4675*03ce13f7SAndroid Build Coastguard Worker return toInt(extractAll(v.value(), 4), false);
4676*03ce13f7SAndroid Build Coastguard Worker }
4677*03ce13f7SAndroid Build Coastguard Worker
val(const RValue<Short> & v)4678*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> PrintValue::Ty<Short>::val(const RValue<Short> &v)
4679*03ce13f7SAndroid Build Coastguard Worker {
4680*03ce13f7SAndroid Build Coastguard Worker return toInt({ v.value() }, true);
4681*03ce13f7SAndroid Build Coastguard Worker }
4682*03ce13f7SAndroid Build Coastguard Worker
val(const RValue<Short4> & v)4683*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> PrintValue::Ty<Short4>::val(const RValue<Short4> &v)
4684*03ce13f7SAndroid Build Coastguard Worker {
4685*03ce13f7SAndroid Build Coastguard Worker return toInt(extractAll(v.value(), 4), true);
4686*03ce13f7SAndroid Build Coastguard Worker }
4687*03ce13f7SAndroid Build Coastguard Worker
val(const RValue<UShort> & v)4688*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> PrintValue::Ty<UShort>::val(const RValue<UShort> &v)
4689*03ce13f7SAndroid Build Coastguard Worker {
4690*03ce13f7SAndroid Build Coastguard Worker return toInt({ v.value() }, false);
4691*03ce13f7SAndroid Build Coastguard Worker }
4692*03ce13f7SAndroid Build Coastguard Worker
val(const RValue<UShort4> & v)4693*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> PrintValue::Ty<UShort4>::val(const RValue<UShort4> &v)
4694*03ce13f7SAndroid Build Coastguard Worker {
4695*03ce13f7SAndroid Build Coastguard Worker return toInt(extractAll(v.value(), 4), false);
4696*03ce13f7SAndroid Build Coastguard Worker }
4697*03ce13f7SAndroid Build Coastguard Worker
val(const RValue<Float> & v)4698*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> PrintValue::Ty<Float>::val(const RValue<Float> &v)
4699*03ce13f7SAndroid Build Coastguard Worker {
4700*03ce13f7SAndroid Build Coastguard Worker return toFloat({ v.value() });
4701*03ce13f7SAndroid Build Coastguard Worker }
4702*03ce13f7SAndroid Build Coastguard Worker
val(const RValue<Float4> & v)4703*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> PrintValue::Ty<Float4>::val(const RValue<Float4> &v)
4704*03ce13f7SAndroid Build Coastguard Worker {
4705*03ce13f7SAndroid Build Coastguard Worker return toFloat(extractAll(v.value(), 4));
4706*03ce13f7SAndroid Build Coastguard Worker }
4707*03ce13f7SAndroid Build Coastguard Worker
val(const RValue<SIMD::Int> & v)4708*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> PrintValue::Ty<SIMD::Int>::val(const RValue<SIMD::Int> &v)
4709*03ce13f7SAndroid Build Coastguard Worker {
4710*03ce13f7SAndroid Build Coastguard Worker return toInt(extractAll(v.value(), SIMD::Width), true);
4711*03ce13f7SAndroid Build Coastguard Worker }
4712*03ce13f7SAndroid Build Coastguard Worker
val(const RValue<SIMD::UInt> & v)4713*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> PrintValue::Ty<SIMD::UInt>::val(const RValue<SIMD::UInt> &v)
4714*03ce13f7SAndroid Build Coastguard Worker {
4715*03ce13f7SAndroid Build Coastguard Worker return toInt(extractAll(v.value(), SIMD::Width), false);
4716*03ce13f7SAndroid Build Coastguard Worker }
4717*03ce13f7SAndroid Build Coastguard Worker
val(const RValue<SIMD::Float> & v)4718*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> PrintValue::Ty<SIMD::Float>::val(const RValue<SIMD::Float> &v)
4719*03ce13f7SAndroid Build Coastguard Worker {
4720*03ce13f7SAndroid Build Coastguard Worker return toFloat(extractAll(v.value(), SIMD::Width));
4721*03ce13f7SAndroid Build Coastguard Worker }
4722*03ce13f7SAndroid Build Coastguard Worker
val(const char * v)4723*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> PrintValue::Ty<const char *>::val(const char *v)
4724*03ce13f7SAndroid Build Coastguard Worker {
4725*03ce13f7SAndroid Build Coastguard Worker return { Nucleus::createConstantString(v) };
4726*03ce13f7SAndroid Build Coastguard Worker }
4727*03ce13f7SAndroid Build Coastguard Worker
Printv(const char * function,const char * file,int line,const char * fmt,std::initializer_list<PrintValue> args)4728*03ce13f7SAndroid Build Coastguard Worker void Printv(const char *function, const char *file, int line, const char *fmt, std::initializer_list<PrintValue> args)
4729*03ce13f7SAndroid Build Coastguard Worker {
4730*03ce13f7SAndroid Build Coastguard Worker // Build the printf format message string.
4731*03ce13f7SAndroid Build Coastguard Worker std::string str;
4732*03ce13f7SAndroid Build Coastguard Worker if(file != nullptr) { str += (line > 0) ? "%s:%d " : "%s "; }
4733*03ce13f7SAndroid Build Coastguard Worker if(function != nullptr) { str += "%s "; }
4734*03ce13f7SAndroid Build Coastguard Worker str += fmt;
4735*03ce13f7SAndroid Build Coastguard Worker
4736*03ce13f7SAndroid Build Coastguard Worker // Perform substitution on all '{n}' bracketed indices in the format
4737*03ce13f7SAndroid Build Coastguard Worker // message.
4738*03ce13f7SAndroid Build Coastguard Worker int i = 0;
4739*03ce13f7SAndroid Build Coastguard Worker for(const PrintValue &arg : args)
4740*03ce13f7SAndroid Build Coastguard Worker {
4741*03ce13f7SAndroid Build Coastguard Worker str = replaceAll(str, "{" + std::to_string(i++) + "}", arg.format);
4742*03ce13f7SAndroid Build Coastguard Worker }
4743*03ce13f7SAndroid Build Coastguard Worker
4744*03ce13f7SAndroid Build Coastguard Worker std::vector<Value *> vals;
4745*03ce13f7SAndroid Build Coastguard Worker vals.reserve(8);
4746*03ce13f7SAndroid Build Coastguard Worker
4747*03ce13f7SAndroid Build Coastguard Worker // The format message is always the first argument.
4748*03ce13f7SAndroid Build Coastguard Worker vals.push_back(Nucleus::createConstantString(str));
4749*03ce13f7SAndroid Build Coastguard Worker
4750*03ce13f7SAndroid Build Coastguard Worker // Add optional file, line and function info if provided.
4751*03ce13f7SAndroid Build Coastguard Worker if(file != nullptr)
4752*03ce13f7SAndroid Build Coastguard Worker {
4753*03ce13f7SAndroid Build Coastguard Worker vals.push_back(Nucleus::createConstantString(file));
4754*03ce13f7SAndroid Build Coastguard Worker if(line > 0)
4755*03ce13f7SAndroid Build Coastguard Worker {
4756*03ce13f7SAndroid Build Coastguard Worker vals.push_back(Nucleus::createConstantInt(line));
4757*03ce13f7SAndroid Build Coastguard Worker }
4758*03ce13f7SAndroid Build Coastguard Worker }
4759*03ce13f7SAndroid Build Coastguard Worker if(function != nullptr)
4760*03ce13f7SAndroid Build Coastguard Worker {
4761*03ce13f7SAndroid Build Coastguard Worker vals.push_back(Nucleus::createConstantString(function));
4762*03ce13f7SAndroid Build Coastguard Worker }
4763*03ce13f7SAndroid Build Coastguard Worker
4764*03ce13f7SAndroid Build Coastguard Worker // Add all format arguments.
4765*03ce13f7SAndroid Build Coastguard Worker for(const PrintValue &arg : args)
4766*03ce13f7SAndroid Build Coastguard Worker {
4767*03ce13f7SAndroid Build Coastguard Worker for(auto val : arg.values)
4768*03ce13f7SAndroid Build Coastguard Worker {
4769*03ce13f7SAndroid Build Coastguard Worker vals.push_back(val);
4770*03ce13f7SAndroid Build Coastguard Worker }
4771*03ce13f7SAndroid Build Coastguard Worker }
4772*03ce13f7SAndroid Build Coastguard Worker
4773*03ce13f7SAndroid Build Coastguard Worker // This call is implemented by each backend
4774*03ce13f7SAndroid Build Coastguard Worker VPrintf(vals);
4775*03ce13f7SAndroid Build Coastguard Worker }
4776*03ce13f7SAndroid Build Coastguard Worker
4777*03ce13f7SAndroid Build Coastguard Worker // This is the function that is called by VPrintf from the backends
DebugPrintf(const char * format,...)4778*03ce13f7SAndroid Build Coastguard Worker int DebugPrintf(const char *format, ...)
4779*03ce13f7SAndroid Build Coastguard Worker {
4780*03ce13f7SAndroid Build Coastguard Worker // Uncomment this to make it so that we do not print, but the call to this function is emitted.
4781*03ce13f7SAndroid Build Coastguard Worker // Useful when debugging emitted code to see the Reactor source location.
4782*03ce13f7SAndroid Build Coastguard Worker // # define RR_PRINT_OUTPUT_TYPE_STUB
4783*03ce13f7SAndroid Build Coastguard Worker
4784*03ce13f7SAndroid Build Coastguard Worker # if defined(RR_PRINT_OUTPUT_TYPE_STUB)
4785*03ce13f7SAndroid Build Coastguard Worker return 0;
4786*03ce13f7SAndroid Build Coastguard Worker # else
4787*03ce13f7SAndroid Build Coastguard Worker
4788*03ce13f7SAndroid Build Coastguard Worker int result;
4789*03ce13f7SAndroid Build Coastguard Worker va_list args;
4790*03ce13f7SAndroid Build Coastguard Worker
4791*03ce13f7SAndroid Build Coastguard Worker va_start(args, format);
4792*03ce13f7SAndroid Build Coastguard Worker char buffer[2048];
4793*03ce13f7SAndroid Build Coastguard Worker result = vsprintf(buffer, format, args);
4794*03ce13f7SAndroid Build Coastguard Worker va_end(args);
4795*03ce13f7SAndroid Build Coastguard Worker
4796*03ce13f7SAndroid Build Coastguard Worker std::fputs(buffer, stdout);
4797*03ce13f7SAndroid Build Coastguard Worker # if defined(_WIN32)
4798*03ce13f7SAndroid Build Coastguard Worker OutputDebugString(buffer);
4799*03ce13f7SAndroid Build Coastguard Worker # endif
4800*03ce13f7SAndroid Build Coastguard Worker
4801*03ce13f7SAndroid Build Coastguard Worker return result;
4802*03ce13f7SAndroid Build Coastguard Worker # endif
4803*03ce13f7SAndroid Build Coastguard Worker }
4804*03ce13f7SAndroid Build Coastguard Worker
4805*03ce13f7SAndroid Build Coastguard Worker #endif // ENABLE_RR_PRINT
4806*03ce13f7SAndroid Build Coastguard Worker
4807*03ce13f7SAndroid Build Coastguard Worker // Functions implemented by backends
4808*03ce13f7SAndroid Build Coastguard Worker bool HasRcpApprox();
4809*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> RcpApprox(RValue<Float4> x, bool exactAtPow2 = false);
4810*03ce13f7SAndroid Build Coastguard Worker RValue<Float> RcpApprox(RValue<Float> x, bool exactAtPow2 = false);
4811*03ce13f7SAndroid Build Coastguard Worker
4812*03ce13f7SAndroid Build Coastguard Worker template<typename T>
DoRcp(RValue<T> x,bool relaxedPrecision,bool exactAtPow2)4813*03ce13f7SAndroid Build Coastguard Worker static RValue<T> DoRcp(RValue<T> x, bool relaxedPrecision, bool exactAtPow2)
4814*03ce13f7SAndroid Build Coastguard Worker {
4815*03ce13f7SAndroid Build Coastguard Worker #if defined(__i386__) || defined(__x86_64__) // On x86, 1/x is fast enough, except for lower precision
4816*03ce13f7SAndroid Build Coastguard Worker bool approx = HasRcpApprox() && relaxedPrecision;
4817*03ce13f7SAndroid Build Coastguard Worker #else
4818*03ce13f7SAndroid Build Coastguard Worker bool approx = HasRcpApprox();
4819*03ce13f7SAndroid Build Coastguard Worker #endif
4820*03ce13f7SAndroid Build Coastguard Worker
4821*03ce13f7SAndroid Build Coastguard Worker T rcp;
4822*03ce13f7SAndroid Build Coastguard Worker
4823*03ce13f7SAndroid Build Coastguard Worker if(approx)
4824*03ce13f7SAndroid Build Coastguard Worker {
4825*03ce13f7SAndroid Build Coastguard Worker rcp = RcpApprox(x, exactAtPow2);
4826*03ce13f7SAndroid Build Coastguard Worker
4827*03ce13f7SAndroid Build Coastguard Worker if(!relaxedPrecision)
4828*03ce13f7SAndroid Build Coastguard Worker {
4829*03ce13f7SAndroid Build Coastguard Worker // Perform one more iteration of Newton-Rhapson division to increase precision
4830*03ce13f7SAndroid Build Coastguard Worker rcp = (rcp + rcp) - (x * rcp * rcp);
4831*03ce13f7SAndroid Build Coastguard Worker }
4832*03ce13f7SAndroid Build Coastguard Worker }
4833*03ce13f7SAndroid Build Coastguard Worker else
4834*03ce13f7SAndroid Build Coastguard Worker {
4835*03ce13f7SAndroid Build Coastguard Worker rcp = T(1.0f) / x;
4836*03ce13f7SAndroid Build Coastguard Worker }
4837*03ce13f7SAndroid Build Coastguard Worker
4838*03ce13f7SAndroid Build Coastguard Worker return rcp;
4839*03ce13f7SAndroid Build Coastguard Worker }
4840*03ce13f7SAndroid Build Coastguard Worker
Rcp(RValue<Float4> x,bool relaxedPrecision,bool exactAtPow2)4841*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> Rcp(RValue<Float4> x, bool relaxedPrecision, bool exactAtPow2)
4842*03ce13f7SAndroid Build Coastguard Worker {
4843*03ce13f7SAndroid Build Coastguard Worker RR_DEBUG_INFO_UPDATE_LOC();
4844*03ce13f7SAndroid Build Coastguard Worker return DoRcp(x, relaxedPrecision, exactAtPow2);
4845*03ce13f7SAndroid Build Coastguard Worker }
4846*03ce13f7SAndroid Build Coastguard Worker
Rcp(RValue<Float> x,bool relaxedPrecision,bool exactAtPow2)4847*03ce13f7SAndroid Build Coastguard Worker RValue<Float> Rcp(RValue<Float> x, bool relaxedPrecision, bool exactAtPow2)
4848*03ce13f7SAndroid Build Coastguard Worker {
4849*03ce13f7SAndroid Build Coastguard Worker RR_DEBUG_INFO_UPDATE_LOC();
4850*03ce13f7SAndroid Build Coastguard Worker return DoRcp(x, relaxedPrecision, exactAtPow2);
4851*03ce13f7SAndroid Build Coastguard Worker }
4852*03ce13f7SAndroid Build Coastguard Worker
4853*03ce13f7SAndroid Build Coastguard Worker // Functions implemented by backends
4854*03ce13f7SAndroid Build Coastguard Worker bool HasRcpSqrtApprox();
4855*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> RcpSqrtApprox(RValue<Float4> x);
4856*03ce13f7SAndroid Build Coastguard Worker RValue<Float> RcpSqrtApprox(RValue<Float> x);
4857*03ce13f7SAndroid Build Coastguard Worker
4858*03ce13f7SAndroid Build Coastguard Worker template<typename T>
4859*03ce13f7SAndroid Build Coastguard Worker struct CastToIntType;
4860*03ce13f7SAndroid Build Coastguard Worker
4861*03ce13f7SAndroid Build Coastguard Worker template<>
4862*03ce13f7SAndroid Build Coastguard Worker struct CastToIntType<Float4>
4863*03ce13f7SAndroid Build Coastguard Worker {
4864*03ce13f7SAndroid Build Coastguard Worker using type = Int4;
4865*03ce13f7SAndroid Build Coastguard Worker };
4866*03ce13f7SAndroid Build Coastguard Worker
4867*03ce13f7SAndroid Build Coastguard Worker template<>
4868*03ce13f7SAndroid Build Coastguard Worker struct CastToIntType<Float>
4869*03ce13f7SAndroid Build Coastguard Worker {
4870*03ce13f7SAndroid Build Coastguard Worker using type = Int;
4871*03ce13f7SAndroid Build Coastguard Worker };
4872*03ce13f7SAndroid Build Coastguard Worker
4873*03ce13f7SAndroid Build Coastguard Worker // TODO: move to Reactor.hpp?
CmpNEQ(RValue<Int> x,RValue<Int> y)4874*03ce13f7SAndroid Build Coastguard Worker RValue<Int> CmpNEQ(RValue<Int> x, RValue<Int> y)
4875*03ce13f7SAndroid Build Coastguard Worker {
4876*03ce13f7SAndroid Build Coastguard Worker return IfThenElse(x != y, Int(~0), Int(0));
4877*03ce13f7SAndroid Build Coastguard Worker }
4878*03ce13f7SAndroid Build Coastguard Worker
4879*03ce13f7SAndroid Build Coastguard Worker template<typename T>
DoRcpSqrt(RValue<T> x,bool relaxedPrecision)4880*03ce13f7SAndroid Build Coastguard Worker static RValue<T> DoRcpSqrt(RValue<T> x, bool relaxedPrecision)
4881*03ce13f7SAndroid Build Coastguard Worker {
4882*03ce13f7SAndroid Build Coastguard Worker #if defined(__i386__) || defined(__x86_64__) // On x86, 1/x is fast enough, except for lower precision
4883*03ce13f7SAndroid Build Coastguard Worker bool approx = HasRcpApprox() && relaxedPrecision;
4884*03ce13f7SAndroid Build Coastguard Worker #else
4885*03ce13f7SAndroid Build Coastguard Worker bool approx = HasRcpApprox();
4886*03ce13f7SAndroid Build Coastguard Worker #endif
4887*03ce13f7SAndroid Build Coastguard Worker
4888*03ce13f7SAndroid Build Coastguard Worker if(approx)
4889*03ce13f7SAndroid Build Coastguard Worker {
4890*03ce13f7SAndroid Build Coastguard Worker using IntType = typename CastToIntType<T>::type;
4891*03ce13f7SAndroid Build Coastguard Worker
4892*03ce13f7SAndroid Build Coastguard Worker T rsq = RcpSqrtApprox(x);
4893*03ce13f7SAndroid Build Coastguard Worker
4894*03ce13f7SAndroid Build Coastguard Worker if(!relaxedPrecision)
4895*03ce13f7SAndroid Build Coastguard Worker {
4896*03ce13f7SAndroid Build Coastguard Worker rsq = rsq * (T(3.0f) - rsq * rsq * x) * T(0.5f);
4897*03ce13f7SAndroid Build Coastguard Worker rsq = As<T>(CmpNEQ(As<IntType>(x), IntType(0x7F800000)) & As<IntType>(rsq));
4898*03ce13f7SAndroid Build Coastguard Worker }
4899*03ce13f7SAndroid Build Coastguard Worker
4900*03ce13f7SAndroid Build Coastguard Worker return rsq;
4901*03ce13f7SAndroid Build Coastguard Worker }
4902*03ce13f7SAndroid Build Coastguard Worker else
4903*03ce13f7SAndroid Build Coastguard Worker {
4904*03ce13f7SAndroid Build Coastguard Worker return T(1.0f) / Sqrt(x);
4905*03ce13f7SAndroid Build Coastguard Worker }
4906*03ce13f7SAndroid Build Coastguard Worker }
4907*03ce13f7SAndroid Build Coastguard Worker
RcpSqrt(RValue<Float4> x,bool relaxedPrecision)4908*03ce13f7SAndroid Build Coastguard Worker RValue<Float4> RcpSqrt(RValue<Float4> x, bool relaxedPrecision)
4909*03ce13f7SAndroid Build Coastguard Worker {
4910*03ce13f7SAndroid Build Coastguard Worker return DoRcpSqrt(x, relaxedPrecision);
4911*03ce13f7SAndroid Build Coastguard Worker }
4912*03ce13f7SAndroid Build Coastguard Worker
RcpSqrt(RValue<Float> x,bool relaxedPrecision)4913*03ce13f7SAndroid Build Coastguard Worker RValue<Float> RcpSqrt(RValue<Float> x, bool relaxedPrecision)
4914*03ce13f7SAndroid Build Coastguard Worker {
4915*03ce13f7SAndroid Build Coastguard Worker return DoRcpSqrt(x, relaxedPrecision);
4916*03ce13f7SAndroid Build Coastguard Worker }
4917*03ce13f7SAndroid Build Coastguard Worker
4918*03ce13f7SAndroid Build Coastguard Worker } // namespace rr
4919