===================================================================
@@ -33,6 +33,7 @@
$(srcdir)/config/stormy16/stormy16-lib2-clzhi2.c \
$(srcdir)/config/stormy16/stormy16-lib2-ctzhi2.c \
$(srcdir)/config/stormy16/stormy16-lib2-ffshi2.c \
+ $(srcdir)/config/stormy16/stormy16-lib2-cmpsi2.c \
$(srcdir)/config/stormy16/stormy16-lib2-ucmpsi2.c
# Floating point emulation libraries.
@@ -46,4 +47,4 @@
dp-bit.c: $(srcdir)/config/fp-bit.c
cat $(srcdir)/config/fp-bit.c > dp-bit.c
-TARGET_LIBGCC2_CFLAGS = -Os
+TARGET_LIBGCC2_CFLAGS = -O2
===================================================================
@@ -0,0 +1,2 @@
+#define XSTORMY16_CMPSI2
+#include "stormy16-lib2.c"
===================================================================
@@ -332,3 +332,26 @@
return hi_a < hi_b ? 0 : 2;
}
#endif
+
+#ifdef XSTORMY16_CMPSI2
+/* Performs an signed comparison of two 32-bit values: A and B.
+ If A is less than B, then 0 is returned. If A is greater than B,
+ then 2 is returned. Otherwise A and B are equal and 1 is returned. */
+
+word_type
+__cmpsi2 (SItype a, SItype b)
+{
+ word_type hi_a = (a >> 16);
+ word_type hi_b = (b >> 16);
+
+ if (hi_a == hi_b)
+ {
+ word_type low_a = (a & 0xffff);
+ word_type low_b = (b & 0xffff);
+
+ return low_a < low_b ? 0 : (low_a > low_b ? 2 : 1);
+ }
+
+ return hi_a < hi_b ? 0 : 2;
+}
+#endif