aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClyne Sullivan <clyne@bitgloo.com>2023-12-31 14:50:46 -0500
committerClyne Sullivan <clyne@bitgloo.com>2023-12-31 14:50:46 -0500
commit2261914a6b291bf4073cddf30a862df3c3a341e9 (patch)
tree3b03cec84c391039b60ec83df037fcf3057ce260
parent22a89e994939824015a2ee23ac8a4d544a0882b6 (diff)
distancepos constant
-rw-r--r--libalee/corewords.cpp2
-rw-r--r--libalee/dictionary.cpp6
-rw-r--r--libalee/dictionary.hpp4
3 files changed, 7 insertions, 5 deletions
diff --git a/libalee/corewords.cpp b/libalee/corewords.cpp
index d47e092..8ff7ac6 100644
--- a/libalee/corewords.cpp
+++ b/libalee/corewords.cpp
@@ -241,7 +241,7 @@ void CoreWords::word_semic(State& state) { // Concludes word definition.
dcell = Dictionary::MaxDistance;
}
state.dict.write(cell,
- (state.dict.read(cell) & 0x1F) | static_cast<Cell>(dcell << 6));
+ (state.dict.read(cell) & 0x1F) | static_cast<Cell>(dcell << Dictionary::DistancePos));
state.dict.latest(cell);
}
void CoreWords::word_jmp0(State& state) { // Jump if popped value equals zero.
diff --git a/libalee/dictionary.cpp b/libalee/dictionary.cpp
index b1cbc5f..0abc038 100644
--- a/libalee/dictionary.cpp
+++ b/libalee/dictionary.cpp
@@ -91,14 +91,14 @@ Addr Dictionary::find(Word word) noexcept
const Addr len = l & 0x1F;
Word lw;
- if ((l >> 6) < MaxDistance) {
+ if ((l >> Dictionary::DistancePos) < MaxDistance) {
lw = Word::fromLength(lt + sizeof(Cell), len);
if (equal(word, lw))
return lt;
else if (lt == Begin)
break;
else
- lt -= l >> 6;
+ lt -= l >> Dictionary::DistancePos;
} else {
lw = Word::fromLength(lt + 2 * sizeof(Cell), len);
if (equal(word, lw))
@@ -120,7 +120,7 @@ Addr Dictionary::getexec(Addr addr) noexcept
const Addr len = l & 0x1Fu;
addr += sizeof(Cell);
- if ((l >> 6) == MaxDistance)
+ if ((l >> Dictionary::DistancePos) == MaxDistance)
addr += sizeof(Cell);
addr += len;
diff --git a/libalee/dictionary.hpp b/libalee/dictionary.hpp
index ad1ee02..78bc19d 100644
--- a/libalee/dictionary.hpp
+++ b/libalee/dictionary.hpp
@@ -73,8 +73,10 @@ public:
/** "Immediate" marker bit for a word's definition. */
constexpr static Cell Immediate = (1 << 5);
+
+ constexpr static Cell DistancePos = 6;
/** Maximum "short" distance between two definitions. */
- constexpr static Cell MaxDistance = (1 << (sizeof(Cell) * 8 - 6)) - 1;
+ constexpr static Cell MaxDistance = (1 << (sizeof(Cell) * 8 - DistancePos)) - 1;
/** Returns the value of the cell at the given address. */
virtual Cell read(Addr) const noexcept = 0;