| #define NOINLINE __attribute__ ((noinline)) |
| UINT NOINLINE |
| opt_u1 (UINT x) |
| { |
| if (x < (M * N) - GAP) |
| return 0; |
| UINT a = x - (M * N); |
| UINT b = a / N; |
| return b + M; |
| } |
| |
| UINT NOINLINE |
| opt_u2 (UINT x) |
| { |
| if (x > (UMAX - (M * N) + GAP)) |
| return 0; |
| UINT a = x + (M * N); |
| UINT b = a / N; |
| return b - M; |
| } |
| |
| INT NOINLINE |
| opt_s1 (INT x) |
| { |
| if (x < (M * N) - GAP) |
| return 0; |
| INT a = x - (M * N); |
| INT b = a / N; |
| return b + M; |
| } |
| |
| INT NOINLINE |
| opt_s2 (INT x) |
| { |
| if (x < IMIN + (M * N) - GAP || x > 0) |
| return 0; |
| INT a = x - (M * N); |
| INT b = a / N; |
| return b + M; |
| } |
| |
| INT NOINLINE |
| opt_s3 (INT x) |
| { |
| if (x < (M * N) - GAP) |
| return 0; |
| INT a = x - (M * N); |
| INT b = a / -N; |
| return b + -M; |
| } |
| |
| INT NOINLINE |
| opt_s4 (INT x) |
| { |
| if (x < IMIN + (M * N) - GAP || x > 0) |
| return 0; |
| INT a = x - (M * N); |
| INT b = a / -N; |
| return b + -M; |
| } |
| |
| INT NOINLINE |
| opt_s5 (INT x) |
| { |
| if (x > (-M * N) + GAP) |
| return 0; |
| INT a = x - (-M * N); |
| INT b = a / N; |
| return b + -M; |
| } |
| |
| INT NOINLINE |
| opt_s6 (INT x) |
| { |
| if (x > IMAX - (M * N) + GAP || x < 0) |
| return 0; |
| INT a = x - (-M * N); |
| INT b = a / N; |
| return b + -M; |
| } |
| |
| INT NOINLINE |
| opt_s7 (INT x) |
| { |
| if (x > (M * -N) + GAP) |
| return 0; |
| INT a = x - (M * -N); |
| INT b = a / -N; |
| return b + M; |
| } |
| |
| INT NOINLINE |
| opt_s8 (INT x) |
| { |
| if (x > IMAX - (M * N) + GAP || x < 0) |
| return 0; |
| INT a = x - (M * -N); |
| INT b = a / -N; |
| return b + M; |
| } |
| |
| UINT NOINLINE |
| opt_u3 (UINT x) |
| { |
| if (x < (M << N) - GAP) |
| return 0; |
| UINT a = x - (M << N); |
| UINT b = a >> N; |
| return b + M; |
| } |
| |
| UINT NOINLINE |
| opt_u4 (UINT x) |
| { |
| if (x > (UMAX - (M << N)) + GAP) |
| return 0; |
| UINT a = x + (M << N); |
| UINT b = a >> N; |
| return b - M; |
| } |
| |
| INT NOINLINE |
| opt_s9 (INT x) |
| { |
| if (x < (M << N) - GAP) |
| return 0; |
| INT a = x - (M << N); |
| INT b = a >> N; |
| return b + M; |
| } |
| |
| INT NOINLINE |
| opt_s10 (INT x) |
| { |
| if (x < IMIN + (M << N) - GAP || x > 0) |
| return 0; |
| INT a = x - (M << N); |
| INT b = a >> N; |
| return b + M; |
| } |
| |
| INT NOINLINE |
| opt_s11 (INT x) |
| { |
| if (x > (-M << N) + GAP) |
| return 0; |
| INT a = x - (-M << N); |
| INT b = a >> N; |
| return b + -M; |
| } |
| |
| INT NOINLINE |
| opt_s12 (INT x) |
| { |
| if (x > IMAX - (M << N) + GAP || x < 0) |
| return 0; |
| INT a = x - (-M << N); |
| INT b = a >> N; |
| return b + -M; |
| } |
| |
| UINT NOINLINE |
| opt_u5 (UINT x, UINT n, UINT m) |
| { |
| if (n > N || m > M) |
| return 0; |
| if (x < (M*N) - GAP) |
| return 0; |
| UINT a = x - (m * n); |
| UINT b = a / n; |
| return b + m; |
| } |
| |
| UINT NOINLINE |
| opt_u6 (UINT x, UINT n, UINT m) |
| { |
| if (n > N || m > M) |
| return 0; |
| if (x > (UMAX - M*N) + GAP) |
| return 0; |
| UINT a = x + (m * n); |
| UINT b = a / n; |
| return b - m; |
| } |
| |
| INT NOINLINE |
| opt_s13 (INT x, INT n, INT m) |
| { |
| if (n > N || m > M || n < 0 || m < 0) |
| return 0; |
| if (x < (M*N) - GAP) |
| return 0; |
| INT a = x - (m * n); |
| INT b = a / n; |
| return b + m; |
| } |
| |
| INT NOINLINE |
| opt_s14 (INT x, INT n, INT m) |
| { |
| if (n > N || m > M || n < 0 || m < 0) |
| return 0; |
| if (x > -M*N + GAP) |
| return 0; |
| INT a = x + (m * n); |
| INT b = a / n; |
| return b - m; |
| } |
| |
| INT |
| opt_s15 (INT x, INT n, INT m) |
| { |
| if (n > 0 || m > 0 || n < -N || m < -M) |
| return 0; |
| if (x < (M*N) - GAP) |
| return 0; |
| INT a = x - (m * n); |
| INT b = a / n; |
| return b + m; |
| } |
| |
| INT NOINLINE |
| opt_s16 (INT x, INT n, INT m) |
| { |
| if (n > 0 || m > 0 || n < -N || m < -M) |
| return 0; |
| if (x < 0 || x > (IMAX - M*N) + GAP) |
| return 0; |
| INT a = x + (m * n); |
| INT b = a / n; |
| return b - m; |
| } |
| |