00001 #include "machine.h"
00002 typedef signed char integer1;
00003 typedef short integer2;
00004
00005 static integer c1 = 1;
00006
00007 extern int C2F(gendot)(integer *typ,integer *n,void *dx,integer *incx,void *dy,integer *incy);
00008
00009 #define MMUL(Type) {\
00010 Type *A;\
00011 Type *B;\
00012 Type *C;\
00013 A=(Type *)a;\
00014 --A;\
00015 B=(Type *)b;\
00016 --B;\
00017 C=(Type *)c;\
00018 --C;\
00019 for (j = 1; j <= i1; ++j) {\
00020 i2 = *l;\
00021 for (i = 1; i <= i2; ++i) \
00022 C[ic + i] = C2F(gendot)(typ,m, &A[i], na, &B[ib], &c1);\
00023 ic += *nc;ib += *nb;\
00024 }\
00025 }
00026
00027 int C2F(genmmul)(typ, a, na, b, nb, c, nc, l, m, n)
00028 integer *na, *nb, *nc, *m, *n, *l;
00029 integer *typ;
00030 int *a;
00031 int *b;
00032 int *c;
00033 {
00034 static integer i1, i2;
00035 static integer i, j, ib, ic;
00036 ib = 1;
00037 ic = 0;
00038 i1 = *n;
00039
00040
00041 switch (*typ) {
00042 case 1:
00043 MMUL(integer1);
00044 break;
00045 case 2:
00046 MMUL(integer2);
00047 break;
00048 case 4:
00049 MMUL(integer);
00050 break;
00051 case 11:
00052 MMUL(unsigned char);
00053 break;
00054 case 12:
00055 MMUL(unsigned short);
00056 break;
00057 case 14:
00058 MMUL(unsigned int);
00059 break;
00060 }
00061 return 0;
00062 }
00063