summaryrefslogtreecommitdiff
path: root/newlib/libc/machine/h8500/cmpsi.c
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/machine/h8500/cmpsi.c')
-rw-r--r--newlib/libc/machine/h8500/cmpsi.c126
1 files changed, 126 insertions, 0 deletions
diff --git a/newlib/libc/machine/h8500/cmpsi.c b/newlib/libc/machine/h8500/cmpsi.c
new file mode 100644
index 00000000000..3357343f559
--- /dev/null
+++ b/newlib/libc/machine/h8500/cmpsi.c
@@ -0,0 +1,126 @@
+
+union u
+{
+ struct
+ {
+ short int msw;
+ unsigned short lsw;
+ } w;
+ long l;
+};
+
+union us
+{
+ struct
+ {
+ short int msw;
+ unsigned short lsw;
+ } w;
+ long l;
+};
+
+int
+__cmpsi2(long arga,
+ short int msw_b, unsigned short int lsw_b)
+{
+ union u u;
+ u.l = arga;
+
+ if (u.w.msw != msw_b)
+ {
+ if (u.w.msw < msw_b) return 0;
+ return 2;
+ }
+ if (u.w.lsw != lsw_b)
+ {
+ if (u.w.lsw < lsw_b) return 0;
+ return 2;
+ }
+ return 1;
+}
+
+
+int
+__ucmpsi2(unsigned long arga,
+ unsigned short int msw_b, unsigned short int lsw_b)
+{
+ union us u;
+ u.l = arga;
+
+ if (u.w.msw != msw_b)
+ {
+ if (u.w.msw < msw_b) return 0;
+ return 2;
+ }
+ if (u.w.lsw != lsw_b)
+ {
+ if (u.w.lsw < lsw_b) return 0;
+ return 2;
+ }
+ return 1;
+}
+
+
+union pu
+{
+ struct {
+ char ignore;
+ signed char msb;
+ unsigned short lsw;
+ } w;
+ long l;
+};
+
+union pun
+{
+ struct {
+ char ignore;
+ unsigned char msb;
+ unsigned short lsw;
+ } w;
+ long l;
+};
+
+
+int
+__cmppsi2(long arga, long argb)
+{
+ union pu a;
+ union pu b;
+ a.l = arga;
+ b.l = argb;
+
+ if (a.w.msb != b.w.msb)
+ {
+ if (a.w.msb < b.w.msb) return 0;
+ return 2;
+ }
+ if (a.w.lsw != b.w.lsw)
+ {
+ if (a.w.lsw < b.w.lsw) return 0;
+ return 2;
+ }
+ return 1;
+}
+
+
+int
+__ucmppsi2(long arga, long argb)
+{
+ union pun a;
+ union pun b;
+ a.l = arga;
+ b.l = argb;
+
+ if (a.w.msb != b.w.msb)
+ {
+ if (a.w.msb < b.w.msb) return 0;
+ return 2;
+ }
+ if (a.w.lsw != b.w.lsw)
+ {
+ if (a.w.lsw < b.w.lsw) return 0;
+ return 2;
+ }
+ return 1;
+}