| ... | ... | @@ -4434,88 +4434,44 @@ pub fn toLlvmCallConvTag(cc_tag: std.lang.CallingConvention.Tag, target: *const |
| 4434 | 4434 | |
| 4435 | 4435 | /// Convert a zig-address space to an llvm address space. |
| 4436 | 4436 | pub fn toLlvmAddressSpace(address_space: std.lang.AddressSpace, target: *const std.Target) Builder.AddrSpace { |
| 4437 | | for (llvmAddrSpaceInfo(target)) |info| if (info.zig == address_space) return info.llvm; |
| 4438 | | unreachable; |
| 4439 | | } |
| 4440 | | |
| 4441 | | const AddrSpaceInfo = struct { |
| 4442 | | zig: ?std.lang.AddressSpace, |
| 4443 | | llvm: Builder.AddrSpace, |
| 4444 | | non_integral: bool = false, |
| 4445 | | size: ?u16 = null, |
| 4446 | | abi: ?u16 = null, |
| 4447 | | pref: ?u16 = null, |
| 4448 | | idx: ?u16 = null, |
| 4449 | | force_in_data_layout: bool = false, |
| 4450 | | }; |
| 4451 | | fn llvmAddrSpaceInfo(target: *const std.Target) []const AddrSpaceInfo { |
| 4452 | 4437 | return switch (target.cpu.arch) { |
| 4453 | | .x86, .x86_64 => &.{ |
| 4454 | | .{ .zig = .generic, .llvm = .default }, |
| 4455 | | .{ .zig = .gs, .llvm = Builder.AddrSpace.x86.gs }, |
| 4456 | | .{ .zig = .fs, .llvm = Builder.AddrSpace.x86.fs }, |
| 4457 | | .{ .zig = .ss, .llvm = Builder.AddrSpace.x86.ss }, |
| 4458 | | .{ .zig = null, .llvm = Builder.AddrSpace.x86.ptr32_sptr, .size = 32, .abi = 32, .force_in_data_layout = true }, |
| 4459 | | .{ .zig = null, .llvm = Builder.AddrSpace.x86.ptr32_uptr, .size = 32, .abi = 32, .force_in_data_layout = true }, |
| 4460 | | .{ .zig = null, .llvm = Builder.AddrSpace.x86.ptr64, .size = 64, .abi = 64, .force_in_data_layout = true }, |
| 4461 | | }, |
| 4462 | | .nvptx, .nvptx64 => &.{ |
| 4463 | | .{ .zig = .generic, .llvm = Builder.AddrSpace.nvptx.generic }, |
| 4464 | | .{ .zig = .global, .llvm = Builder.AddrSpace.nvptx.global }, |
| 4465 | | .{ .zig = .constant, .llvm = Builder.AddrSpace.nvptx.constant }, |
| 4466 | | .{ .zig = .param, .llvm = Builder.AddrSpace.nvptx.param }, |
| 4467 | | .{ .zig = .shared, .llvm = Builder.AddrSpace.nvptx.shared }, |
| 4468 | | .{ .zig = .local, .llvm = Builder.AddrSpace.nvptx.local }, |
| 4469 | | }, |
| 4470 | | .amdgcn => &.{ |
| 4471 | | .{ .zig = .generic, .llvm = Builder.AddrSpace.amdgpu.flat, .force_in_data_layout = true }, |
| 4472 | | .{ .zig = .global, .llvm = Builder.AddrSpace.amdgpu.global, .force_in_data_layout = true }, |
| 4473 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.region, .size = 32, .abi = 32 }, |
| 4474 | | .{ .zig = .shared, .llvm = Builder.AddrSpace.amdgpu.local, .size = 32, .abi = 32 }, |
| 4475 | | .{ .zig = .constant, .llvm = Builder.AddrSpace.amdgpu.constant, .force_in_data_layout = true }, |
| 4476 | | .{ .zig = .local, .llvm = Builder.AddrSpace.amdgpu.private, .size = 32, .abi = 32 }, |
| 4477 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_32bit, .size = 32, .abi = 32 }, |
| 4478 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.buffer_fat_pointer, .non_integral = true, .size = 160, .abi = 256, .idx = 32 }, |
| 4479 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.buffer_resource, .non_integral = true, .size = 128, .abi = 128 }, |
| 4480 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.buffer_strided_pointer, .non_integral = true, .size = 192, .abi = 256, .idx = 32 }, |
| 4481 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_0 }, |
| 4482 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_1 }, |
| 4483 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_2 }, |
| 4484 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_3 }, |
| 4485 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_4 }, |
| 4486 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_5 }, |
| 4487 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_6 }, |
| 4488 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_7 }, |
| 4489 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_8 }, |
| 4490 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_9 }, |
| 4491 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_10 }, |
| 4492 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_11 }, |
| 4493 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_12 }, |
| 4494 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_13 }, |
| 4495 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_14 }, |
| 4496 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_15 }, |
| 4497 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.streamout_register }, |
| 4438 | .amdgcn => switch (address_space) { |
| 4439 | .generic => Builder.AddrSpace.amdgpu.flat, |
| 4440 | .global => Builder.AddrSpace.amdgpu.global, |
| 4441 | .shared => Builder.AddrSpace.amdgpu.local, |
| 4442 | .constant => Builder.AddrSpace.amdgpu.constant, |
| 4443 | .local => Builder.AddrSpace.amdgpu.private, |
| 4444 | else => unreachable, |
| 4498 | 4445 | }, |
| 4499 | | .avr => &.{ |
| 4500 | | .{ .zig = .generic, .llvm = Builder.AddrSpace.avr.data, .abi = 8 }, |
| 4501 | | .{ .zig = .flash, .llvm = Builder.AddrSpace.avr.program, .abi = 8 }, |
| 4502 | | .{ .zig = .flash1, .llvm = Builder.AddrSpace.avr.program1, .abi = 8 }, |
| 4503 | | .{ .zig = .flash2, .llvm = Builder.AddrSpace.avr.program2, .abi = 8 }, |
| 4504 | | .{ .zig = .flash3, .llvm = Builder.AddrSpace.avr.program3, .abi = 8 }, |
| 4505 | | .{ .zig = .flash4, .llvm = Builder.AddrSpace.avr.program4, .abi = 8 }, |
| 4506 | | .{ .zig = .flash5, .llvm = Builder.AddrSpace.avr.program5, .abi = 8 }, |
| 4446 | .avr => switch (address_space) { |
| 4447 | .generic => Builder.AddrSpace.avr.data, |
| 4448 | .flash => Builder.AddrSpace.avr.program, |
| 4449 | .flash1 => Builder.AddrSpace.avr.program1, |
| 4450 | .flash2 => Builder.AddrSpace.avr.program2, |
| 4451 | .flash3 => Builder.AddrSpace.avr.program3, |
| 4452 | .flash4 => Builder.AddrSpace.avr.program4, |
| 4453 | .flash5 => Builder.AddrSpace.avr.program5, |
| 4454 | else => unreachable, |
| 4507 | 4455 | }, |
| 4508 | | .wasm32, .wasm64 => &.{ |
| 4509 | | .{ .zig = .generic, .llvm = Builder.AddrSpace.wasm.default, .force_in_data_layout = true }, |
| 4510 | | .{ .zig = null, .llvm = Builder.AddrSpace.wasm.variable, .non_integral = true }, |
| 4511 | | .{ .zig = .externref, .llvm = Builder.AddrSpace.wasm.externref, .non_integral = true, .size = 8, .abi = 8 }, |
| 4512 | | .{ .zig = .funcref, .llvm = Builder.AddrSpace.wasm.funcref, .non_integral = true, .size = 8, .abi = 8 }, |
| 4456 | .nvptx, .nvptx64 => switch (address_space) { |
| 4457 | .generic => Builder.AddrSpace.nvptx.generic, |
| 4458 | .global => Builder.AddrSpace.nvptx.global, |
| 4459 | .constant => Builder.AddrSpace.nvptx.constant, |
| 4460 | .param => Builder.AddrSpace.nvptx.entry_param, |
| 4461 | .shared => Builder.AddrSpace.nvptx.shared, |
| 4462 | .local => Builder.AddrSpace.nvptx.local, |
| 4463 | else => unreachable, |
| 4513 | 4464 | }, |
| 4514 | | .m68k => &.{ |
| 4515 | | .{ .zig = .generic, .llvm = .default, .abi = 16, .pref = 32 }, |
| 4465 | .x86, .x86_64 => switch (address_space) { |
| 4466 | .generic => .default, |
| 4467 | .gs => Builder.AddrSpace.x86.gs, |
| 4468 | .fs => Builder.AddrSpace.x86.fs, |
| 4469 | .ss => Builder.AddrSpace.x86.ss, |
| 4470 | else => unreachable, |
| 4516 | 4471 | }, |
| 4517 | | else => &.{ |
| 4518 | | .{ .zig = .generic, .llvm = .default }, |
| 4472 | else => switch (address_space) { |
| 4473 | .generic => .default, |
| 4474 | else => unreachable, |
| 4519 | 4475 | }, |
| 4520 | 4476 | }; |
| 4521 | 4477 | } |