Fix Smi representation range bug.

For 64bit platform, the Smi format is:

     upper 32bit   lower 32bit
 |              |             |
 ~~~~~~~~~~~~~~~              |
    Smi                       V
                             bit 0 as flag

For 32bit platform, the Smi format is:

 |              |
 ~~~~~~~~~~~~~~ |
    Smi         V
 |< 31 - 1 bit| bit 0 as flag

So we have 32bit valid bits for 64bit platform, like x64 and TileGX.