1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
#include "../machine.h"
typedef char integer1;
typedef short integer2;
/* Copyright INRIA */
#define MMAX(Type) {\
Type *DX;\
Type *DY;\
DX=(Type *)dx;\
--DX;\
DY=(Type *)dy;\
--DY;\
if (*job==2) {\
for (l = 1; l <= *m; ++l){\
DY[l] = DX[l];DK[l] = 1;\
for (k = 1; k < *n; ++k) {\
if (DX[l+k*ix] > DY[l]) {\
DY[l] = DX[l+k*ix];DK[l] = k+1;}}}}\
if (*job==1) {\
for (k = 0; k < *n; ++k){\
kk = k*ix;\
DY[1+k*iy] = DX[1+kk];DK[1+k*iy] = 1;\
for (l = 2; l <= *m; ++l) {\
if (DX[l+kk] > DY[1+k*iy]) {\
DY[1+k*iy] = DX[l+kk];DK[1+k*iy] = l;}}}}\
if (*job==0) {\
DY[1] = DX[1];DK[1] = 1;\
for (k = 0; k < *n; ++k){\
kk = k*ix;\
for (l = 1; l <= *m; ++l) {\
if (DX[l+kk] > DY[1]) {\
DY[1] = DX[l+kk];DK[1] = l + k * iy;}}}}\
}
int C2F(genmmax)(typ, job, m, n, dx, incx, dy, dk, incy)
integer *m, *n;
integer *incx;
integer *incy;
integer *typ;
integer *job;
int *dx;
int *dy;
int *dk;
{
static integer i, ix, iy, l, k, kk, *DK;
DK=--dk;
ix = *incx;
iy = *incy;
switch (*typ) {
case 1:
MMAX(integer1);
break;
case 2:
MMAX(integer2);
break;
case 4:
MMAX(integer);
break;
case 11:
MMAX(unsigned char);
break;
case 12:
MMAX(unsigned short);
break;
case 14:
MMAX(unsigned int);
break;
}
}
|