| ... | ... | @@ -4398,88 +4398,44 @@ pub fn toLlvmCallConvTag(cc_tag: std.lang.CallingConvention.Tag, target: *const |
| 4398 | 4398 | |
| 4399 | 4399 | /// Convert a zig-address space to an llvm address space. |
| 4400 | 4400 | pub fn toLlvmAddressSpace(address_space: std.lang.AddressSpace, target: *const std.Target) Builder.AddrSpace { |
| 4401 | | for (llvmAddrSpaceInfo(target)) |info| if (info.zig == address_space) return info.llvm; |
| 4402 | | unreachable; |
| 4403 | | } |
| 4404 | | |
| 4405 | | const AddrSpaceInfo = struct { |
| 4406 | | zig: ?std.lang.AddressSpace, |
| 4407 | | llvm: Builder.AddrSpace, |
| 4408 | | non_integral: bool = false, |
| 4409 | | size: ?u16 = null, |
| 4410 | | abi: ?u16 = null, |
| 4411 | | pref: ?u16 = null, |
| 4412 | | idx: ?u16 = null, |
| 4413 | | force_in_data_layout: bool = false, |
| 4414 | | }; |
| 4415 | | fn llvmAddrSpaceInfo(target: *const std.Target) []const AddrSpaceInfo { |
| 4416 | 4401 | return switch (target.cpu.arch) { |
| 4417 | | .x86, .x86_64 => &.{ |
| 4418 | | .{ .zig = .generic, .llvm = .default }, |
| 4419 | | .{ .zig = .gs, .llvm = Builder.AddrSpace.x86.gs }, |
| 4420 | | .{ .zig = .fs, .llvm = Builder.AddrSpace.x86.fs }, |
| 4421 | | .{ .zig = .ss, .llvm = Builder.AddrSpace.x86.ss }, |
| 4422 | | .{ .zig = null, .llvm = Builder.AddrSpace.x86.ptr32_sptr, .size = 32, .abi = 32, .force_in_data_layout = true }, |
| 4423 | | .{ .zig = null, .llvm = Builder.AddrSpace.x86.ptr32_uptr, .size = 32, .abi = 32, .force_in_data_layout = true }, |
| 4424 | | .{ .zig = null, .llvm = Builder.AddrSpace.x86.ptr64, .size = 64, .abi = 64, .force_in_data_layout = true }, |
| 4425 | | }, |
| 4426 | | .nvptx, .nvptx64 => &.{ |
| 4427 | | .{ .zig = .generic, .llvm = Builder.AddrSpace.nvptx.generic }, |
| 4428 | | .{ .zig = .global, .llvm = Builder.AddrSpace.nvptx.global }, |
| 4429 | | .{ .zig = .constant, .llvm = Builder.AddrSpace.nvptx.constant }, |
| 4430 | | .{ .zig = .param, .llvm = Builder.AddrSpace.nvptx.param }, |
| 4431 | | .{ .zig = .shared, .llvm = Builder.AddrSpace.nvptx.shared }, |
| 4432 | | .{ .zig = .local, .llvm = Builder.AddrSpace.nvptx.local }, |
| 4433 | | }, |
| 4434 | | .amdgcn => &.{ |
| 4435 | | .{ .zig = .generic, .llvm = Builder.AddrSpace.amdgpu.flat, .force_in_data_layout = true }, |
| 4436 | | .{ .zig = .global, .llvm = Builder.AddrSpace.amdgpu.global, .force_in_data_layout = true }, |
| 4437 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.region, .size = 32, .abi = 32 }, |
| 4438 | | .{ .zig = .shared, .llvm = Builder.AddrSpace.amdgpu.local, .size = 32, .abi = 32 }, |
| 4439 | | .{ .zig = .constant, .llvm = Builder.AddrSpace.amdgpu.constant, .force_in_data_layout = true }, |
| 4440 | | .{ .zig = .local, .llvm = Builder.AddrSpace.amdgpu.private, .size = 32, .abi = 32 }, |
| 4441 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_32bit, .size = 32, .abi = 32 }, |
| 4442 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.buffer_fat_pointer, .non_integral = true, .size = 160, .abi = 256, .idx = 32 }, |
| 4443 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.buffer_resource, .non_integral = true, .size = 128, .abi = 128 }, |
| 4444 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.buffer_strided_pointer, .non_integral = true, .size = 192, .abi = 256, .idx = 32 }, |
| 4445 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_0 }, |
| 4446 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_1 }, |
| 4447 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_2 }, |
| 4448 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_3 }, |
| 4449 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_4 }, |
| 4450 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_5 }, |
| 4451 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_6 }, |
| 4452 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_7 }, |
| 4453 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_8 }, |
| 4454 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_9 }, |
| 4455 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_10 }, |
| 4456 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_11 }, |
| 4457 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_12 }, |
| 4458 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_13 }, |
| 4459 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_14 }, |
| 4460 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_15 }, |
| 4461 | | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.streamout_register }, |
| 4402 | .amdgcn => switch (address_space) { |
| 4403 | .generic => Builder.AddrSpace.amdgpu.flat, |
| 4404 | .global => Builder.AddrSpace.amdgpu.global, |
| 4405 | .shared => Builder.AddrSpace.amdgpu.local, |
| 4406 | .constant => Builder.AddrSpace.amdgpu.constant, |
| 4407 | .local => Builder.AddrSpace.amdgpu.private, |
| 4408 | else => unreachable, |
| 4462 | 4409 | }, |
| 4463 | | .avr => &.{ |
| 4464 | | .{ .zig = .generic, .llvm = Builder.AddrSpace.avr.data, .abi = 8 }, |
| 4465 | | .{ .zig = .flash, .llvm = Builder.AddrSpace.avr.program, .abi = 8 }, |
| 4466 | | .{ .zig = .flash1, .llvm = Builder.AddrSpace.avr.program1, .abi = 8 }, |
| 4467 | | .{ .zig = .flash2, .llvm = Builder.AddrSpace.avr.program2, .abi = 8 }, |
| 4468 | | .{ .zig = .flash3, .llvm = Builder.AddrSpace.avr.program3, .abi = 8 }, |
| 4469 | | .{ .zig = .flash4, .llvm = Builder.AddrSpace.avr.program4, .abi = 8 }, |
| 4470 | | .{ .zig = .flash5, .llvm = Builder.AddrSpace.avr.program5, .abi = 8 }, |
| 4410 | .avr => switch (address_space) { |
| 4411 | .generic => Builder.AddrSpace.avr.data, |
| 4412 | .flash => Builder.AddrSpace.avr.program, |
| 4413 | .flash1 => Builder.AddrSpace.avr.program1, |
| 4414 | .flash2 => Builder.AddrSpace.avr.program2, |
| 4415 | .flash3 => Builder.AddrSpace.avr.program3, |
| 4416 | .flash4 => Builder.AddrSpace.avr.program4, |
| 4417 | .flash5 => Builder.AddrSpace.avr.program5, |
| 4418 | else => unreachable, |
| 4471 | 4419 | }, |
| 4472 | | .wasm32, .wasm64 => &.{ |
| 4473 | | .{ .zig = .generic, .llvm = Builder.AddrSpace.wasm.default, .force_in_data_layout = true }, |
| 4474 | | .{ .zig = null, .llvm = Builder.AddrSpace.wasm.variable, .non_integral = true }, |
| 4475 | | .{ .zig = .externref, .llvm = Builder.AddrSpace.wasm.externref, .non_integral = true, .size = 8, .abi = 8 }, |
| 4476 | | .{ .zig = .funcref, .llvm = Builder.AddrSpace.wasm.funcref, .non_integral = true, .size = 8, .abi = 8 }, |
| 4420 | .nvptx, .nvptx64 => switch (address_space) { |
| 4421 | .generic => Builder.AddrSpace.nvptx.generic, |
| 4422 | .global => Builder.AddrSpace.nvptx.global, |
| 4423 | .constant => Builder.AddrSpace.nvptx.constant, |
| 4424 | .param => Builder.AddrSpace.nvptx.entry_param, |
| 4425 | .shared => Builder.AddrSpace.nvptx.shared, |
| 4426 | .local => Builder.AddrSpace.nvptx.local, |
| 4427 | else => unreachable, |
| 4477 | 4428 | }, |
| 4478 | | .m68k => &.{ |
| 4479 | | .{ .zig = .generic, .llvm = .default, .abi = 16, .pref = 32 }, |
| 4429 | .x86, .x86_64 => switch (address_space) { |
| 4430 | .generic => .default, |
| 4431 | .gs => Builder.AddrSpace.x86.gs, |
| 4432 | .fs => Builder.AddrSpace.x86.fs, |
| 4433 | .ss => Builder.AddrSpace.x86.ss, |
| 4434 | else => unreachable, |
| 4480 | 4435 | }, |
| 4481 | | else => &.{ |
| 4482 | | .{ .zig = .generic, .llvm = .default }, |
| 4436 | else => switch (address_space) { |
| 4437 | .generic => .default, |
| 4438 | else => unreachable, |
| 4483 | 4439 | }, |
| 4484 | 4440 | }; |
| 4485 | 4441 | } |