Jeremy Higdon writes:
> In reality, the switch does a 60 bit shift right, so I can cast to a
> uint, which is the right thing to do on old architectures :-), solving
> the problem. I had originally thought that the problem was in all the
> masks, shifts, and compares, but they are all inlined.
Well, what do you care about most? The problem can be solved in
other, more disturbing ways. :-) For example, gcc's computed goto.
uint64_t
former_user_of___ucmpdi2(uint64_t node, uint64_t port){
static const void *jumps[16] = {
&&case_foo, /* 0 */
&&case_foo, /* 1 */
&&case_foo, /* 2 */
&&case_foo, /* 3 */
&&case_foo, /* 4 */
&&case_foo, /* 5 */
&&case_foo, /* 6 */
&&case_foo, /* 7 */
&&case_bar, /* 8 */
&&case_bar, /* 9 */
&&case_bar, /* a */
&&case_bar, /* b */
&&case_baz, /* c */
&&case_baz, /* d */
&&case_xxx, /* e */
&&case_yyy /* f */
};
goto *(jumps[node>>60]);
case_foo:
/* foo code here */
return 42;
case_bar:
/* bar code here */
return 18;
case_baz:
/* baz code here */
return 34;
case_xxx:
/* xxx code here */
return 63;
case_yyy:
/* yyy code here */
return 81;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/