https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108004

--- Comment #4 from HaoChen Gui <guihaoc at gcc dot gnu.org> ---
$cat asm_test.c
#include <stdio.h>

unsigned long foo() {
  unsigned long res;
  __asm__ ("li 3,0xffffffffffffffff\n\t"
           "li 4,0xfffffffffffffff1\n\t"
           "and. 3,3,4\n\t"
           "mfcr %0"
           : "=r" (res));
  return res;
}

void
main()
{
  printf ("%lx\n", foo());
}
$ gcc -O1 -o asm_test asm_test.c && ./asm_test
82000482

Use the assembly to test the "and.". The bit32 (cr0 LT bit) is set when the
result is less than 0.

Reply via email to