Advertisement
Guest User

magnitute

a guest
Mar 3rd, 2015
398
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.52 KB | None | 0 0
  1. #include <stdint.h>
  2.  
  3. int mag (uint64_t i) {
  4.   int r;
  5.   static void *jumptable[] = {
  6.     &&lz0, &&lz1, &&lz2, &&lz3, &&lz4, &&lz5, &&lz6, &&lz7,
  7.     &&lz8, &&lz9, &&lz10, &&lz11, &&lz12, &&lz13, &&lz14, &&lz15,
  8.     &&lz16, &&lz17, &&lz18, &&lz19, &&lz20, &&lz21, &&lz22, &&lz23,
  9.     &&lz24, &&lz25, &&lz26, &&lz27, &&lz28, &&lz29, &&lz30, &&lz31,
  10.     &&lz32, &&lz33, &&lz34, &&lz35, &&lz36, &&lz37, &&lz38, &&lz39,
  11.     &&lz40, &&lz41, &&lz42, &&lz43, &&lz44, &&lz45, &&lz46, &&lz47,
  12.     &&lz48, &&lz49, &&lz50, &&lz51, &&lz52, &&lz53, &&lz54, &&lz55,
  13.     &&lz56, &&lz57, &&lz58, &&lz59, &&lz60, &&lz61, &&lz62, &&lz63,
  14.   };
  15.  
  16.   goto *jumptable[__builtin_clzll(i)];
  17.  
  18.  lz64:
  19.  lz63:
  20.  lz62:
  21.  lz61:
  22.   r = 0;
  23.   goto end;
  24.  lz60:
  25.   r = (i < 10 ? 0 : 1);
  26.   goto end;
  27.  lz59:
  28.  lz58:
  29.   r = 1;
  30.   goto end;
  31.  lz57:
  32.   r = (i < 100 ? 1 : 2);
  33.   goto end;
  34.  lz56:
  35.  lz55:
  36.   r = 2;
  37.   goto end;
  38.  lz54:
  39.   r = (i < 1000 ? 2 : 3);
  40.   goto end;
  41.  lz53:
  42.  lz52:
  43.  lz51:
  44.   r = 3;
  45.   goto end;
  46.  lz50:
  47.   r = (i < 10000 ? 3 : 4);
  48.   goto end;
  49.  lz49:
  50.  lz48:
  51.   r = 4;
  52.   goto end;
  53.  lz47:
  54.   r = (i < 100000 ? 4 : 5);
  55.   goto end;
  56.  lz46:
  57.  lz45:
  58.   r = 5;
  59.   goto end;
  60.  lz44:
  61.   r = (i < 1000000 ? 5 : 6);
  62.   goto end;
  63.  lz43:
  64.  lz42:
  65.  lz41:
  66.   r = 6;
  67.   goto end;
  68.  lz40:
  69.   r = (i < 10000000 ? 6 : 7);
  70.   goto end;
  71.  lz39:
  72.  lz38:
  73.   r = 7;
  74.   goto end;
  75.  lz37:
  76.   r = (i < 100000000 ? 7 : 8);
  77.   goto end;
  78.  lz36:
  79.  lz35:
  80.   r = 8;
  81.   goto end;
  82.  lz34:
  83.   r = (i < 1000000000 ? 8 : 9);
  84.   goto end;
  85.  lz33:
  86.  lz32:
  87.  lz31:
  88.   r = 9;
  89.   goto end;
  90.  lz30:
  91.   r = (i < 10000000000 ? 9 : 10);
  92.   goto end;
  93.  lz29:
  94.  lz28:
  95.   r = 10;
  96.   goto end;
  97.  lz27:
  98.   r = (i < 100000000000 ? 10 : 11);
  99.   goto end;
  100.  lz26:
  101.  lz25:
  102.   r = 11;
  103.   goto end;
  104.  lz24:
  105.   r = (i < 1000000000000 ? 11 : 12);
  106.   goto end;
  107.  lz23:
  108.  lz22:
  109.  lz21:
  110.   r = 12;
  111.   goto end;
  112.  lz20:
  113.   r = (i < 10000000000000 ? 12 : 13);
  114.   goto end;
  115.  lz19:
  116.  lz18:
  117.   r = 13;
  118.   goto end;
  119.  lz17:
  120.   r = (i < 100000000000000 ? 13 : 14);
  121.   goto end;
  122.  lz16:
  123.  lz15:
  124.   r = 14;
  125.   goto end;
  126.  lz14:
  127.   r = (i < 1000000000000000 ? 14 : 15);
  128.   goto end;
  129.  lz13:
  130.  lz12:
  131.  lz11:
  132.   r = 15;
  133.   goto end;
  134.  lz10:
  135.   r = (i < 10000000000000000 ? 15 : 16);
  136.   goto end;
  137.  lz9:
  138.  lz8:
  139.   r = 16;
  140.   goto end;
  141.  lz7:
  142.   r = (i < 100000000000000000 ? 16 : 17);
  143.   goto end;
  144.  lz6:
  145.  lz5:
  146.   r = 17;
  147.   goto end;
  148.  lz4:
  149.   r = (i < 1000000000000000000 ? 17 : 18);
  150.   goto end;
  151.  lz3:
  152.  lz2:
  153.  lz1:
  154.   r = 18;
  155.   goto end;
  156.  lz0:
  157.   r = (i < 10000000000000000000ULL ? 18 : 19);
  158.   goto end;
  159.  
  160.  
  161.  end:
  162.  
  163.   return r;
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement