diff --git a/tccasm.c b/tccasm.c index e8bc357..50fb794 100644 --- a/tccasm.c +++ b/tccasm.c @@ -946,7 +946,7 @@ static void subst_asm_operands(ASMOperand *operands, int nb_operands, modifier = 0; if (*str == 'c' || *str == 'n' || *str == 'b' || *str == 'w' || - *str == 'h' || *str == 'k') + *str == 'h' || *str == 'k' || *str == 'q') modifier = *str++; index = find_constraint(operands, nb_operands, str, &str); if (index < 0) diff --git a/tests/tcctest.c b/tests/tcctest.c index 5851fb4..7fd8171 100644 --- a/tests/tcctest.c +++ b/tests/tcctest.c @@ -2584,6 +2584,17 @@ unsigned long mconstraint_test(struct struct1231 *r) return ret + a[0]; } +#ifdef __x86_64__ +int fls64(unsigned long long x) +{ + int bitpos = -1; + asm("bsrq %1,%q0" + : "+r" (bitpos) + : "rm" (x)); + return bitpos + 1; +} +#endif + unsigned int set; void asm_test(void)