Refactored all OP_ functions to vm/CATEGORY/ and renamed the files.
This commit is contained in:
parent
108be8c41e
commit
50a91d0b6f
67 changed files with 91 additions and 92 deletions
18
src/vm/math/pow.c
Normal file
18
src/vm/math/pow.c
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
case OP_POW: {
|
||||
Value b = pop_value(vm);
|
||||
Value a = pop_value(vm);
|
||||
if (a.type != VAL_INT || b.type != VAL_INT) { fprintf(stderr, "POW expects ints\n"); exit(1); }
|
||||
int64_t base = a.i;
|
||||
int64_t exp = b.i;
|
||||
int64_t res = 1;
|
||||
if (exp < 0) { res = 0; } else {
|
||||
while (exp > 0) {
|
||||
if (exp & 1) res *= base;
|
||||
base *= base;
|
||||
exp >>= 1;
|
||||
}
|
||||
}
|
||||
push_value(vm, make_int(res));
|
||||
free_value(a); free_value(b);
|
||||
break;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue