return decorateType (otree);
}
-#if 0
- // we can't do this because of "(int & 0xff) << 3"
-
- /* if right or left is literal then result of that type */
- if (IS_LITERAL (RTYPE (tree)))
- {
-
- TTYPE (tree) = copyLinkChain (RTYPE (tree));
- TETYPE (tree) = getSpec (TTYPE (tree));
- SPEC_SCLS (TETYPE (tree)) = S_AUTO;
- }
- else
- {
- if (IS_LITERAL (LTYPE (tree)))
- {
- TTYPE (tree) = copyLinkChain (LTYPE (tree));
- TETYPE (tree) = getSpec (TTYPE (tree));
- SPEC_SCLS (TETYPE (tree)) = S_AUTO;
-
- }
- else
- {
- TTYPE (tree) =
- computeType (LTYPE (tree), RTYPE (tree));
- TETYPE (tree) = getSpec (TTYPE (tree));
- }
- }
-#else
TTYPE (tree) =
computeType (LTYPE (tree), RTYPE (tree));
TETYPE (tree) = getSpec (TTYPE (tree));
-#endif
+
LRVAL (tree) = RRVAL (tree) = 1;
return tree;
}
{
iCode *ic;
+ // bitwise operations must be done unsigned
+ SPEC_USIGN(resType)=1;
+
left = geniCodeCast (resType, left, TRUE);
right = geniCodeCast (resType, right, TRUE);
if (uval<=0xffff) {
SPEC_LONG(val->type)=0;
SPEC_CVAL(val->type).v_uint = uval;
- }
- if (uval<=0xff) {
- SPEC_NOUN(val->type)=V_CHAR;
+ if (uval<=0xff) {
+ SPEC_NOUN(val->type)=V_CHAR;
+ }
}
} else { // not unsigned
if (sval<0) {
if (sval>=-32768) {
SPEC_LONG(val->type)=0;
SPEC_CVAL(val->type).v_int = sval & 0xffff;
- }
- if (sval>=-128) {
- SPEC_NOUN(val->type)=V_CHAR;
- SPEC_CVAL(val->type).v_int &= 0xff;
+ if (sval>=-128) {
+ SPEC_NOUN(val->type)=V_CHAR;
+ SPEC_CVAL(val->type).v_int &= 0xff;
+ }
}
} else { // sval>=0
SPEC_USIGN(val->type)=1;
if (sval<=65535) {
SPEC_LONG(val->type)=0;
SPEC_CVAL(val->type).v_int = sval;
- }
- if (sval<=255) {
- SPEC_NOUN(val->type)=V_CHAR;
+ if (sval<=255) {
+ SPEC_NOUN(val->type)=V_CHAR;
+ }
}
}
}
}
/*------------------------------------------------------------------*/
-/* floatFromVal - value to unsinged integer conversion */
+/* floatFromVal - value to double float conversion */
/*------------------------------------------------------------------*/
double
floatFromVal (value * val)