aboutsummaryrefslogtreecommitdiffstats
path: root/ops.c
diff options
context:
space:
mode:
authorClyne Sullivan <tullivan99@gmail.com>2018-03-07 15:25:07 -0500
committerClyne Sullivan <tullivan99@gmail.com>2018-03-07 15:25:07 -0500
commit952cb2d6dbd1b4cd76bb7c5dd46c1053631476a3 (patch)
treec1c1c89355d242489b551bd4390bdd2a68682926 /ops.c
parent0fb67b8d66ffd47ede0a0a5d09380943722414e9 (diff)
big changes; no ints; things work better
Diffstat (limited to 'ops.c')
-rw-r--r--ops.c87
1 files changed, 16 insertions, 71 deletions
diff --git a/ops.c b/ops.c
index 34e7986..cb07093 100644
--- a/ops.c
+++ b/ops.c
@@ -32,136 +32,81 @@ operation_t iopfuncs[IOPS_COUNT] = {
void iop_add(variable *r, variable *a, variable *b)
{
- if (a->valtype == INTEGER && b->valtype == INTEGER) {
- INT(r) = INT(a) + INT(b);
- } else {
- itofloat(a);
- itofloat(b);
- FLOAT(r) = FLOAT(a) + FLOAT(b);
- }
+ r->value.f = a->value.f + b->value.f;
}
void iop_sub(variable *r, variable *a, variable *b)
{
- if (a->valtype == INTEGER && b->valtype == INTEGER) {
- INT(r) = INT(a) - INT(b);
- } else {
- itofloat(a);
- itofloat(b);
- FLOAT(r) = FLOAT(a) - FLOAT(b);
- }
+ r->value.f = a->value.f - b->value.f;
}
void iop_mult(variable *r, variable *a, variable *b)
{
- if (a->valtype == INTEGER && b->valtype == INTEGER) {
- INT(r) = INT(a) * INT(b);
- } else {
- itofloat(a);
- itofloat(b);
- FLOAT(r) = FLOAT(a) * FLOAT(b);
- }
+ r->value.f = a->value.f * b->value.f;
}
void iop_div(variable *r, variable *a, variable *b)
{
- if (a->valtype == INTEGER && b->valtype == INTEGER) {
- INT(r) = INT(a) / INT(b);
- } else {
- itofloat(a);
- itofloat(b);
- FLOAT(r) = FLOAT(a) / FLOAT(b);
- }
+ r->value.f = a->value.f / b->value.f;
}
void iop_and(variable *r, variable *a, variable *b)
{
- if (a->valtype == INTEGER && b->valtype == INTEGER) {
- INT(r) = INT(a) & INT(b);
- }
+ r->value.f = (float)((int)a->value.f & (int)b->value.f);
}
void iop_or(variable *r, variable *a, variable *b)
{
- if (a->valtype == INTEGER && b->valtype == INTEGER) {
- INT(r) = INT(a) | INT(b);
- }
+ r->value.f = (float)((int)a->value.f | (int)b->value.f);
}
void iop_xor(variable *r, variable *a, variable *b)
{
- if (a->valtype == INTEGER && b->valtype == INTEGER) {
- INT(r) = INT(a) ^ INT(b);
- }
+ r->value.f = (float)((int)a->value.f ^ (int)b->value.f);
}
void iop_shr(variable *r, variable *a, variable *b)
{
- if (a->valtype == INTEGER && b->valtype == INTEGER) {
- INT(r) = INT(a) >> INT(b);
- }
+ r->value.f = (float)((int)a->value.f >> (int)b->value.f);
}
void iop_shl(variable *r, variable *a, variable *b)
{
- if (a->valtype == INTEGER && b->valtype == INTEGER) {
- INT(r) = INT(a) << INT(b);
- }
+ r->value.f = (float)((int)a->value.f << (int)b->value.f);
}
void iop_eq(variable *r, variable *a, variable *b)
{
- if (a->valtype == INTEGER && b->valtype == INTEGER)
- INT(r) = INT(a) == INT(b);
- else
- INT(r) = FLOAT(a) == FLOAT(b);
+ r->value.f = a->value.f == b->value.f;
}
void iop_lt(variable *r, variable *a, variable *b)
{
- if (a->valtype == INTEGER && b->valtype == INTEGER)
- INT(r) = INT(a) < INT(b);
- else
- INT(r) = FLOAT(a) < FLOAT(b);
+ r->value.f = a->value.f < b->value.f;
}
void iop_gt(variable *r, variable *a, variable *b)
{
- if (a->valtype == INTEGER && b->valtype == INTEGER)
- INT(r) = INT(a) > INT(b);
- else
- INT(r) = FLOAT(a) > FLOAT(b);
+ r->value.f = a->value.f > b->value.f;
}
void iop_lte(variable *r, variable *a, variable *b)
{
- if (a->valtype == INTEGER && b->valtype == INTEGER)
- INT(r) = INT(a) <= INT(b);
- else
- INT(r) = FLOAT(a) <= FLOAT(b);
+ r->value.f = a->value.f <= b->value.f;
}
void iop_gte(variable *r, variable *a, variable *b)
{
- if (a->valtype == INTEGER && b->valtype == INTEGER)
- INT(r) = INT(a) >= INT(b);
- else
- INT(r) = FLOAT(a) >= FLOAT(b);
+ r->value.f = a->value.f >= b->value.f;
}
void iop_ne(variable *r, variable *a, variable *b)
{
- if (a->valtype == INTEGER && b->valtype == INTEGER)
- INT(r) = INT(a) != INT(b);
- else
- INT(r) = FLOAT(a) != FLOAT(b);
+ r->value.f = a->value.f != b->value.f;
}
void iop_mod(variable *r, variable *a, variable *b)
{
- if (a->valtype == INTEGER && b->valtype == INTEGER)
- INT(r) = INT(a) % INT(b);
- else
- INT(r) = 0;
+ r->value.f = (float)((int)a->value.f % (int)b->value.f);
}