mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-03-21 01:41:10 +00:00
Don't truncat float % float
This allows full usage, eg, x % pi, but otherwise maintains compatibility with integer %
This commit is contained in:
parent
16f8dca72e
commit
13b608f40c
2 changed files with 9 additions and 23 deletions
|
@ -1337,7 +1337,11 @@ op_call:
|
|||
OPC.integer_var = OPA.integer_var % OPB.integer_var;
|
||||
break;
|
||||
case OP_MOD_F:
|
||||
OPC.float_var = (int) OPA.float_var % (int) OPB.float_var;
|
||||
{
|
||||
float a = OPA.float_var;
|
||||
float b = OPB.float_var;
|
||||
OPC.float_var = a - b * truncf (a / b);
|
||||
}
|
||||
break;
|
||||
case OP_CONV_IF:
|
||||
OPC.float_var = OPA.integer_var;
|
||||
|
|
|
@ -628,32 +628,14 @@ reimplement_binary_expr (int op, expr_t *e1, expr_t *e2)
|
|||
switch (op) {
|
||||
case '%':
|
||||
{
|
||||
expr_t *tmp1, *tmp2, *tmp3, *tmp4, *t1, *t2;
|
||||
expr_t *tmp1, *tmp2;
|
||||
e = new_block_expr ();
|
||||
t1 = new_temp_def_expr (&type_float);
|
||||
t2 = new_temp_def_expr (&type_float);
|
||||
tmp1 = new_temp_def_expr (&type_float);
|
||||
tmp2 = new_temp_def_expr (&type_float);
|
||||
tmp3 = new_temp_def_expr (&type_float);
|
||||
tmp4 = new_temp_def_expr (&type_float);
|
||||
|
||||
append_expr (e, assign_expr (t1, e1));
|
||||
e1 = binary_expr ('&', t1, t1);
|
||||
append_expr (e, assign_expr (tmp1, e1));
|
||||
|
||||
append_expr (e, assign_expr (t2, e2));
|
||||
e2 = binary_expr ('&', t2, t2);
|
||||
append_expr (e, assign_expr (tmp2, e2));
|
||||
|
||||
e1 = binary_expr ('/', tmp1, tmp2);
|
||||
append_expr (e, assign_expr (tmp3, e1));
|
||||
|
||||
e2 = binary_expr ('&', tmp3, tmp3);
|
||||
append_expr (e, assign_expr (tmp4, e2));
|
||||
|
||||
e1 = binary_expr ('*', tmp2, tmp4);
|
||||
e2 = binary_expr ('-', tmp1, e1);
|
||||
e->e.block.result = e2;
|
||||
append_expr (e, assign_expr (tmp1, binary_expr ('/', e1, e2)));
|
||||
append_expr (e, assign_expr (tmp2, binary_expr ('&', tmp1, tmp1)));
|
||||
e->e.block.result = binary_expr ('-', e1, binary_expr ('*', e2, tmp2));
|
||||
return e;
|
||||
}
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue