mirror of
https://github.com/nineties/planckforth
synced 2025-01-14 08:01:27 +01:00
replace / and mod of C and python implementation
This commit is contained in:
parent
66857c28c6
commit
ffac921280
2 changed files with 13 additions and 3 deletions
|
@ -144,6 +144,13 @@ defcode("x", exec) { (*(ip = (cfa) pop()))(); }
|
||||||
defcode("f", find_) { push((cell) find(pop())); next(); }
|
defcode("f", find_) { push((cell) find(pop())); next(); }
|
||||||
defcode("v", argv_) { push((cell) saved_argv); push(saved_argc); next(); }
|
defcode("v", argv_) { push((cell) saved_argv); push(saved_argc); next(); }
|
||||||
defcode("V", impl) { push((cell) IMPLEMENTATION); next(); }
|
defcode("V", impl) { push((cell) IMPLEMENTATION); next(); }
|
||||||
|
defcode("/", divmod) {
|
||||||
|
intptr_t b = pop();
|
||||||
|
intptr_t a = pop();
|
||||||
|
push(a%b);
|
||||||
|
push(a/b);
|
||||||
|
next();
|
||||||
|
}
|
||||||
#define defbinary(name, label, op, ty) \
|
#define defbinary(name, label, op, ty) \
|
||||||
defcode(name, label) { \
|
defcode(name, label) { \
|
||||||
ty b = (ty) pop(); \
|
ty b = (ty) pop(); \
|
||||||
|
@ -153,8 +160,6 @@ defcode(name, label) { \
|
||||||
defbinary("+", add, +, intptr_t)
|
defbinary("+", add, +, intptr_t)
|
||||||
defbinary("-", sub, -, intptr_t)
|
defbinary("-", sub, -, intptr_t)
|
||||||
defbinary("*", mul, *, intptr_t)
|
defbinary("*", mul, *, intptr_t)
|
||||||
defbinary("/", div_, /, uintptr_t)
|
|
||||||
defbinary("%", mod, %, uintptr_t)
|
|
||||||
defbinary("&", and, &, uintptr_t)
|
defbinary("&", and, &, uintptr_t)
|
||||||
defbinary("|", or, |, uintptr_t)
|
defbinary("|", or, |, uintptr_t)
|
||||||
defbinary("^", xor, ^, uintptr_t)
|
defbinary("^", xor, ^, uintptr_t)
|
||||||
|
|
|
@ -209,10 +209,15 @@ def litstring(ip, np):
|
||||||
push(np + 4)
|
push(np + 4)
|
||||||
return next(np + 4 + read(np))
|
return next(np + 4 + read(np))
|
||||||
add_operator('S', litstring)
|
add_operator('S', litstring)
|
||||||
|
def divmod():
|
||||||
|
b = pop()
|
||||||
|
a = pop()
|
||||||
|
push(a%b)
|
||||||
|
push(a//b)
|
||||||
|
add_simple_operator('/', divmod)
|
||||||
add_binary_operator('+', operator.add)
|
add_binary_operator('+', operator.add)
|
||||||
add_binary_operator('-', operator.sub)
|
add_binary_operator('-', operator.sub)
|
||||||
add_binary_operator('*', operator.mul)
|
add_binary_operator('*', operator.mul)
|
||||||
add_binary_operator('/', operator.floordiv)
|
|
||||||
add_binary_operator('%', operator.mod)
|
add_binary_operator('%', operator.mod)
|
||||||
add_binary_operator('&', operator.and_)
|
add_binary_operator('&', operator.and_)
|
||||||
add_binary_operator('|', operator.or_)
|
add_binary_operator('|', operator.or_)
|
||||||
|
|
Loading…
Reference in a new issue