| #include <stdio.h> |
| |
| typedef unsigned int uint32_t; |
| typedef int int32_t; |
| |
| const char *boolstring(int val) { |
| return val ? "true" : "false"; |
| } |
| |
| int i32_eq(int32_t a, int32_t b) { |
| return (a == b); |
| } |
| |
| int i32_neq(int32_t a, int32_t b) { |
| return (a != b); |
| } |
| |
| int32_t i32_eq_select(int32_t a, int32_t b, int32_t c, int32_t d) { |
| return ((a == b) ? c : d); |
| } |
| |
| int32_t i32_neq_select(int32_t a, int32_t b, int32_t c, int32_t d) { |
| return ((a != b) ? c : d); |
| } |
| |
| struct pred_s { |
| const char *name; |
| int (*predfunc)(int32_t, int32_t); |
| int (*selfunc)(int32_t, int32_t, int32_t, int32_t); |
| }; |
| |
| struct pred_s preds[] = { |
| { "eq", i32_eq, i32_eq_select }, |
| { "neq", i32_neq, i32_neq_select } |
| }; |
| |
| int main(void) { |
| int i; |
| int32_t a = 1234567890; |
| int32_t b = 345678901; |
| int32_t c = 1234500000; |
| int32_t d = 10001; |
| int32_t e = 10000; |
| |
| printf("a = %12d (0x%08x)\n", a, a); |
| printf("b = %12d (0x%08x)\n", b, b); |
| printf("c = %12d (0x%08x)\n", c, c); |
| printf("d = %12d (0x%08x)\n", d, d); |
| printf("e = %12d (0x%08x)\n", e, e); |
| printf("----------------------------------------\n"); |
| |
| for (i = 0; i < sizeof(preds)/sizeof(preds[0]); ++i) { |
| printf("a %s a = %s\n", preds[i].name, boolstring((*preds[i].predfunc)(a, a))); |
| printf("a %s a = %s\n", preds[i].name, boolstring((*preds[i].predfunc)(a, a))); |
| printf("a %s b = %s\n", preds[i].name, boolstring((*preds[i].predfunc)(a, b))); |
| printf("a %s c = %s\n", preds[i].name, boolstring((*preds[i].predfunc)(a, c))); |
| printf("d %s e = %s\n", preds[i].name, boolstring((*preds[i].predfunc)(d, e))); |
| printf("e %s e = %s\n", preds[i].name, boolstring((*preds[i].predfunc)(e, e))); |
| |
| printf("a %s a ? c : d = %d\n", preds[i].name, (*preds[i].selfunc)(a, a, c, d)); |
| printf("a %s a ? c : d == c (%s)\n", preds[i].name, boolstring((*preds[i].selfunc)(a, a, c, d) == c)); |
| printf("a %s b ? c : d = %d\n", preds[i].name, (*preds[i].selfunc)(a, b, c, d)); |
| printf("a %s b ? c : d == d (%s)\n", preds[i].name, boolstring((*preds[i].selfunc)(a, b, c, d) == d)); |
| |
| printf("----------------------------------------\n"); |
| } |
| |
| return 0; |
| } |