aboutsummaryrefslogtreecommitdiffstats
path: root/libalee/corewords.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libalee/corewords.cpp')
-rw-r--r--libalee/corewords.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/libalee/corewords.cpp b/libalee/corewords.cpp
index b12f53b..9fef7b1 100644
--- a/libalee/corewords.cpp
+++ b/libalee/corewords.cpp
@@ -222,13 +222,18 @@ execute:
find(state, word);
}
break;
- case 34: // um*
+ case 34: // _uma
+ {
+ const auto plus = state.pop();
cell = state.pop();
- dcell = static_cast<DoubleCell>(
- static_cast<Addr>(state.pop()) *
- static_cast<Addr>(cell));
+ dcell = state.pop();
+ dcell <<= sizeof(Cell) * 8;
+ dcell |= static_cast<Addr>(state.pop());
+ dcell *= static_cast<Addr>(cell);
+ dcell += static_cast<Addr>(plus);
state.push(dcell);
state.push(dcell >> (sizeof(Cell) * 8));
+ }
break;
case 35: // u<
cell = state.pop();