icmp_cset_signed_long.c (619B)
1 /* Signed 64-bit ordering comparisons materialized to booleans: 2 * < -> cmp x,x + cset w, lt <= -> le 3 * > -> gt >= -> ge 4 * Values straddle the 32-bit range so the 64-bit (x-register) compare is 5 * required. volatile defeats folding. 6 * Exit code: a=-5000000000, b=5000000000: lt=1 le=1 gt=0 ge=0 7 * 1*10 + 1*10 + 0*100 + 0*100 + 22 = 42. */ 8 int test_main(void) { 9 volatile long a = -5000000000L, b = 5000000000L; 10 int lt = (a < b); /* 1 */ 11 int le = (a <= b); /* 1 */ 12 int gt = (a > b); /* 0 */ 13 int ge = (a >= b); /* 0 */ 14 return lt * 10 + le * 10 + gt * 100 + ge * 100 + 22; 15 }