* src/*.c, src/pic16/{gen.c,glue.c,main.c}: applied Vangelis
[fw/sdcc] / src / pic16 / glue.c
index 7e1d1b762de80a2aaa61c0d7d5327a577230146d..5c78ee677ef11ff56e2b99e5db6c39d42df71e1f 100644 (file)
@@ -95,12 +95,18 @@ int pic16aopLiteral (value *val, int offset)
 
   /* if it is a float then it gets tricky */
   /* otherwise it is fairly simple */
-  if (!IS_FLOAT(val->type)) {
+  if (!(IS_FLOAT(val->type) || IS_FIXED(val->type))) {
     unsigned long v = (unsigned long) floatFromVal(val);
 
     return ( (v >> (offset * 8)) & 0xff);
   }
 
+  if(IS_FIXED16X16(val->type)) {
+    unsigned long v = (unsigned long)fixed16x16FromDouble( floatFromVal( val ) );
+    
+    return ( (v >> (offset * 8)) & 0xff);
+  }
+
   /* it is type float */
   fl.f = (float) floatFromVal(val);
 #ifdef WORDS_BIGENDIAN