repositories
/
mTask.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
revert back to old itasks, add sds support in bytecode
[mTask.git]
/
int
/
interpret.c
diff --git
a/int/interpret.c
b/int/interpret.c
index
f44c7bf
..
4c60bc9
100644
(file)
--- a/
int/interpret.c
+++ b/
int/interpret.c
@@
-5,8
+5,9
@@
#include "interpret.h"
#include "misc.h"
#include "task.h"
#include "interpret.h"
#include "misc.h"
#include "task.h"
+#include "sds.h"
-void run_task(struct task *t)
+void run_task(struct task *t
, int fd
)
{
uint8_t *program = t->bc;
int plen = t->tlen;
{
uint8_t *program = t->bc;
int plen = t->tlen;
@@
-15,71
+16,78
@@
void run_task(struct task *t)
char stack[STACKSIZE] = {0};
printf("Running task with length: %d\n", plen);
while(pc != plen){
char stack[STACKSIZE] = {0};
printf("Running task with length: %d\n", plen);
while(pc != plen){
- printf("program: %x\n", program[pc]);
+ printf("program: %d\n", program[pc]);
+ printf("stack: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n",
+ stack[0], stack[1], stack[2], stack[3], stack[4],
+ stack[5], stack[6], stack[7], stack[8], stack[9]);
switch(program[pc++]){
case BCNOP: trace("nop\n");
break;
switch(program[pc++]){
case BCNOP: trace("nop\n");
break;
- case BCPUSH: trace("push %d\n", program[pc]);
- stack[sp++] = program[pc++];
+ case BCPUSH: trace("push %d\n", program[pc]*265+program[pc+1]);
+ stack[sp++] = program[pc]*265 + program[pc+1];
+ pc+=2;
break;
case BCPOP: trace("pop\n");
sp--;
break;
case BCSDSSTORE: trace("sds store\n");
break;
case BCPOP: trace("pop\n");
sp--;
break;
case BCSDSSTORE: trace("sds store\n");
+ sds_store(program[pc++], stack[sp-1]);
break;
case BCSDSFETCH: trace("sds fetch\n");
break;
case BCSDSFETCH: trace("sds fetch\n");
+ stack[sp++] = sds_fetch(program[pc++]);
break;
case BCSDSPUBLISH: trace("sds publish\n");
break;
case BCSDSPUBLISH: trace("sds publish\n");
+ sds_publish(program[pc++], fd);
break;
case BCNOT: trace("not\n");
stack[sp] = stack[sp] > 0 ? 0 : 1;
break;
case BCADD: trace("add\n");
break;
case BCNOT: trace("not\n");
stack[sp] = stack[sp] > 0 ? 0 : 1;
break;
case BCADD: trace("add\n");
- stack[sp-
1] = stack[sp] + stack[sp-1
];
+ stack[sp-
2] = stack[sp-1] + stack[sp-2
];
sp -= 1;
break;
case BCSUB: trace("sub\n");
sp -= 1;
break;
case BCSUB: trace("sub\n");
- stack[sp-
1] = stack[sp] - stack[sp-1
];
+ stack[sp-
2] = stack[sp-1] - stack[sp-2
];
sp -= 1;
break;
case BCMUL: trace("mul\n");
sp -= 1;
break;
case BCMUL: trace("mul\n");
- stack[sp-
1] = stack[sp] * stack[sp-1
];
+ stack[sp-
2] = stack[sp-1] * stack[sp-2
];
sp -= 1;
break;
case BCDIV: trace("div\n");
sp -= 1;
break;
case BCDIV: trace("div\n");
- stack[sp-
1] = stack[sp] / stack[sp-1
];
+ stack[sp-
2] = stack[sp-1] / stack[sp-2
];
sp -= 1;
break;
case BCAND: trace("and\n");
sp -= 1;
break;
case BCAND: trace("and\n");
- stack[sp-
1] = stack[sp] && stack[sp-1
];
+ stack[sp-
2] = stack[sp-1] && stack[sp-2
];
sp -= 1;
break;
case BCOR: trace("or\n");
sp -= 1;
break;
case BCOR: trace("or\n");
- stack[sp-
1] = stack[sp] || stack[sp-1
];
+ stack[sp-
2] = stack[sp-1] || stack[sp-2
];
sp -= 1;
break;
case BCEQ: trace("eq\n");
sp -= 1;
break;
case BCEQ: trace("eq\n");
- stack[sp-
1] = stack[sp] == stack[sp-1
];
+ stack[sp-
2] = stack[sp-1] == stack[sp-2
];
sp -= 1;
break;
case BCNEQ: trace("neq\n");
sp -= 1;
break;
case BCNEQ: trace("neq\n");
- stack[sp-
1] = stack[sp] != stack[sp-1
];
+ stack[sp-
2] = stack[sp-1] != stack[sp-2
];
sp -= 1;
break;
case BCLES: trace("les\n");
sp -= 1;
break;
case BCLES: trace("les\n");
- stack[sp-
1] = stack[sp] < stack[sp-1
];
+ stack[sp-
2] = stack[sp-1] < stack[sp-2
];
sp -= 1;
break;
case BCGRE: trace("gre\n");
sp -= 1;
break;
case BCGRE: trace("gre\n");
- stack[sp-
1] = stack[sp] > stack[sp-1
];
+ stack[sp-
2] = stack[sp-1] > stack[sp-2
];
sp -= 1;
break;
case BCLEQ: trace("leq\n");
sp -= 1;
break;
case BCLEQ: trace("leq\n");
- stack[sp-
1] = stack[sp] <= stack[sp-1
];
+ stack[sp-
2] = stack[sp-1] <= stack[sp-2
];
sp -= 1;
break;
case BCGEQ: trace("geq\n");
sp -= 1;
break;
case BCGEQ: trace("geq\n");
- stack[sp-
1] = stack[sp] >= stack[sp-1
];
+ stack[sp-
2] = stack[sp-1] >= stack[sp-2
];
sp -= 1;
break;
case BCJMP: trace("jmp to %d\n", program[pc]);
sp -= 1;
break;
case BCJMP: trace("jmp to %d\n", program[pc]);