aboutsummaryrefslogtreecommitdiffstats
path: root/ice40/chip.h
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2018-06-16 19:25:37 +0200
committerClifford Wolf <clifford@clifford.at>2018-06-16 19:25:37 +0200
commit69e5bc5030f43d24683c677d93b8fc1e27b48972 (patch)
tree7972a603886abbdbe5b86c408c29180fb947ddc4 /ice40/chip.h
parentee06db3293738e308cb21ac10cae6265e9de4998 (diff)
downloadnextpnr-69e5bc5030f43d24683c677d93b8fc1e27b48972.tar.gz
nextpnr-69e5bc5030f43d24683c677d93b8fc1e27b48972.tar.bz2
nextpnr-69e5bc5030f43d24683c677d93b8fc1e27b48972.zip
Progress with chipdb refactoring
Signed-off-by: Clifford Wolf <clifford@clifford.at>
Diffstat (limited to 'ice40/chip.h')
-rw-r--r--ice40/chip.h26
1 files changed, 15 insertions, 11 deletions
diff --git a/ice40/chip.h b/ice40/chip.h
index fc8b4419..f57f9983 100644
--- a/ice40/chip.h
+++ b/ice40/chip.h
@@ -76,19 +76,23 @@ template <typename T>
struct RelPtr {
int offset;
- // RelPtr(T *ptr) : offset(reinterpret_cast<const char*>(ptr) -
- // reinterpret_cast<const char*>(this)) {}
+ // RelPtr(const T *ptr) : offset(reinterpret_cast<const char*>(ptr) -
+ // reinterpret_cast<const char*>(this)) {}
- T&operator*() {
- return *reinterpret_cast<T*>(reinterpret_cast<char*>(this) + offset);
+ const T&operator[](size_t index) const {
+ return reinterpret_cast<const T*>(reinterpret_cast<const char*>(this) + offset)[index];
}
- T*operator->() {
- return reinterpret_cast<T*>(reinterpret_cast<char*>(this) + offset);
+ const T&operator*() const {
+ return *reinterpret_cast<const T*>(reinterpret_cast<const char*>(this) + offset);
}
- T*ptr() {
- return reinterpret_cast<T*>(reinterpret_cast<char*>(this) + offset);
+ const T*operator->() const {
+ return reinterpret_cast<const T*>(reinterpret_cast<const char*>(this) + offset);
+ }
+
+ const T*ptr() const {
+ return reinterpret_cast<const T*>(reinterpret_cast<const char*>(this) + offset);
}
};
@@ -165,9 +169,9 @@ struct ConfigBitPOD
struct ConfigEntryPOD
{
- const char *name;
- int num_bits;
- ConfigBitPOD *bits;
+ RelPtr<char> name;
+ int32_t num_bits;
+ RelPtr<ConfigBitPOD> bits;
} __attribute__((packed));
struct TileInfoPOD