* device/lib/pic16/Makefile.common.in: added MODELFLAGS again, it was erroneously...
[fw/sdcc] / src / regression / mult1.c
index 6bf36e46b1be16de2e9ff66704d969f0027f60ad..a5308746b86c8781337a3b54bb4fe0351f951482 100644 (file)
@@ -1,3 +1,8 @@
+#define __16F873
+#include "p16f873.h"
+
+#define TESTLIT 0x05
+
 unsigned char success=0;
 unsigned char failures=0;
 unsigned char dummy=0;
@@ -39,6 +44,51 @@ void m2(unsigned char uc)
     failures++;
 }
 
+void m3(unsigned char uc)
+{
+  volatile unsigned char vuc;
+  
+  // uchar = uchar * lit
+  // testing literal multiply with same source and destination
+  vuc = uc;
+  uc2 = 0;   
+  uc1 = vuc; uc1 = uc1*1; if( uc1 != (uc2+=TESTLIT) ) failures++; 
+  uc1 = vuc; uc1 = uc1*2; if( uc1 != (uc2+=TESTLIT) ) failures++;      
+  uc1 = vuc; uc1 = uc1*3; if( uc1 != (uc2+=TESTLIT) ) failures++;     
+  uc1 = vuc; uc1 = uc1*4; if( uc1 != (uc2+=TESTLIT) ) failures++;      
+  uc1 = vuc; uc1 = uc1*5; if( uc1 != (uc2+=TESTLIT) ) failures++;     
+  uc1 = vuc; uc1 = uc1*6; if( uc1 != (uc2+=TESTLIT) ) failures++;      
+  uc1 = vuc; uc1 = uc1*7; if( uc1 != (uc2+=TESTLIT) ) failures++;     
+  uc1 = vuc; uc1 = uc1*8; if( uc1 != (uc2+=TESTLIT) ) failures++;      
+  uc1 = vuc; uc1 = uc1*9; if( uc1 != (uc2+=TESTLIT) ) failures++;     
+  uc1 = vuc; uc1 = uc1*10; if( uc1 != (uc2+=TESTLIT) ) failures++;      
+  uc1 = vuc; uc1 = uc1*11; if( uc1 != (uc2+=TESTLIT) ) failures++;     
+  uc1 = vuc; uc1 = uc1*12; if( uc1 != (uc2+=TESTLIT) ) failures++;      
+  uc1 = vuc; uc1 = uc1*13; if( uc1 != (uc2+=TESTLIT) ) failures++;
+  uc1 = vuc; uc1 = uc1*14; if( uc1 != (uc2+=TESTLIT) ) failures++;
+  uc1 = vuc; uc1 = uc1*15; if( uc1 != (uc2+=TESTLIT) ) failures++;
+  uc1 = vuc; uc1 = uc1*16; if( uc1 != (uc2+=TESTLIT) ) failures++;
+  uc1 = vuc; uc1 = uc1*17; if( uc1 != (uc2+=TESTLIT) ) failures++;
+  uc1 = vuc; uc1 = uc1*18; if( uc1 != (uc2+=TESTLIT) ) failures++;
+  uc1 = vuc; uc1 = uc1*19; if( uc1 != (uc2+=TESTLIT) ) failures++;
+  uc1 = vuc; uc1 = uc1*20; if( uc1 != (uc2+=TESTLIT) ) failures++;
+  uc1 = vuc; uc1 = uc1*21; if( uc1 != (uc2+=TESTLIT) ) failures++;
+  uc1 = vuc; uc1 = uc1*22; if( uc1 != (uc2+=TESTLIT) ) failures++;
+  uc1 = vuc; uc1 = uc1*23; if( uc1 != (uc2+=TESTLIT) ) failures++;  
+  uc1 = vuc; uc1 = uc1*24; if( uc1 != (uc2+=TESTLIT) ) failures++;
+  
+  uc1 = vuc; uc1 = uc1*31; if( uc1 != ((31*TESTLIT) & 0xff) ) failures++;
+  uc1 = vuc; uc1 = uc1*32; if( uc1 != ((32*TESTLIT) & 0xff) ) failures++;
+  uc1 = vuc; uc1 = uc1*64; if( uc1 != ((64*TESTLIT) & 0xff) ) failures++;
+  uc1 = vuc; uc1 = uc1*128;if( uc1 != ((128*TESTLIT)& 0xff) ) failures++;
+
+  // testing literal multiply with different source and destination
+  uc1 = vuc*1; if( uc1 != ((1*TESTLIT) & 0xff) ) failures++;    
+  uc1 = vuc*2; if( uc1 != ((2*TESTLIT) & 0xff) ) failures++;    
+  uc1 = vuc*4; if( uc1 != ((4*TESTLIT) & 0xff) ) failures++;
+}
+
+
 void main(void)
 {
   dummy = 0;
@@ -46,7 +96,7 @@ void main(void)
   c1 = 1;
   c3 = 5;
 
-  //m1();
+  m1();
 
   uc1 = 0x10;
   m2(2);
@@ -57,6 +107,7 @@ void main(void)
 
   ui3 = ui1*ui2;   // uint = uint * unit
 
+  //m3(TESTLIT);
 
   success = failures;
   done();