+
+std::vector<llvm::Value*> StorageSoa::argument(Argument type, int idx, int swizzle,
+ llvm::Value *indIdx )
+{
+ std::vector<llvm::Value*> val(4);
+ switch(type) {
+ case Input:
+ val = inputElement(idx, indIdx);
+ break;
+ case Output:
+ val = outputElement(idx, indIdx);
+ break;
+ case Temp:
+ val = tempElement(idx, indIdx);
+ break;
+ case Const:
+ val = constElement(idx, indIdx);
+ break;
+ case Immediate:
+ val = immediateElement(idx);
+ break;
+ }
+ if (!gallivm_is_swizzle(swizzle))
+ return val;
+
+ std::vector<llvm::Value*> res(4);
+
+ res[0] = val[gallivm_x_swizzle(swizzle)];
+ res[1] = val[gallivm_y_swizzle(swizzle)];
+ res[2] = val[gallivm_z_swizzle(swizzle)];
+ res[3] = val[gallivm_w_swizzle(swizzle)];
+ return res;
+}