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:
parent
54e7d71cb7
commit
f7f5d39f20
|
@ -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) {
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue
Block a user