diff --git a/libalee/corewords.cpp b/libalee/corewords.cpp index 6900b45..8f903e1 100644 --- a/libalee/corewords.cpp +++ b/libalee/corewords.cpp @@ -178,14 +178,14 @@ execute: state.compiling(false); cell = state.pop(); - dcell = (cell - state.dict.latest()) << 6; - if (dcell > (((1 << (sizeof(Cell) * 8 - 6)) - 1) << 6)) { + dcell = cell - state.dict.latest(); + if (dcell > (1 << (sizeof(Cell) * 8 - 6)) - 1) { state.dict.write(cell, (state.dict.read(cell) & 0x1F) | static_cast(((1 << (sizeof(Cell) * 8 - 6)) - 1) << 6)); - state.dict.write(static_cast(cell) + sizeof(Cell), static_cast(dcell >> 6)); + state.dict.write(static_cast(cell) + sizeof(Cell), static_cast(dcell)); } else { state.dict.write(cell, - (state.dict.read(cell) & 0x1F) | static_cast(dcell)); + (state.dict.read(cell) & 0x1F) | static_cast(dcell << 6)); } state.dict.latest(cell); break;