https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84240
--- Comment #2 from xvl5190 at psu dot edu --- Please try this example with optimization level -O1/-O2/-O3: /* Executable testcase for 'output flags.' */ /* { dg-do rund *nbum; } */ char TestC() { char r; __asm__("stc": "=@ccc" (r)); if (r) { __asm__("clc": "=@ccnc" (r)); if (r) return 1; } return 0; } char TestE() { char r; /* 1 equals 1. */ __asm__("cmp $1, %1": "=@cce" (r): "r" (1)); if (r) { /* 1 not equals 2. */ __asm__("cmp $2, %1": "=@ccne" (r): "r" (1)); if (r) return 1; } return 0; } char TestZ() { char r; /* 1 equals 1. */ __asm__("cmp $1, %1": "=@ccz" (r): "r" (1)); if (r) { /* 1 not equals 2. */ __asm__("cmp $2, %1": "=@ccnz" (r): "r" (1)); if (r) return 1; } return 0; } char TestA() { char r; /* 1 a 0. */ __asm__("cmp $0, %1": "=@cca" (r): "r" (1)); if (r) { /* 1 na 2. */ __asm__("cmp $2, %1": "=@ccna" (r): "r" (1)); if (r) { /* 1 na 1. */ __asm__("cmp $1, %1": "=@ccna" (r): "r" (1)); if (r) return 1; } } return 0; } char TestAE() { char r; /* 1 ae 0. */ __asm__("cmp $0, %1": "=@ccae" (r): "r" (1)); if (r) { /* 1 nae 2. */ __asm__("cmp $2, %1": "=@ccnae" (r): "r" (1)); if (r) { /* 1 ae 1. */ __asm__("cmp $1, %1": "=@ccae" (r): "r" (1)); if (r) return 1; } } return 0; } char TestB() { char r; /* 1 b 2. */ __asm__("cmp $2, %1": "=@ccb" (r): "r" (1)); if (r) { /* 1 nb 0. */ __asm__("cmp $0, %1": "=@ccnb" (r): "r" (1)); if (r) { /* 1 nb 1. */ __asm__("cmp $1, %1": "=@ccnb" (r): "r" (1)); if (r) return 1; } } return 0; } char TestBE() { char r; /* 1 be 2. */ __asm__("cmp $2, %1": "=@ccbe" (r): "r" (1)); if (r) { /* 1 nbe 0. */ __asm__("cmp $0, %1": "=@ccnbe" (r): "r" (1)); if (r) { /* 1 be 1. */ __asm__("cmp $1, %1": "=@ccbe" (r): "r" (1)); if (r) return 1; } } return 0; } char TestG() { char r; /* 1 g 0. */ __asm__("cmp $0, %1": "=@ccg" (r): "r" (1)); if (r) { /* 1 ng 2. */ __asm__("cmp $2, %1": "=@ccng" (r): "r" (1)); if (r) { /* 1 ng 1. */ __asm__("cmp $1, %1": "=@ccng" (r): "r" (1)); if (r) return 1; } } return 0; } char TestGE() { char r; /* 1 ge 0. */ __asm__("cmp $0, %1": "=@ccge" (r): "r" (1)); if (r) { /* 1 nge 2. */ __asm__("cmp $2, %1": "=@ccnge" (r): "r" (1)); if (r) { /* 1 ge 1. */ __asm__("cmp $1, %1": "=@ccge" (r): "r" (1)); if (r) return 1; } } return 0; } char TestL() { char r; /* 1 l 2. */ __asm__("cmp $2, %1": "=@ccl" (r): "r" (1)); if (r) { /* 1 nl 0. */ __asm__("cmp $0, %1": "=@ccnl" (r): "r" (1)); if (r) { /* 1 nl 1. */ __asm__("cmp $1, %1": "=@ccnl" (r): "r" (1)); if (r) return 1; } } return 0; } char TestLE() { char r; /* 1 le 2. */ __asm__("cmp $2, %1": "=@ccle" (r): "r" (1)); if (r) { /* 1 nle 0. */ __asm__("cmp $0, %1": "=@ccnle" (r): "r" (1)); if (r) { /* 1 le 1. */ __asm__("cmp $1, %1": "=@ccle" (r): "r" (1)); if (r) return 1; } } return 0; } char TestO() { char r; unsigned char res = 128; /* overflow. */ __asm__("addb $128, %1": "=@cco" (r), "+r" (res)); if (r) { /* not overflow. */ __asm__("addb $1, %1": "=@ccno" (r), "+r" (res)); if (r) return 1; } return 0; } char TestP() { char r, res = 1; /* even # bits. */ __asm__("addb $2, %1": "=@ccp" (r), "+r" (res)); if (r) { /* odd # bits. */ __asm__("addb $1, %1": "=@ccnp" (r), "+r" (res)); if (r) return 1; } return 0; } char TestS() { char r, res = 1; /* sign bit set. */ __asm__("addb $128, %1": "=@ccs" (r), "+r" (res)); if (r) { /* sign bit not set. */ __asm__("subb $128, %1": "=@ccns" (r), "+r" (res)); if (r) return 1; } return 0; } /* dg-do treats exit code of 0 as success. */ int main() { if (TestC() && TestE() && TestZ() && TestA() && TestAE() && TestB() && TestBE() && TestG() && TestGE() && TestL() && TestLE() && TestO() && TestP() && TestS()) return 0; __builtin_abort(); }