summaryrefslogtreecommitdiffstats
path: root/contrib/syslinux-4.02/com32/lib/libgcc
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/syslinux-4.02/com32/lib/libgcc')
-rw-r--r--contrib/syslinux-4.02/com32/lib/libgcc/__ashldi3.S29
-rw-r--r--contrib/syslinux-4.02/com32/lib/libgcc/__ashrdi3.S29
-rw-r--r--contrib/syslinux-4.02/com32/lib/libgcc/__divdi3.c29
-rw-r--r--contrib/syslinux-4.02/com32/lib/libgcc/__lshrdi3.S29
-rw-r--r--contrib/syslinux-4.02/com32/lib/libgcc/__moddi3.c29
-rw-r--r--contrib/syslinux-4.02/com32/lib/libgcc/__muldi3.S34
-rw-r--r--contrib/syslinux-4.02/com32/lib/libgcc/__negdi2.S21
-rw-r--r--contrib/syslinux-4.02/com32/lib/libgcc/__udivdi3.c13
-rw-r--r--contrib/syslinux-4.02/com32/lib/libgcc/__udivmoddi4.c32
-rw-r--r--contrib/syslinux-4.02/com32/lib/libgcc/__umoddi3.c16
10 files changed, 261 insertions, 0 deletions
diff --git a/contrib/syslinux-4.02/com32/lib/libgcc/__ashldi3.S b/contrib/syslinux-4.02/com32/lib/libgcc/__ashldi3.S
new file mode 100644
index 0000000..f2cc11c
--- /dev/null
+++ b/contrib/syslinux-4.02/com32/lib/libgcc/__ashldi3.S
@@ -0,0 +1,29 @@
+/*
+ * arch/i386/libgcc/__ashldi3.S
+ *
+ * 64-bit shl
+ */
+ .text
+ .align 4
+ .globl __ashldi3
+ .type __ashldi3,@function
+__ashldi3:
+#ifndef REGPARM
+ movl 4(%esp),%eax
+ movl 8(%esp),%edx
+ movb 12(%esp),%cl
+#endif
+ cmpb $32,%cl
+ jae 1f
+
+ shldl %cl,%eax,%edx
+ shl %cl,%eax
+ ret
+
+1:
+ xorl %edx,%edx
+ shl %cl,%eax
+ xchgl %edx,%eax
+ ret
+
+ .size __ashldi3,.-__ashldi3
diff --git a/contrib/syslinux-4.02/com32/lib/libgcc/__ashrdi3.S b/contrib/syslinux-4.02/com32/lib/libgcc/__ashrdi3.S
new file mode 100644
index 0000000..3f9c520
--- /dev/null
+++ b/contrib/syslinux-4.02/com32/lib/libgcc/__ashrdi3.S
@@ -0,0 +1,29 @@
+/*
+ * arch/i386/libgcc/__ashrdi3.S
+ *
+ * 64-bit sar
+ */
+ .text
+ .align 4
+ .globl __ashrdi3
+ .type __ashrdi3,@function
+__ashrdi3:
+#ifndef REGPARM
+ movl 4(%esp),%eax
+ movl 8(%esp),%edx
+ movb 12(%esp),%cl
+#endif
+ cmpb $32,%cl
+ jae 1f
+
+ shrdl %cl,%edx,%eax
+ sarl %cl,%edx
+ ret
+
+1:
+ sarl %cl,%edx
+ movl %edx,%eax
+ cdq
+ ret
+
+ .size __ashrdi3,.-__ashrdi3
diff --git a/contrib/syslinux-4.02/com32/lib/libgcc/__divdi3.c b/contrib/syslinux-4.02/com32/lib/libgcc/__divdi3.c
new file mode 100644
index 0000000..97c7795
--- /dev/null
+++ b/contrib/syslinux-4.02/com32/lib/libgcc/__divdi3.c
@@ -0,0 +1,29 @@
+/*
+ * arch/i386/libgcc/__divdi3.c
+ */
+
+#include <stdint.h>
+#include <stddef.h>
+
+extern uint64_t __udivmoddi4(uint64_t num, uint64_t den, uint64_t * rem);
+
+int64_t __divdi3(int64_t num, int64_t den)
+{
+ int minus = 0;
+ int64_t v;
+
+ if (num < 0) {
+ num = -num;
+ minus = 1;
+ }
+ if (den < 0) {
+ den = -den;
+ minus ^= 1;
+ }
+
+ v = __udivmoddi4(num, den, NULL);
+ if (minus)
+ v = -v;
+
+ return v;
+}
diff --git a/contrib/syslinux-4.02/com32/lib/libgcc/__lshrdi3.S b/contrib/syslinux-4.02/com32/lib/libgcc/__lshrdi3.S
new file mode 100644
index 0000000..eee3aac
--- /dev/null
+++ b/contrib/syslinux-4.02/com32/lib/libgcc/__lshrdi3.S
@@ -0,0 +1,29 @@
+/*
+ * arch/i386/libgcc/__lshrdi3.S
+ *
+ * 64-bit shr
+ */
+ .text
+ .align 4
+ .globl __lshrdi3
+ .type __lshrdi3,@function
+__lshrdi3:
+#ifndef REGPARM
+ movl 4(%esp),%eax
+ movl 8(%esp),%edx
+ movb 12(%esp),%cl
+#endif
+ cmpb $32,%cl
+ jae 1f
+
+ shrdl %cl,%edx,%eax
+ shrl %cl,%edx
+ ret
+
+1:
+ shrl %cl,%edx
+ xorl %eax,%eax
+ xchgl %edx,%eax
+ ret
+
+ .size __lshrdi3,.-__lshrdi3
diff --git a/contrib/syslinux-4.02/com32/lib/libgcc/__moddi3.c b/contrib/syslinux-4.02/com32/lib/libgcc/__moddi3.c
new file mode 100644
index 0000000..4fc5588
--- /dev/null
+++ b/contrib/syslinux-4.02/com32/lib/libgcc/__moddi3.c
@@ -0,0 +1,29 @@
+/*
+ * arch/i386/libgcc/__moddi3.c
+ */
+
+#include <stdint.h>
+#include <stddef.h>
+
+extern uint64_t __udivmoddi4(uint64_t num, uint64_t den, uint64_t * rem);
+
+int64_t __moddi3(int64_t num, int64_t den)
+{
+ int minus = 0;
+ int64_t v;
+
+ if (num < 0) {
+ num = -num;
+ minus = 1;
+ }
+ if (den < 0) {
+ den = -den;
+ minus ^= 1;
+ }
+
+ (void)__udivmoddi4(num, den, (uint64_t *)&v);
+ if (minus)
+ v = -v;
+
+ return v;
+}
diff --git a/contrib/syslinux-4.02/com32/lib/libgcc/__muldi3.S b/contrib/syslinux-4.02/com32/lib/libgcc/__muldi3.S
new file mode 100644
index 0000000..648a88a
--- /dev/null
+++ b/contrib/syslinux-4.02/com32/lib/libgcc/__muldi3.S
@@ -0,0 +1,34 @@
+/*
+ * arch/i386/libgcc/__muldi3.S
+ *
+ * 64*64 = 64 bit unsigned multiplication
+ */
+
+ .text
+ .align 4
+ .globl __muldi3
+ .type __muldi3,@function
+__muldi3:
+ push %esi
+#ifndef REGPARM
+ movl 8(%esp),%eax
+ movl %eax,%esi
+ movl 16(%esp),%ecx
+ mull %ecx
+ imull 12(%esp),%ecx
+ imull 20(%esp),%esi
+ addl %ecx,%edx
+ addl %esi,%edx
+#else
+ movl %eax,%esi
+ push %edx
+ mull %ecx
+ imull 8(%esp),%esi
+ addl %esi,%edx
+ pop %esi
+ imull %esi,%ecx
+ addl %ecx,%edx
+#endif
+ pop %esi
+ ret
+ .size __muldi3,.-__muldi3
diff --git a/contrib/syslinux-4.02/com32/lib/libgcc/__negdi2.S b/contrib/syslinux-4.02/com32/lib/libgcc/__negdi2.S
new file mode 100644
index 0000000..37b0d2d
--- /dev/null
+++ b/contrib/syslinux-4.02/com32/lib/libgcc/__negdi2.S
@@ -0,0 +1,21 @@
+/*
+ * arch/i386/libgcc/__negdi2.S
+ *
+ * 64-bit negation
+ */
+
+ .text
+ .align 4
+ .globl __negdi2
+ .type __negdi2,@function
+__negdi2:
+#ifndef REGPARM
+ movl 4(%esp),%eax
+ movl 8(%esp),%edx
+#endif
+ negl %edx
+ negl %eax
+ sbbl $0,%edx
+ ret
+
+ .size __negdi2,.-__negdi2
diff --git a/contrib/syslinux-4.02/com32/lib/libgcc/__udivdi3.c b/contrib/syslinux-4.02/com32/lib/libgcc/__udivdi3.c
new file mode 100644
index 0000000..db5b359
--- /dev/null
+++ b/contrib/syslinux-4.02/com32/lib/libgcc/__udivdi3.c
@@ -0,0 +1,13 @@
+/*
+ * arch/i386/libgcc/__divdi3.c
+ */
+
+#include <stdint.h>
+#include <stddef.h>
+
+extern uint64_t __udivmoddi4(uint64_t num, uint64_t den, uint64_t * rem);
+
+uint64_t __udivdi3(uint64_t num, uint64_t den)
+{
+ return __udivmoddi4(num, den, NULL);
+}
diff --git a/contrib/syslinux-4.02/com32/lib/libgcc/__udivmoddi4.c b/contrib/syslinux-4.02/com32/lib/libgcc/__udivmoddi4.c
new file mode 100644
index 0000000..dd60263
--- /dev/null
+++ b/contrib/syslinux-4.02/com32/lib/libgcc/__udivmoddi4.c
@@ -0,0 +1,32 @@
+#include <klibc/diverr.h>
+#include <stdint.h>
+
+uint64_t __udivmoddi4(uint64_t num, uint64_t den, uint64_t * rem_p)
+{
+ uint64_t quot = 0, qbit = 1;
+
+ if (den == 0) {
+ __divide_error();
+ return 0; /* If trap returns... */
+ }
+
+ /* Left-justify denominator and count shift */
+ while ((int64_t) den >= 0) {
+ den <<= 1;
+ qbit <<= 1;
+ }
+
+ while (qbit) {
+ if (den <= num) {
+ num -= den;
+ quot += qbit;
+ }
+ den >>= 1;
+ qbit >>= 1;
+ }
+
+ if (rem_p)
+ *rem_p = num;
+
+ return quot;
+}
diff --git a/contrib/syslinux-4.02/com32/lib/libgcc/__umoddi3.c b/contrib/syslinux-4.02/com32/lib/libgcc/__umoddi3.c
new file mode 100644
index 0000000..b897ee0
--- /dev/null
+++ b/contrib/syslinux-4.02/com32/lib/libgcc/__umoddi3.c
@@ -0,0 +1,16 @@
+/*
+ * arch/i386/libgcc/__umoddi3.c
+ */
+
+#include <stdint.h>
+#include <stddef.h>
+
+extern uint64_t __udivmoddi4(uint64_t num, uint64_t den, uint64_t * rem);
+
+uint64_t __umoddi3(uint64_t num, uint64_t den)
+{
+ uint64_t v;
+
+ (void)__udivmoddi4(num, den, &v);
+ return v;
+}