From e1bfe8d072410f6ca115452bf9c1e3131fa27f4d Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Fri, 31 Aug 2007 14:44:35 +0000 Subject: [PATCH] improve address mode tests [r15639] --- ir/be/test/am_test.c | 54 ++++++++++++++++++++++++++++++++----------- ir/be/test/am_test2.c | 9 ++++---- ir/be/test/am_test3.c | 11 +++++---- ir/be/test/am_test4.c | 54 +++++++++++++++++++++++++------------------ 4 files changed, 85 insertions(+), 43 deletions(-) diff --git a/ir/be/test/am_test.c b/ir/be/test/am_test.c index 7b454c578..08ac1cec5 100644 --- a/ir/be/test/am_test.c +++ b/ir/be/test/am_test.c @@ -1,18 +1,46 @@ -void am_test_func(int a, int b) { - int ar[10]; - int i; +/*$ -fno-inline $*/ - for (i = 0; i < 10; i++) { - ar[i] = i; - } +int val; - i = ar[1]; +#define T(name,OP) \ + int test_##name(void) { return val OP 7; } \ + int test2_##name(int v) { return val OP v; } \ + int testp_##name(void) { return 7 OP val; } \ + int testp2_##name(int v) { return v OP val; } - ar[1] = a * b + i; -} +int test_cmp_testset(int v, int v2) { return (v & 14) > 0; } + +T(add,+) +T(sub,-) +T(or,|) +T(and,&) +T(xor,^) +T(cmp,<) +T(shl,<<) +T(shr,>>) + +#undef T + +int main(void) { + int res1, res2, res3, res4; + val = 11; + +#define T(name,OP) \ + res1 = test_##name(); \ + res2 = test2_##name(20); \ + res3 = testp_##name(); \ + res4 = testp2_##name(20); \ + printf("Test %s: %d (should be %d)\n", #name, res1, 11 OP 7); \ + printf("Test2 %s: %d (should be %d)\n", #name, res2, 11 OP 20); \ + printf("Testp %s: %d (should be %d)\n", #name, res3, 7 OP 11); \ + printf("Testp2 %s: %d (should be %d)\n", #name, res4, 20 OP 11); -int main() -{ - am_test_func(0, 0); - return 0; + T(add,+) + T(sub,-) + T(or,|) + T(and,&) + T(xor,^) + T(cmp,<) + T(shl,<<) + T(shr,>>) } diff --git a/ir/be/test/am_test2.c b/ir/be/test/am_test2.c index 2e628a7b3..88b910867 100644 --- a/ir/be/test/am_test2.c +++ b/ir/be/test/am_test2.c @@ -3,14 +3,15 @@ int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int sum(int from, int to) { - int i, res = 0; + int i, res = 0, res2 = 666; int len = to - from; for(i = 0; i < len; ++i) { - res += arr[from + i]; + res += arr[from + i]; + res2 -= arr[i]; } - return res; + return res ^ res2; } int main(int argc, char **argv) { @@ -19,6 +20,6 @@ int main(int argc, char **argv) { if(argc > 1) to = atoi(argv[1]); - printf("Sum: %d\n", sum(from, to)); + printf("Res: %d\n", sum(from, to)); return 0; } diff --git a/ir/be/test/am_test3.c b/ir/be/test/am_test3.c index 6f9993a29..52ce5104e 100644 --- a/ir/be/test/am_test3.c +++ b/ir/be/test/am_test3.c @@ -1,16 +1,19 @@ -int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; +/*$ -fno-inline $*/ -int sum(int c) { +char arr[] = { 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 }; + +int sum(int c, int offs) { int i, res = 0; for(i = 0; i < c; ++i) { - res += i; + res += arr[i * 2 + offs + 2]; } return res; } int main(void) { - printf("Sum: %d\n", sum(10)); + printf("Sum: %d\n", sum(10, 0)); return 0; } diff --git a/ir/be/test/am_test4.c b/ir/be/test/am_test4.c index e83d9c2f3..97d4e63c0 100644 --- a/ir/be/test/am_test4.c +++ b/ir/be/test/am_test4.c @@ -16,36 +16,46 @@ char f4(char *p, int k) { return p[k]; } -void dest_am(int *arr, int from, int to) { - int i; - - for(i = from + 1; i < to; ++i) { - arr[i] += arr[i-1]; - } +#define T(name, OP, OP2) \ +void dest_am_##name(int *arr, int from, int to) { \ + int i; \ + \ + for(i = from; i < to; ++i) { \ + arr[i] = OP arr[i] OP2; \ + } \ } -void dest_am2(int *arr, int from, int to) { - int i; - - for(i = from + 1; i < to; ++i) { - arr[i] = -arr[i]; - } -} +T(neg, -,) +T(not, ~,) +T(add, 3 +,) +T(sub, , - 42) +T(and, 0x12345 &,) +T(or, 0x12345 |,) +T(xor, 0x12345 ^,) +T(inc, 1 + ,) +T(dec, , - 1) +T(shl, , << 3) +T(shr, , >> 3) int main(void) { int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int i; - dest_am(arr, 0, 10); - for(i = 0; i < 10; ++i) { - printf("%d ", arr[i]); - } - printf("\n"); - dest_am2(arr, 0, 10); - for(i = 0; i < 10; ++i) { - printf("%d ", arr[i]); - } +#define C(name) dest_am_##name(arr, 0, 10); \ + for(i = 0; i < 10; ++i) { \ + printf("%d ", arr[i]); \ + } \ printf("\n"); + C(neg); + C(not); + C(add); + C(sub); + C(and); + C(or); + C(inc); + C(dec); + C(xor); + return 0; } -- 2.20.1