21 lines
661 B
C
21 lines
661 B
C
// Benchmark function — orBug-style recursive double expression eval.
|
|
// Used to compare W65816 backend (with W65816ImgCalleeSave pass) vs Calypsi.
|
|
double evalAt(char **p, int prec) {
|
|
double a = 0.0;
|
|
while (**p >= '0' && **p <= '9') {
|
|
a = a * 10.0 + (double)(**p - '0');
|
|
(*p)++;
|
|
}
|
|
while (1) {
|
|
int op = **p;
|
|
int oprec;
|
|
if (op == '*' || op == '/') oprec = 4;
|
|
else if (op == '+' || op == '-') oprec = 3;
|
|
else return a;
|
|
if (oprec <= prec) return a;
|
|
(*p)++;
|
|
double b = evalAt(p, oprec);
|
|
if (op == '+') a = a + b;
|
|
else if (op == '*') a = a * b;
|
|
}
|
|
}
|