Skip to content

Commit 1d5b241

Browse files
committed
C operator precedence skullduggery
1 parent 90e774f commit 1d5b241

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

expr.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "spinc.h"
1010
#include "backends/bytecode/bc_bedata.h"
1111
#include "becommon.h" // for PrintExpr
12+
#include "util/softcordic.h"
1213
#include <ctype.h>
1314
#include <string.h>
1415
#include <math.h>
@@ -1533,17 +1534,25 @@ EvalIntOperator(int op, ExprInt lval, ExprInt rval, int *valid, bool truncMath)
15331534
return popcount(rval);
15341535
case K_QLOG:
15351536
{
1537+
#if 1
1538+
return qlog((uint32_t)rval);
1539+
#else
15361540
double e = log2((double)(uint32_t)rval);
15371541
uint32_t i = (int)e;
15381542
return (i << 27) | (uint32_t)round((e - (double)i)*(1<<27));
1543+
#endif
15391544
}
15401545
break;
15411546
case K_QEXP:
15421547
{
1548+
#if 1
1549+
return qexp((uint32_t)rval);
1550+
#else
15431551
double e = ((uint32_t)rval) >> 27;
15441552
double f = ((double)(rval & ((1<<27)-1))) / (1<<27);
15451553
e = pow(2.0, e+f);
15461554
return (uint32_t)round(e);
1555+
#endif
15471556
}
15481557
break;
15491558
case K_POWER:

0 commit comments

Comments
 (0)