new file mode 100644
@@ -0,0 +1,27 @@
+#define XSTR(a,b) a ## b
+#define T(a,b) XSTR(a,b)
+
+int T(NAME,ii)(int a, int b) { return -(a CODE b); }
+int T(NAME,il)(long a, long b) { return -(a CODE b); }
+long T(NAME,li)(int a, int b) { return -(a CODE b); }
+long T(NAME,ll)(long a, long b) { return -(a CODE b); }
+
+int T(NAME,iin0)(int a) { return -(a CODE 0); }
+int T(NAME,iln0)(long a) { return -(a CODE 0); }
+long T(NAME,lin0)(int a) { return -(a CODE 0); }
+long T(NAME,lln0)(long a) { return -(a CODE 0); }
+
+int T(NAME,iin1)(int a) { return -(a CODE 1); }
+int T(NAME,iln1)(long a) { return -(a CODE 1); }
+long T(NAME,lin1)(int a) { return -(a CODE 1); }
+long T(NAME,lln1)(long a) { return -(a CODE 1); }
+
+int T(NAME,iinm1)(int a) { return -(a CODE -1); }
+int T(NAME,ilnm1)(long a) { return -(a CODE -1); }
+long T(NAME,linm1)(int a) { return -(a CODE -1); }
+long T(NAME,llnm1)(long a) { return -(a CODE -1); }
+
+int T(NAME,iin42)(int a) { return -(a CODE 42); }
+int T(NAME,iln42)(long a) { return -(a CODE 42); }
+long T(NAME,lin42)(int a) { return -(a CODE 42); }
+long T(NAME,lln42)(long a) { return -(a CODE 42); }
new file mode 100644
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mcpu=future" } */
+
+#define NAME eq
+#define CODE ==
+
+#include "setnbc.h"
+
+/* { dg-final { scan-assembler-times {\msetnbc\M} 20 } } */
new file mode 100644
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mcpu=future" } */
+
+#define NAME ge
+#define CODE >=
+
+#include "setnbc.h"
+
+/* "x >= 0" is done without setnbc.
+ The generic code sometimes transforms "x >= A" to "x > A-1"; we allow
+ either here. */
+/* { dg-final { scan-assembler-times {\msetnbcr?\M} 16 } } */
new file mode 100644
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mcpu=future" } */
+
+#define NAME gt
+#define CODE >
+
+#include "setnbc.h"
+
+/* "x > -1" is done without setnbc. */
+/* { dg-final { scan-assembler-times {\msetnbc\M} 16 } } */
new file mode 100644
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mcpu=future" } */
+
+#define NAME le
+#define CODE <=
+
+#include "setnbc.h"
+
+/* "x <= -1" is done without setnbc. */
+/* { dg-final { scan-assembler-times {\msetnbcr\M} 16 } } */
new file mode 100644
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mcpu=future" } */
+
+#define NAME lt
+#define CODE <
+
+#include "setnbc.h"
+
+/* "x < 0" is done without setnbc.
+ The generic code sometimes transforms "x < A" to "x <= A-1"; we allow
+ either here. */
+/* { dg-final { scan-assembler-times {\msetnbcr?\M} 16 } } */
new file mode 100644
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mcpu=future" } */
+
+#define NAME ne
+#define CODE !=
+
+#include "setnbc.h"
+
+/* { dg-final { scan-assembler-times {\msetnbcr\M} 20 } } */