A simple implementation of the popcnt function in C:
int popcnt(uint64_t x) {
  int s = 0; 
  for (int i = 0; i < 64; i++) {
    if ((x << i) & 1 == 1) s++;
  }
  return s;
}
I am using inline assembly language (x86-64) to implement popcnt,
int asm_popcnt(uint64_t x) {
  int i = 0, sum = 0;
  uint64_t tmp = 0;
  asm ( ".Pct:               \n\t"
        "movq   %[xx],  %[tm]\n\t"
        "andq    $0x1,  %[tm]\n\t"
        "test   %[tm],  %[tm]\n\t"
        "je      .Grt        \n\t"
        "incl   %[ss]        \n\t"
        ".Grt:               \n\t"
        "shrq    $0x1,  %[xx]\n\t"
        "incl   %[ii]        \n\t"
        "cmpl   $0x3f,  %[ii]\n\t"
        "jle     .Pct        \n\t"
        : [ss] "+r"(sum)
        : [xx] "r"(x)  , [ii] "r"(i), 
          [tm] "r"(tmp)
  );
  return sum;
}
but received WA (online judge)
I tested all powers of 2 (from 0x1 to (0x1 << 63)) on my computer and it returned 1, which indicates that my asm_popcnt can identify all bits of any 64_bits integer since all other integers are just combinations of 0x1, 0x2, 0x4, etc.(for example, 0x11a = 0x2 "or" 0x8 "or" 0x10 "or" 0x100). Therefore there shouldn't be cases for OJ to return a "WA". Is there anything wrong in my code? The jump instruction?
 
    