+#elif defined(__arm__)
+
+#define NF (1u << 31)
+#define ZF (1u << 30)
+#define CF (1u << 29)
+#define VF (1u << 28)
+
+ {
+ static const char
+ *modetab[] = { "?00", "?01", "?02", "?03", "?04", "?05", "?06", "?07",
+ "?08", "?09", "?10", "?11", "?12", "?13", "?14", "?15",
+ "usr", "fiq", "irq", "svc", "?20", "?21", "mon", "abt",
+ "?24", "?25", "hyp", "und", "?28", "?29", "?30", "sys" },
+ *condtab[] = { "eq", "ne", "cs", "cc", "mi", "pl", "vs", "vc",
+ "hi", "ls", "ge", "lt", "gt", "le", "al", "nv" };
+
+ printf("\tuser: %cn %cz %cc %cv %cq ge=%c%c%c%c;",
+ (f >> 31)&1u ? '+' : '-',
+ (f >> 30)&1u ? '+' : '-',
+ (f >> 29)&1u ? '+' : '-',
+ (f >> 28)&1u ? '+' : '-',
+ (f >> 27)&1u ? '+' : '-',
+ (f >> 19)&1u ? '1' : '0',
+ (f >> 18)&1u ? '1' : '0',
+ (f >> 17)&1u ? '1' : '0',
+ (f >> 16)&1u ? '1' : '0');
+ if (f&NF) printf(" mi"); else printf(" pl");
+ if (f&ZF) printf(" eq"); else printf(" ne");
+ if (f&CF) printf(" cs/hs"); else printf(" cc/lo");
+ if (f&VF) printf(" vs"); else printf(" vc");
+ if ((f&CF) && !(f&ZF)) printf(" hi"); else printf(" ls");
+ if (!(f&VF) == !(f&NF)) printf(" ge"); else printf(" lt");
+ if (!(f&VF) == !(f&NF) && !(f&ZF)) printf(" gt"); else printf(" le");
+ putchar('\n');
+ printf("\tsystem: %cj it=%s:%c%c%c%c %ce %ca %ci %cf %ct m=%s\n",
+ (f >> 24)&1u ? '+' : '-',
+ condtab[(f >> 12)&15u],
+ (f >> 11)&1u ? '1' : '0',
+ (f >> 10)&1u ? '1' : '0',
+ (f >> 26)&1u ? '1' : '0',
+ (f >> 25)&1u ? '1' : '0',
+ (f >> 9)&1u ? '+' : '-',
+ (f >> 8)&1u ? '+' : '-',
+ (f >> 7)&1u ? '+' : '-',
+ (f >> 6)&1u ? '+' : '-',
+ (f >> 5)&1u ? '+' : '-',
+ modetab[(f >> 0)&31u]);
+ }
+
+#undef NF
+#undef ZF
+#undef CF
+#undef VF
+
+#elif defined(__aarch64__)
+
+#define NF (1u << 31)
+#define ZF (1u << 30)
+#define CF (1u << 29)
+#define VF (1u << 28)
+
+ printf("\tuser: %cn %cz %cc %cv;",
+ (f >> 31)&1u ? '+' : '-',
+ (f >> 30)&1u ? '+' : '-',
+ (f >> 29)&1u ? '+' : '-',
+ (f >> 28)&1u ? '+' : '-');
+ if (f&NF) printf(" mi"); else printf(" pl");
+ if (f&ZF) printf(" eq"); else printf(" ne");
+ if (f&CF) printf(" cs/hs"); else printf(" cc/lo");
+ if (f&VF) printf(" vs"); else printf(" vc");
+ if ((f&CF) && !(f&ZF)) printf(" hi"); else printf(" ls");
+ if (!(f&VF) == !(f&NF)) printf(" ge"); else printf(" lt");
+ if (!(f&VF) == !(f&NF) && !(f&ZF)) printf(" gt"); else printf(" le");
+ putchar('\n');
+
+#undef NF
+#undef ZF
+#undef CF
+#undef VF
+
+#else
+# error "not supported"
+#endif
+