aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-12-13 14:11:22 -0500
committerGitHub <noreply@github.com>2022-12-13 14:11:22 -0500
commit2e66b3be6ea6a5be758f8bc855807b4af1020ec8 (patch)
tree01b67ba0e122b53cfbb66d864355303b3722fe31 /src/codegen.zig
parent3318611618665e6d09ddad866efdabf54eb498ce (diff)
parent37561a920b6dad1231f0b9e5a69eb0978af6f5d0 (diff)
downloadzig-2e66b3be6ea6a5be758f8bc855807b4af1020ec8.tar.gz
zig-2e66b3be6ea6a5be758f8bc855807b4af1020ec8.zip
Merge pull request #13910 from Luukdegram/wasm-simd
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index 985fa8d6c5..bc50f36041 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -808,6 +808,54 @@ pub fn generateSymbol(
}
return Result{ .appended = {} };
},
+ .Vector => switch (typed_value.val.tag()) {
+ .bytes => {
+ const bytes = typed_value.val.castTag(.bytes).?.data;
+ const len = @intCast(usize, typed_value.ty.arrayLen());
+ try code.ensureUnusedCapacity(len);
+ code.appendSliceAssumeCapacity(bytes[0..len]);
+ return Result{ .appended = {} };
+ },
+ .aggregate => {
+ const elem_vals = typed_value.val.castTag(.aggregate).?.data;
+ const elem_ty = typed_value.ty.elemType();
+ const len = @intCast(usize, typed_value.ty.arrayLen());
+ for (elem_vals[0..len]) |elem_val| {
+ switch (try generateSymbol(bin_file, src_loc, .{
+ .ty = elem_ty,
+ .val = elem_val,
+ }, code, debug_output, reloc_info)) {
+ .appended => {},
+ .externally_managed => |slice| {
+ code.appendSliceAssumeCapacity(slice);
+ },
+ .fail => |em| return Result{ .fail = em },
+ }
+ }
+ return Result{ .appended = {} };
+ },
+ .repeated => {
+ const array = typed_value.val.castTag(.repeated).?.data;
+ const elem_ty = typed_value.ty.childType();
+ const len = typed_value.ty.arrayLen();
+
+ var index: u64 = 0;
+ while (index < len) : (index += 1) {
+ switch (try generateSymbol(bin_file, src_loc, .{
+ .ty = elem_ty,
+ .val = array,
+ }, code, debug_output, reloc_info)) {
+ .appended => {},
+ .externally_managed => |slice| {
+ code.appendSliceAssumeCapacity(slice);
+ },
+ .fail => |em| return Result{ .fail = em },
+ }
+ }
+ return Result{ .appended = {} };
+ },
+ else => unreachable,
+ },
else => |t| {
return Result{
.fail = try ErrorMsg.create(