OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_47/] [or1ksim/] [testbench/] [mul.c] - Diff between revs 997 and 1024

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 997 Rev 1024
Line 10... Line 10...
#include <stdlib.h>
#include <stdlib.h>
#define LONGEST long long
#define LONGEST long long
 
 
LONGEST acc = 0;
LONGEST acc = 0;
#define MAC(x,y) {\
#define MAC(x,y) {\
  PRINTF ("[%08x,%08x]\t", (unsigned long)(x), (unsigned long)(y));\
  printf ("[%08x,%08x]\t", (unsigned long)(x), (unsigned long)(y));\
  acc += (LONGEST)(x) * (LONGEST)(y);\
  acc += (LONGEST)(x) * (LONGEST)(y);\
  PRINTF ("(%08x,%08x)\n", (unsigned long)(acc >> 32), (unsigned long)(acc & 0xffffffff));\
  printf ("(%08x,%08x)\n", (unsigned long)(acc >> 32), (unsigned long)(acc & 0xffffffff));\
}
}
#define MACRC    (macrc())
#define MACRC    (macrc())
static inline long macrc() {
static inline long macrc() {
  long result = acc >> 28;
  long result = acc >> 28;
  //PRINTF ("<%08x>\n", (unsigned long)result);
  //printf ("<%08x>\n", (unsigned long)result);
  acc = 0;
  acc = 0;
  return result;
  return result;
}
}
#else /* OR1K */
#else /* OR1K */
 
 
Line 42... Line 42...
    t = a * b;
    t = a * b;
    t += 153;
    t += 153;
    a = t - a * 17;
    a = t - a * 17;
    b = t + b * 13333;
    b = t + b * 13333;
 
 
    /*PRINTF ("(%08x,%08x)", a, b);*/
    /*printf ("(%08x,%08x)", a, b);*/
  }
  }
  return a;
  return a;
}
}
 
 
long test_mac (long a, long b) {
long test_mac (long a, long b) {
Line 61... Line 61...
      a = MACRC;
      a = MACRC;
    }
    }
    MAC (a, 3);
    MAC (a, 3);
    MAC (a, 5);
    MAC (a, 5);
    MAC (a, 7);
    MAC (a, 7);
    //PRINTF ("(%08x,%08x)", a, b);
    //printf ("(%08x,%08x)", a, b);
  }
  }
  return a;
  return a;
}
}
 
 
long test_mul_mac (long a, long b) {
long test_mul_mac (long a, long b) {
Line 83... Line 83...
      a = t - a;
      a = t - a;
      b = t + a;
      b = t + a;
    } else {
    } else {
      a = MACRC;
      a = MACRC;
    }
    }
 //   PRINTF ("(%08x,%08x)", a, b);
 //   printf ("(%08x,%08x)", a, b);
  }
  }
  return a;
  return a;
}
}
 
 
int main () {
int main () {
  unsigned t1;
  unsigned t1;
  unsigned t2;
  unsigned t2;
  unsigned t3;
  unsigned t3;
  PRINTF ("%08x\n", MACRC);
  printf ("%08x\n", MACRC);
  MAC (888888887, 0x87654321);
  MAC (888888887, 0x87654321);
  PRINTF ("%08x\n", MACRC);
  printf ("%08x\n", MACRC);
  t1 = test_mul (888888887, 0x87654321);
  t1 = test_mul (888888887, 0x87654321);
  t2 = test_mac (888888887, 0x87654321);
  t2 = test_mac (888888887, 0x87654321);
  t3 = test_mul_mac (888888887, 0x87654321);
  t3 = test_mul_mac (888888887, 0x87654321);
  PRINTF ("%08x, expected %08x\n", t1, T1);
  printf ("%08x, expected %08x\n", t1, T1);
  PRINTF ("%08x, expected %08x\n", t2, T2);
  printf ("%08x, expected %08x\n", t2, T2);
  PRINTF ("%08x, expected %08x\n", t3, T3);
  printf ("%08x, expected %08x\n", t3, T3);
  report (t1 ^ t2 ^ t3 ^ T1 ^ T2 ^ T3 ^ 0xdeaddead);
  report (t1 ^ t2 ^ t3 ^ T1 ^ T2 ^ T3 ^ 0xdeaddead);
  if (t1 != T1 || t2 != T2 || t3 != T3) {
  if (t1 != T1 || t2 != T2 || t3 != T3) {
    PRINTF ("Test failed!\n");
    printf ("Test failed!\n");
    if (t1 != T1) exit (1);
    if (t1 != T1) exit (1);
    if (t2 != T2) exit (2);
    if (t2 != T2) exit (2);
    if (t3 != T3) exit (3);
    if (t3 != T3) exit (3);
  } else {
  } else {
    PRINTF ("Test succesful.\n");
    printf ("Test succesful.\n");
    exit (0);
    exit (0);
  }
  }
  exit (0);
  exit (0);
}
}
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.