aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2003-11-24 22:07:26 +0000
committerH. Peter Anvin <hpa@zytor.com>2003-11-24 22:07:26 +0000
commit79b071e5acba1a3bc6e6e4c8e354e0b1630676fb (patch)
treebb770b0b24a25eeb12a5ac88c9c65269f34e6438
parent8fede992df66061c37671ed1e7b44e5321837c65 (diff)
downloadklibc-79b071e5acba1a3bc6e6e4c8e354e0b1630676fb.tar.gz
Add pipe.c missing from previous checkinklibc-0.86
-rw-r--r--klibc/arch/ia64/pipe.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/klibc/arch/ia64/pipe.c b/klibc/arch/ia64/pipe.c
new file mode 100644
index 0000000000000..5f5dd05727edd
--- /dev/null
+++ b/klibc/arch/ia64/pipe.c
@@ -0,0 +1,42 @@
+/*
+ * pipe.c
+ */
+
+#include "syscommon.h"
+#include <klibc/archsys.h>
+
+#define ASM_CLOBBERS ,"out2", "out3", "out4", "out5", "out6", "out7", \
+ /* Non-stacked integer registers, minus r8, r9, r10, r15. */ \
+ "r2", "r3", "r11", "r12", "r13", "r14", "r16", "r17", "r18", \
+ "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26", "r27", \
+ "r28", "r29", "r30", "r31", \
+ /* Predicate registers. */ \
+ "p6", "p7", "p8", "p9", "p10", "p11", "p12", "p13", "p14", "p15", \
+ /* Non-rotating fp registers. */ \
+ "f6", "f7", "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \
+ /* Branch registers. */ \
+ "b6", "b7"
+
+int pipe(int *filedes)
+{
+ register long _r8 asm("r8");
+ register long _r9 asm("r9");
+ register long _r10 asm("r10");
+ register long _r15 asm("r15") = __NR_pipe;
+ register long _out0 asm ("out0") = (long)filedes;
+ long _retval;
+ __asm __volatile (__IA64_BREAK
+ : "=r" (_r8), "=r" (_r10), "=r" (_r15),
+ "=r" (_out0)
+ : "2" (_r15), "3" (_out0)
+ : "memory" ASM_CLOBBERS);
+ if (_r10 == -1) {
+ errno = _r8;
+ _retval = -1;
+ } else {
+ filedes[0] = _r8;
+ filedes[1] = _r9;
+ _retval = 0;
+ }
+ return _retval;
+}