1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-18 07:29:36 +00:00

fix some cases when comparing floats vs ints

This commit is contained in:
mrdudz 2022-11-17 20:41:15 +01:00
parent 54e7d71cb7
commit f7f5d39f20
2 changed files with 21 additions and 9 deletions

View File

@ -1553,26 +1553,32 @@ unsigned g_typeadjust (unsigned lhs, unsigned rhs)
/* Result is const if both operands are const. */
unsigned const_flag = (lhs & CF_CONST) & (rhs & CF_CONST);
ASMLOG(("nop ; g_typeadjust ltype:%x rtype:%x", ltype, rtype)); // FIXME: remove
LOG((">g_typeadjust ltype:%02x rtype:%02x\n", ltype, rtype)); // FIXME: remove
ASMLOG(("nop ;>g_typeadjust ltype:%02x rtype:%02x", ltype, rtype)); // FIXME: remove
/* FIXME: float - this is much much more complicated */
if (ltype == CF_FLOAT && rtype == CF_FLOAT) {
// g_regfloat (rhs);
ASMLOG(("nop ; g_typeadjust return:%x float", const_flag | CF_FLOAT)); // FIXME: remove
LOG(("<g_typeadjust both float return:%02x float\n", const_flag | CF_FLOAT)); // FIXME: remove
ASMLOG(("nop ;< g_typeadjust both float return:%02x float", const_flag | CF_FLOAT)); // FIXME: remove
return const_flag | CF_FLOAT;
}
if (ltype == CF_FLOAT) {
FIXME(("FIXME: conversion to float format missing\n"));
g_regfloat (rhs);
ASMLOG(("nop ; g_typeadjust return:%x float", (lhs & CF_CONST) | CF_FLOAT)); // FIXME: remove
else if (ltype == CF_FLOAT) {
// FIXME(("FIXME: conversion to float format missing\n"));
// g_regfloat (rhs);
LOG(("<g_typeadjust left float return:%02x float\n", (lhs & CF_CONST) | CF_FLOAT)); // FIXME: remove
ASMLOG(("nop ;< g_typeadjust return:%02x float", (lhs & CF_CONST) | CF_FLOAT)); // FIXME: remove
return (lhs & CF_CONST) | CF_FLOAT;
}
if (rtype == CF_FLOAT) {
FIXME(("FIXME: conversion to float format missing\n"));
else if (rtype == CF_FLOAT) {
// FIXME(("FIXME: conversion to float format missing\n"));
g_regfloat (lhs);
ASMLOG(("nop ; g_typeadjust return:%x float", (rhs & CF_CONST) | CF_FLOAT)); // FIXME: remove
LOG(("<g_typeadjust right float return:%02x float\n", (rhs & CF_CONST) | CF_FLOAT)); // FIXME: remove
ASMLOG(("nop ;< g_typeadjust return:%02x float", (rhs & CF_CONST) | CF_FLOAT)); // FIXME: remove
return (rhs & CF_CONST) | CF_FLOAT;
}
LOG(("g_typeadjust not float ltype:%02x rtype:%02x\n", ltype, rtype)); // FIXME: remove
ASMLOG(("nop ; g_typeadjust not float ltype:%02x rtype:%02x", ltype, rtype)); // FIXME: remove
/* Check if a conversion is needed */
if (ltype == CF_LONG && rtype != CF_LONG && (rhs & CF_CONST) == 0) {

View File

@ -2951,9 +2951,15 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */
/* FIXME: float --- startcode end */
if (Expr2.Type == type_float) {
/* Generate code */
LOG(("hie_compare generate code for Expr2 as float\n"));
GenFunc (flags, FP_D_As32bitRaw(Expr2.V.FVal));
} else if (IsClassFloat(Expr->Type)) {
/* Generate code */
LOG(("hie_compare generate code for Expr as float\n"));
GenFunc (flags, FP_D_As32bitRaw(FP_D_FromInt(Expr2.IVal)));
} else {
/* Generate code */
LOG(("hie_compare generate code for Expr2 as int (=%d)\n", Expr2.IVal));
GenFunc (flags, Expr2.IVal);
}
/* FIXME: float --- newcode end */