fixed the foo[foo[5]+5]=10 bug
authorjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 11 May 2001 10:59:48 +0000 (10:59 +0000)
committerjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 11 May 2001 10:59:48 +0000 (10:59 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@801 4a8a32a2-be11-0410-ad9d-d568d2c75423

device/examples/ds390/ow390/owsesu.c
src/SDCCicode.c

index 2a4adf798b1304213ca68621842288c1badb904b..d0acf558a350366f42d197fa84933546fd4b1898 100755 (executable)
@@ -64,7 +64,6 @@ int owAcquire(int portnum, char *port_zstr, char *return_msg)
               " aborting.\nClosing port %s.\n",port_zstr,port_zstr);
       return FALSE;
    }
-   printf (return_msg); // TODO: tini bug
 
    // detect DS2480
    if (DS2480Detect(portnum))
index 98c9da14e5e3913c73b7f7d08afecd0372b2e898..748a9daf0b9827ae9356e766f104e938d9e262f8 100644 (file)
@@ -1699,12 +1699,22 @@ geniCodeMultiply (operand * left, operand * right,int resultIsInt)
     return operandFromValue (valMult (left->operand.valOperand,
                                      right->operand.valOperand));
 
+  if (IS_LITERAL(retype)) {
+    p2 = powof2 ((unsigned long) floatFromVal (right->operand.valOperand));
+  }
+
   if (resultIsInt)
     {
       saveOption = options.ANSIint;
       options.ANSIint = 0;
     }
   resType = usualBinaryConversions (&left, &right);
+#if 1
+  rtype = operandType (right);
+  retype = getSpec (rtype);
+  ltype = operandType (left);
+  letype = getSpec (ltype);
+#endif
   if (resultIsInt)
     {
       options.ANSIint = saveOption;
@@ -1714,11 +1724,12 @@ geniCodeMultiply (operand * left, operand * right,int resultIsInt)
 
   /* if the right is a literal & power of 2 */
   /* then make it a left shift              */
-  /*code generated for 1 byte * 1 byte literal = 2 bytes result is more efficient in most cases */
-  /*than 2 bytes result = 2 bytes << literal if port as 1 byte muldiv */
-  if (IS_LITERAL (retype) && !IS_FLOAT (letype) &&
-      !((resultIsInt) && (getSize (resType) != getSize (ltype)) && (1 == port->muldiv.native_below)) &&
-   (p2 = powof2 ((unsigned long) floatFromVal (right->operand.valOperand))))
+  /* code generated for 1 byte * 1 byte literal = 2 bytes result is more 
+     efficient in most cases than 2 bytes result = 2 bytes << literal 
+     if port has 1 byte muldiv */
+  if (p2 && !IS_FLOAT (letype) &&
+      !((resultIsInt) && (getSize (resType) != getSize (ltype)) && 
+       (port->muldiv.native_below == 1)))
     {
       if ((resultIsInt) && (getSize (resType) != getSize (ltype)))
        {
@@ -1726,7 +1737,7 @@ geniCodeMultiply (operand * left, operand * right,int resultIsInt)
          left = geniCodeCast (resType, left, TRUE);
          ltype = operandType (left);
        }
-      ic = newiCode (LEFT_OP, left, operandFromLit (p2));      /* left shift */
+      ic = newiCode (LEFT_OP, left, operandFromLit (p2)); /* left shift */
     }
   else
     {