mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 14:23:09 +00:00
Sema: implement AVR address spaces
Co-authored-by: Veikka Tuominen <git@vexu.eu>
This commit is contained in:
parent
fd0fb26aba
commit
2b9478ce12
@ -174,6 +174,14 @@ pub const AddressSpace = enum {
|
|||||||
param,
|
param,
|
||||||
shared,
|
shared,
|
||||||
local,
|
local,
|
||||||
|
|
||||||
|
// AVR address spaces.
|
||||||
|
flash,
|
||||||
|
flash1,
|
||||||
|
flash2,
|
||||||
|
flash3,
|
||||||
|
flash4,
|
||||||
|
flash5,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// This data structure is used by the Zig language code generation and
|
/// This data structure is used by the Zig language code generation and
|
||||||
|
|||||||
@ -1186,6 +1186,8 @@ pub const Target = struct {
|
|||||||
.fs, .gs, .ss => arch == .x86_64 or arch == .x86,
|
.fs, .gs, .ss => arch == .x86_64 or arch == .x86,
|
||||||
.global, .constant, .local, .shared => is_gpu,
|
.global, .constant, .local, .shared => is_gpu,
|
||||||
.param => is_nvptx,
|
.param => is_nvptx,
|
||||||
|
// TODO this should also check how many flash banks the cpu has
|
||||||
|
.flash, .flash1, .flash2, .flash3, .flash4, .flash5 => arch == .avr,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -31938,6 +31938,8 @@ pub fn analyzeAddressSpace(
|
|||||||
.param => is_nv,
|
.param => is_nv,
|
||||||
.global, .shared, .local => is_gpu,
|
.global, .shared, .local => is_gpu,
|
||||||
.constant => is_gpu and (ctx == .constant),
|
.constant => is_gpu and (ctx == .constant),
|
||||||
|
// TODO this should also check how many flash banks the cpu has
|
||||||
|
.flash, .flash1, .flash2, .flash3, .flash4, .flash5 => arch == .avr,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!supported) {
|
if (!supported) {
|
||||||
|
|||||||
@ -10241,6 +10241,16 @@ fn toLlvmAddressSpace(address_space: std.builtin.AddressSpace, target: std.Targe
|
|||||||
.local => llvm.address_space.amdgpu.private,
|
.local => llvm.address_space.amdgpu.private,
|
||||||
else => unreachable,
|
else => unreachable,
|
||||||
},
|
},
|
||||||
|
.avr => switch (address_space) {
|
||||||
|
.generic => llvm.address_space.default,
|
||||||
|
.flash => llvm.address_space.avr.flash,
|
||||||
|
.flash1 => llvm.address_space.avr.flash1,
|
||||||
|
.flash2 => llvm.address_space.avr.flash2,
|
||||||
|
.flash3 => llvm.address_space.avr.flash3,
|
||||||
|
.flash4 => llvm.address_space.avr.flash4,
|
||||||
|
.flash5 => llvm.address_space.avr.flash5,
|
||||||
|
else => unreachable,
|
||||||
|
},
|
||||||
else => switch (address_space) {
|
else => switch (address_space) {
|
||||||
.generic => llvm.address_space.default,
|
.generic => llvm.address_space.default,
|
||||||
else => unreachable,
|
else => unreachable,
|
||||||
|
|||||||
@ -1530,8 +1530,12 @@ pub const address_space = struct {
|
|||||||
|
|
||||||
// See llvm/lib/Target/AVR/AVR.h
|
// See llvm/lib/Target/AVR/AVR.h
|
||||||
pub const avr = struct {
|
pub const avr = struct {
|
||||||
pub const data_memory: c_uint = 0;
|
pub const flash: c_uint = 1;
|
||||||
pub const program_memory: c_uint = 1;
|
pub const flash1: c_uint = 2;
|
||||||
|
pub const flash2: c_uint = 3;
|
||||||
|
pub const flash3: c_uint = 4;
|
||||||
|
pub const flash4: c_uint = 5;
|
||||||
|
pub const flash5: c_uint = 6;
|
||||||
};
|
};
|
||||||
|
|
||||||
// See llvm/lib/Target/NVPTX/NVPTX.h
|
// See llvm/lib/Target/NVPTX/NVPTX.h
|
||||||
|
|||||||
@ -548,7 +548,7 @@ pub const DeclGen = struct {
|
|||||||
.gs, .fs, .ss => unreachable,
|
.gs, .fs, .ss => unreachable,
|
||||||
.shared => .Workgroup,
|
.shared => .Workgroup,
|
||||||
.local => .Private,
|
.local => .Private,
|
||||||
.global, .param, .constant => unreachable,
|
.global, .param, .constant, .flash, .flash1, .flash2, .flash3, .flash4, .flash5 => unreachable,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user