Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdint.h>
- int mag (uint64_t i) {
- int r;
- static void *jumptable[] = {
- &&lz0, &&lz1, &&lz2, &&lz3, &&lz4, &&lz5, &&lz6, &&lz7,
- &&lz8, &&lz9, &&lz10, &&lz11, &&lz12, &&lz13, &&lz14, &&lz15,
- &&lz16, &&lz17, &&lz18, &&lz19, &&lz20, &&lz21, &&lz22, &&lz23,
- &&lz24, &&lz25, &&lz26, &&lz27, &&lz28, &&lz29, &&lz30, &&lz31,
- &&lz32, &&lz33, &&lz34, &&lz35, &&lz36, &&lz37, &&lz38, &&lz39,
- &&lz40, &&lz41, &&lz42, &&lz43, &&lz44, &&lz45, &&lz46, &&lz47,
- &&lz48, &&lz49, &&lz50, &&lz51, &&lz52, &&lz53, &&lz54, &&lz55,
- &&lz56, &&lz57, &&lz58, &&lz59, &&lz60, &&lz61, &&lz62, &&lz63,
- };
- goto *jumptable[__builtin_clzll(i)];
- lz64:
- lz63:
- lz62:
- lz61:
- r = 0;
- goto end;
- lz60:
- r = (i < 10 ? 0 : 1);
- goto end;
- lz59:
- lz58:
- r = 1;
- goto end;
- lz57:
- r = (i < 100 ? 1 : 2);
- goto end;
- lz56:
- lz55:
- r = 2;
- goto end;
- lz54:
- r = (i < 1000 ? 2 : 3);
- goto end;
- lz53:
- lz52:
- lz51:
- r = 3;
- goto end;
- lz50:
- r = (i < 10000 ? 3 : 4);
- goto end;
- lz49:
- lz48:
- r = 4;
- goto end;
- lz47:
- r = (i < 100000 ? 4 : 5);
- goto end;
- lz46:
- lz45:
- r = 5;
- goto end;
- lz44:
- r = (i < 1000000 ? 5 : 6);
- goto end;
- lz43:
- lz42:
- lz41:
- r = 6;
- goto end;
- lz40:
- r = (i < 10000000 ? 6 : 7);
- goto end;
- lz39:
- lz38:
- r = 7;
- goto end;
- lz37:
- r = (i < 100000000 ? 7 : 8);
- goto end;
- lz36:
- lz35:
- r = 8;
- goto end;
- lz34:
- r = (i < 1000000000 ? 8 : 9);
- goto end;
- lz33:
- lz32:
- lz31:
- r = 9;
- goto end;
- lz30:
- r = (i < 10000000000 ? 9 : 10);
- goto end;
- lz29:
- lz28:
- r = 10;
- goto end;
- lz27:
- r = (i < 100000000000 ? 10 : 11);
- goto end;
- lz26:
- lz25:
- r = 11;
- goto end;
- lz24:
- r = (i < 1000000000000 ? 11 : 12);
- goto end;
- lz23:
- lz22:
- lz21:
- r = 12;
- goto end;
- lz20:
- r = (i < 10000000000000 ? 12 : 13);
- goto end;
- lz19:
- lz18:
- r = 13;
- goto end;
- lz17:
- r = (i < 100000000000000 ? 13 : 14);
- goto end;
- lz16:
- lz15:
- r = 14;
- goto end;
- lz14:
- r = (i < 1000000000000000 ? 14 : 15);
- goto end;
- lz13:
- lz12:
- lz11:
- r = 15;
- goto end;
- lz10:
- r = (i < 10000000000000000 ? 15 : 16);
- goto end;
- lz9:
- lz8:
- r = 16;
- goto end;
- lz7:
- r = (i < 100000000000000000 ? 16 : 17);
- goto end;
- lz6:
- lz5:
- r = 17;
- goto end;
- lz4:
- r = (i < 1000000000000000000 ? 17 : 18);
- goto end;
- lz3:
- lz2:
- lz1:
- r = 18;
- goto end;
- lz0:
- r = (i < 10000000000000000000ULL ? 18 : 19);
- goto end;
- end:
- return r;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement