newCTFE Status August 2017

Stefan Koch via Digitalmars-d digitalmars-d at puremagic.com
Sat Aug 5 15:59:10 PDT 2017


On Tuesday, 1 August 2017 at 21:27:32 UTC, Stefan Koch wrote:
> [ ... ]

The following code does now compile with newCTFE,
and it's a little faster then the old interpreter.
Not much though since that is not a pathological case.

     pure nothrow @nogc @safe uint[256][8] genTables32(uint 
polynomial)
     {
         uint[256][8] res = 0u;
         {
             int __key479 = 0;
             int __limit480 = 256;
             for (; __key479 < __limit480; __key479 += 1)
             {
                 int i = __key479;
                 uint crc = cast(uint)i;
                 {
                     int __key481 = 0;
                     int __limit482 = 8;
                     for (; __key481 < __limit482; __key481 += 1)
                     {
                         int _ = __key481;
                         crc = crc >> 1 ^ cast(uint)-cast(int)(crc 
& 1u) & polynomial;
                     }
                 }
                 res[0][i] = crc;
             }
         }
         {
             int __key483 = 0;
             int __limit484 = 256;
             for (; __key483 < __limit484; __key483 += 1)
             {
                 int i = __key483;
                 res[1][i] = res[0][i] >> 8 ^ res[0][(res[0][i] & 
255u)];
                 res[2][i] = res[1][i] >> 8 ^ res[0][(res[1][i] & 
255u)];
                 res[3][i] = res[2][i] >> 8 ^ res[0][(res[2][i] & 
255u)];
                 res[4][i] = res[3][i] >> 8 ^ res[0][(res[3][i] & 
255u)];
                 res[5][i] = res[4][i] >> 8 ^ res[0][(res[4][i] & 
255u)];
                 res[6][i] = res[5][i] >> 8 ^ res[0][(res[5][i] & 
255u)];
                 res[7][i] = res[6][i] >> 8 ^ res[0][(res[6][i] & 
255u)];
             }
         }
         return res;
     }


     static immutable tables = genTables32(0xEDB88320);
     static assert(tables[0][0] == 0x00000000 && tables[0][$ - 1] 
== 0x2d02ef8d && tables[7][$ - 1] == 0x264b06e6);



More information about the Digitalmars-d mailing list